Skip to content
On this page

📆 2015-06-17

Android M の RuntimePermissions Sample 要約

#Android

Android M で導入されるRuntime Permissionsのサンプルアプリを、カメラへのアクセス権限に絞って要約します。 https://github.com/googlesamples/android-RuntimePermissions

AndroidManifest.xml

xml
    <uses-permission android:name="android.permission.CAMERA"/>

カメラへのアクセス権限を要求しています。 上記の記述でMNC未満の端末はインストール時に権限が与えられますが、これに加えてAndroid Mでは、実行時に権限の有無をチェックし、無ければユーザに権限を要求しなければいけません。

権限チェック

java
if (PermissionUtil.hasSelfPermission(this, Manifest.permission.CAMERA)) {
    //権限あり
    showCameraPreview();
} else {
    //権限なし
    requestPermissions(new String[]{Manifest.permission.CAMERA}, REQUEST_CAMERA);
}

img1.png

requestPermissions の結果処理

上記のダイアログにユーザが回答すると、Activity#onRequestPermissionsResultが呼び出されます。

java
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {

    if (requestCode == REQUEST_CAMERA) {
        if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
            // 「許可」が押下された

        } else {
            // 「許可しない」が押下された
        }

    } else {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
    }
}

権限がない場合に発生する例外

java
Camera c = null;
try {
    c = Camera.open(cameraId); // attempt to get a Camera instance
} catch (Exception e) {
    //Camera is not available
}

カメラへのアクセス権限がない状態で Camera.open を実行すると例外が発生します。 権限があれば問題なくカメラにアクセスできます。

権限チェックメソッド

java
public static boolean hasSelfPermission(Activity activity, String permission) {
    if (!isMNC()) {
        return true;
    }
    return activity.checkSelfPermission(permission) == PackageManager.PERMISSION_GRANTED;
}

Android M未満の端末はインストール時に権限が与えられるので常に true を返します。 Android M以上なら Activity#checkSelfPermission でチェックした結果を返します。

その他のPermissionUtilのメソッド

アプリの権限設定画面

設定→アプリ→アプリ情報→許可 と進んだ画面で権限をON/OFFできます。

img2.png

Released under the MIT License.