LoginSignup
7
8

More than 5 years have passed since last update.

Marshmallow端末で、Permission利用確認をする。

Posted at

前置き

Android 6.0になって、一部条件でRuntime時にPermissionの許可をユーザに行うことが必要になった。
具体的には下記を満たす場合には、Runtime時にPermissionの許可をユーザに行わないと対象機能の利用時にSecurityExceptionを起こしてしまう。

  • compileSdkVersion 23 でビルド
  • Android 6.0以上の端末でプレイ
  • protectionLevelがdangerous以上のPermissionを必要とするアプリ

Protection Levelがdangerousかどうかは、下記サイトから一覧で確認できる。

確認方法

位置情報はdangerousに該当するPermissionであるので一例としてあげた。

Code

public class MainActivity extends Activity implements ActivityCompat.OnRequestPermissionsResultCallback {
    final int REQUEST_PERMISSION_CODE = 1;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        // ...

        String[] permissions = new String[]{ Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.ACCESS_FINE_LOCATION };

        if (!this.isPermissionGranted(permissions)) {
            // まだ権限がないので権限をユーザに権限を求める
            ActivityCompat.requestPermissions(this, permissions, REQUEST_PERMISSION_CODE);
        } else {
            // すでに権限があるのでOK (Android 6.0未満 or すでに持っている)
        }
    }

    /**
     * Permissionの利用同意結果
     */
    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        if (requestCode != REQUEST_PERMISSION_CODE) {
            return;
        }

        if (this.isPermissionGranted(permissions)) {
            // パーミッション取得に同意した
        } else {
            // パーミッション取得に同意しなかった
        }
    }

    private boolean isPermissionGranted(String[] permissions) {
        for (String permission : permissions) {
            if (ContextCompat.checkSelfPermission(this, permission) != PackageManager.PERMISSION_GRANTED) {
                return false;
            }
        }
        return true;
    }
}

こんなかんじの雰囲気で確認できる.

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