はじめに
こんにちは、個人でアプリを作成している時(公開はしないもの)通知許可を必ずONにしてからアプリを開く仕様にしたいと思い実装が完了したのでメモとして。
ちなみにタイトルでAndroid13未満としているのは去年Android13が登場しその時に通知に関する権限許可が必要になりました。13以降はカメラパーミッションと似たような処理通知許可ダイアログが表示されるので実装方法が少し変わるかなと思い13未満ということを追記しました。
コードの確認
ちなみに今回は既にあるアプリから追加の仕様での作成になり元々がJavaで作成していたため引き続きJavaでの実装で実装しました。
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// 通知設定リクエスト処理
requestNotification();
・・・・
途中処理抜粋
}
/**
* 通知が許可がされているかどうかチェックする
*
* @return true 許可 / false 未許可
*/
private boolean checkNotificationFlg() {
NotificationManagerCompat notificationManagerCompat = NotificationManagerCompat.from(this);
return notificationManagerCompat.areNotificationsEnabled();
}
/**
* 通知許可画面遷移(設定画面)
*/
private void requestNotification() {
// 未許可の場合は設定画面の通知許可画面へ遷移する
if (!checkNotificationFlg()) {
Intent intent = new Intent();
intent.setFlags(FLAG_ACTIVITY_NEW_TASK);
intent.setAction(Settings.ACTION_APP_NOTIFICATION_SETTINGS);
intent.putExtra(Settings.EXTRA_APP_PACKAGE, this.getPackageName());
startActivity(intent);
// 設定画面からアプリに戻った時に実行される
notificationLauncher.launch(intent);
}
}
/**
* 通知許可判定Launcher
*/
private final ActivityResultLauncher<Intent> notificationLauncher = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(),
result -> {
// 未許可のまま戻ってきた場合はアプリを終了する
if (!checkNotificationFlg()) {
finish();
}
});
アプリの動き
上記コードの動きとしては以下ような図になります。
なぜダブルチェックにしているかというと設定画面から戻った時に未許可のまま戻ることも考えるとダブルチェックにしなければいけなと思いましたので実装としてダブルチェックしています。
最後に
この辺りのチェックはどうすればいいのだろうと少し悩んだ箇所でもありました。
なんだかんだ言ってパーミッションがあると開発側としては楽かもしれないですね。笑
また、もっといい実装方法がありそうな気もしますが一つの実装として温かく見ていただいてたら嬉しいです。
最後までご覧いただきありがとうございました。