認証、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を利用する } } } }
注意