Skip to content

Instantly share code, notes, and snippets.

@STAR-ZERO
Created October 9, 2015 07:21
Show Gist options
  • Save STAR-ZERO/32cb624836b472e7ec0f to your computer and use it in GitHub Desktop.
Save STAR-ZERO/32cb624836b472e7ec0f to your computer and use it in GitHub Desktop.
【Android】Marshmallow以降の権限チェックサンプル
public class SamplePermissionActivity extends AppCompatActivity {
// ...
private static final int PERMISSIONS_REQUEST_READ_PHONE_STATE = 1;
private void checkPermission() {
if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_PHONE_STATE) != PackageManager.PERMISSION_GRANTED) {
// 許可されてない
if (ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.READ_PHONE_STATE)) {
// 拒否された and 「今後は確認しない」チェック無し
// or
// 一度は許可したが設定アプリから拒否された
// ★ここで何で権限が必要かを説明する
// ★★★ 問題点 ★★★
// 一度拒否されないとココの処理は通らないため、初回確認時に説明を表示できない
// 初回確認を判定するには SharedPreferences 等に独自でフラグを保存する必要ある?
} else {
// まだ許可されない(初回確認)
// or
// 拒否された and 「今後は確認しない」チェックあり
}
// 確認ダイアログを表示
// ただし、「今後は確認しない」にチェックがある場合は、ダイアログが表示されずに onRequestPermissionsResult が呼び出される
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.READ_PHONE_STATE}, PERMISSIONS_REQUEST_READ_PHONE_STATE);
} else {
// 許可されている
// or
// Marshmallowより過去バージョン
// ★ここで権限を使った処理
}
}
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
switch (requestCode) {
case PERMISSIONS_REQUEST_READ_PHONE_STATE:
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
// 確認ダイアログの結果、許可された
// ★ここで権限を使った処理
} else {
// 確認ダイアログの結果、拒否された
// or
// 拒否されて「今後は確認しない」にチェックされている
// ★権限が拒否されたときにやりたい処理
}
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment