LoginSignup
10

More than 5 years have passed since last update.

Android M の RuntimePermissions Sample 要約

Last updated at Posted at 2015-06-16

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

AndroidManifest.xml

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

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

権限チェック

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

カメラへのアクセス権限をチェックして、権限がなければ Activty#requestPermissions を呼び出して権限を要求します。このメソッドの呼び出で、次のようなダイアログが表示されます。

capture1.png

requestPermissions の結果処理

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

@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);
    }
}

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

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

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

権限チェックメソッド

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できます。

capture2.png

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10