【Android】複数のパーミッションをリクエストする方法

毎回書き方を忘れてしまうので、備忘録としてまとめます。
Android のアプリで、複数のパーミッションをリクエストする方法です。

今回参考にさせていただいた記事はこちらから。

Androidのパーミッションリクエスト(複数)- Qiita
https://qiita.com/tcb78/items/fd2e16eb7f1eacd0ba26

 

早速ですがコードは下記のとおりです。
onCreate() 内に下記を記述します。

private final int REQUEST_CODE = 1000;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    // Android 6, API 23以上でパーミッションの確認
    if(Build.VERSION.SDK_INT >= 23) {
        String[] permissions = {
                Manifest.permission.WRITE_EXTERNAL_STORAGE,
                Manifest.permission.ACCESS_COARSE_LOCATION,
                Manifest.permission.ACCESS_FINE_LOCATION
        };
        checkPermission(permissions, REQUEST_CODE);
    }
    // メインの処理を記述
}

なお、今回は位置情報とストレージへのアクセスをリクエストしています。
REQUEST_CODE の定義を忘れないように気を付けてください。私はよく忘れます。

次に、checkPermission() を下記のように定義します。

public void checkPermission(final String[] permissions,final int request_code){
    ActivityCompat.requestPermissions(this, permissions, request_code);
}

上記の処理を実行すると、許可されていないパーミッションのみリクエストされます。

最後に、onRequestPermissionsResult()requestPermissions() のコールバックを受け取ったときの処理を定義します。

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

    if (requestCode == REQUEST_PERMISSION) {
        for (int i = 0; i < permissions.length; i++) {
            if (grantResults[i] == PackageManager.PERMISSION_GRANTED) {
         // パーミッションが許可された
               Log.d("Permission", "Added Permission: " + permissions[i]);
            } else {
                // パーミッションが拒否された
                Log.d("Permission", "Rejected Permission: " + permissions[i]);
            }
        }
    }
}

もし必要であれば、パーミッション別にリクエストが許可/拒否されたときの処理を記述することもできます。
状況に応じて追加してください。

追加するコードは以上です。
あとは、設定からパーミッションの許可を無効にするか、アプリをアンインストールしてから再インストールして実行すると、パーミッションリクエストのダイアログが表示されることが確認できると思います。

 

以上、Android アプリで複数のパーミッションをリクエストする方法でした。
困ったときは、是非コピー&ペーストしてご活用ください。

>株式会社シーポイントラボ

株式会社シーポイントラボ

TEL:053-543-9889
営業時間:9:00~18:00(月〜金)
住所:〒432-8003
   静岡県浜松市中央区和地山3-1-7
   浜松イノベーションキューブ 315
※ご来社の際はインターホンで「316」をお呼びください

CTR IMG