LoginSignup
9
9

More than 5 years have passed since last update.

Android 6.0(SDK 23)から変わったパーミッションの処理に関して

Posted at

Android 5.1(SDK 22)まではGoogle Play Storeからダウンロード時にそのアプリを実行するために必要なパーミッションをユーザに全て確認させていたが、Android 6.0からはアプリ実行時に必要なパーミッションを確認させるように変更された。
同時にアプリダウンロード後もユーザの判断によってアプリで必要なパーミッションを取り消すことができるようになった。(設定->アプリケーション)
これによってパーミッションを取り消されたアプリでは本来の動作ができず、アプリが例外を起こしてしまう。そのためアプリ制作者はAndroid 6.0以降に対応するためパーミッションが必要な処理を行う際に許可されているか確認する処理を実装する必要がある。
※ targetSdkVersionを22以下にすることによってAndroid 6.0でもダウンロード時に確認させることは可能

Install Time Permission から Runtime Permission への変更

  • Install Time Permission
    Google Playからのダウンロード時にアプリが要求しているパーミッション全てを許可するか確認する方式
    Android 5.1以前はこの方式
    ダウンロード時に許可されるので実行後に権限関係の処理は必要ない。

  • Runtime Permission
    アプリ実行時に必要なパーミッションを個別に許可するか確認する方式
    Android 6.0以降はこの方式
    実行時に権限を確認するため、個別にパーミッションが許可されているか確認する必要がある。

Android 6.0でパーミッションの許可を実装

カメラのパーミッションが許可されているか確認し、許可されてなければユーザにリクエストします。

checkSelfPermission
if (checkSelfPermission(Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) {
    // 権限がない場合はリクエスト
    requestPermissions(new String[]{Manifest.permission.CAMERA}, PERMISSIONS_REQUEST_CAMERA_STATE);
} else {
    // 権限がある場合は後続処理を実装
}
onRequestPermissionsResult
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
    if (MY_PERMISSIONS_REQUEST_READ_PHONE_STATE == requestCode) {
        if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
            // カメラのパーミッションが許可された場合、後続処理を実装
        } else {
            // カメラのパーミッションが拒否された場合、
            // カメラを起動せずダイアログを表示するなどの処理を実装
        }
    }
}
9
9
0

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
9
9