意図的にパーミッションをoffにしたときの対策として
パーミッションを再度促す処理を作りました。
アプリで設定したパーミッションは設定から簡単に変えられるのですが、
offにされてしまうとアプリを使う上で困ってしまう理由上onStart
で再許可をして許可しなければ機能を使うことができなくするように
しました。
onstartは、アプリがバックグラウンドに移った後にまたそのアプリに
復帰するときに呼ばれるライフサイクルのことです。
これが呼ばれている間はユーザーはアプリのアクティビティが
見えていない状態になります。その中でパーミッション許可を
させようという訳です。
</pre> <pre>@Override protected void onStart() { super.onStart(); if (Build.VERSION.SDK_INT >= 23) { if (ActivityCompat.checkSelfPermission(this, android.Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, android.Manifest.permission.CAMERA) == PackageManager.PERMISSION_GRANTED) { userSetting(); }else { requestPermission(); } }else{ userSetting(); } } private void requestPermission() { String[] permissions = { Manifest.permission.CAMERA, Manifest.permission.WRITE_EXTERNAL_STORAGE }; ActivityCompat.requestPermissions(this, permissions, REQUEST_PERMISSION); }</pre> <pre>@Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { if (requestCode == REQUEST_PERMISSION) { // 使用が許可された if (grantResults[0] == PackageManager.PERMISSION_GRANTED && grantResults[1] == PackageManager.PERMISSION_GRANTED) { // 許可された userSetting(); } else { Toast.makeText(this, "許可されませんでした。", Toast.LENGTH_SHORT).show(); userSetting(); } } }</pre> <pre>
ここで、offにしたパーミッションをonにすることで直ちにアプリを
正常に使うことができるようになります。