19. 複数のパーミッションをチェックする場合を想定し、
文字列の配列を受け取り、for文等でチェックするクラスを作ってもよい
2-2. Runtime-permissionモデルの実現(Step.1 チェック)
public void showContacts(View v){
if (checkSelfPermission(Manifest.permission.READ_CONTACTS)
!= PackageManager.PERMISSION_GRANTED) {
if (shouldShowRequestPermissionRationale(Manifest.permission.READ_CONTACTS)) {
// Explain to the user why we need to read the contacts
}
//ポップアップなどで要求に対する説明を書く
requestPermissions(new String[]{Manifest.permission.READ_CONTACTS},
MY_PERMISSIONS_REQUEST_READ_CONTACTS);
}else{
showContactsDetails();
}
}
パーミッションが許可されていると、PERMISSION_GRANTED(=0)
許可されていないとPERMISSION_DENIED(=-1)を返す
Permissionの有無のチェックは次のAPIを用いる
context#checkSelfPermission(String permission_name)
Permission_nameはString型でパーミッションの名称を指定する
20. 2-2. Runtime-permissionモデルの実現(Step.2 リクエスト)
パーミッションがなければ、次のAPIを用いてリクエストする
Activity#requestPermissions(String[] permissions, int requestCode)
requestCodeを設定し、ハンドリング時のケース分けに使う
shouldShowRequestPermissionRationale(String permission)は、
過去に引数に指定したパーミッションがリクエストを拒否したことがあるか確認できる。
public void showContacts(View v){
if (checkSelfPermission(Manifest.permission.READ_CONTACTS)
!= PackageManager.PERMISSION_GRANTED) {
if (shouldShowRequestPermissionRationale(Manifest.permission.READ_CONTACTS)) {
// パーミッションの必要性を説明するための文章を書く
}
//ポップアップなどで要求に対する説明を書く
requestPermissions(new String[]{Manifest.permission.READ_CONTACTS},
MY_PERMISSIONS_REQUEST_READ_CONTACTS);
}else{
showContactsDetails();
}
}