認証、SLS、プッシュのAPIに必要なパーミッションを取得し、許可されているかチェックします。
具体的には取得したパーミッションをAndroidが用意しているメソッドを使って、チェックし、必要に応じて、パーミッションの要求処理を行います。
以下のような流れになります。
public class MainActivity extends Activity {
・・・
private static final int MY_PERMISSIONS_REQUEST_CODE = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
・・・
// Android6.0以上の環境かチェック
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
PermissionManager pm = new PermissionManager(getApplicationContext());
// パーミッションを取得するAPI
int[] apis = {PermissionManager.AUTH_API};
String[] permissions = pm.getPermissions(apis);
boolean requestPermissionFlag = false;
List<String> requestPermissionsList = new ArrayList<String>();
for(String permission : permissions) {
// PermissionManager#getPermissionsで取得したパーミッションをチェック
if(ContextCompat.checkSelfPermission(this, permission) == PackageManager.PERMISSION_DENIED) {
requestPermissionFlag = true;
requestPermissionsList.add(permission);
}
}
if(requestPermissionFlag) {
// 拒否されているパーミッションの許可を要求するダイアログを表示
ActivityCompat.requestPermissions(this, requestPermissionsList.toArray(new String[0]), MY_PERMISSIONS_REQUEST_CODE);
}
}
}
@Override
public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {
if(requestCode == MY_PERMISSIONS_REQUEST_CODE) {
PermissionManager pm = new PermissionManager(getApplicationContext());
// 許可要求のダイアログで許可されたかを確認します
if(pm.checkApi(PermissionManager.AUTH_API, permissions, grantResults) == PermissionManager.API_PERMISSION_GRANTED) {
// 許可された場合の処理
} else {
// 拒否された場合の処理
// 許可要求のダイアログでの「今後は確認しない」のチェックを確認するには、
// ActivityCompat#shouldShowRequestPermissionRationaleを利用する
}
}
}
}
注意