Androidアプリに、通知を受信したらダイアログを表示する機能を実装してみたのですが、思った以上に考慮することが多かった、というお話。
通知を受信したらダイアログを表示する
「android 通知 ダイアログ」でググってヒットした下記の記事を参考に実装しました。
[Android]サービスからダイアログを表示する方法 | Coffee Breakにプログラミング備忘録 http://to-developer.com/blog/?p=925
端末でアプリの通知をオフに設定してもダイアログが表示されてしまう
今回の仕様を考慮すると、通知をオフに設定しているのであれば、ダイアログは表示しない方がユーザに優しい。
「android 通知設定 取得」でググってヒットした下記の記事を参考に、通知設定を取得してオンの場合のみ、ダイアログを表示するように改修しました。
androidでpush通知設定を確認、変更画面を開く https://qiita.com/shim0mura/items/097f6e0cfe091615ea7e#通知設定値を取得する
アプリの起動状態でダイアログのボタンの挙動を変えたい
今まさにユーザがアプリを起動している(フォアグラウンドまたはバックグラウンド)のであればダイアログを閉じるだけ、未起動であればメイン画面に遷移する、といった感じでボタンの挙動を変えたかった。
検索ワードを控えそびれたのですが、下記の記事を参考に、判定処理を実装しました。
Androidアプリのプロセスの状態(フォアグラウンド、バックグラウンド、未起動)を調べる方法 https://qiita.com/k-yamada-github/items/ac7d745e170a38931437
アプリ未起動でダイアログを表示後、ダイアログを閉じると思ったような処理ができない
例えば、端末のホーム画面でダイアログが表示された後、ダイアログを閉じる。その後、ホーム画面のアプリアイコンをタップしてもアプリが起動しない現象が発生します。
これはどういうことかというと、□ボタンを押して分かったのですが、このホーム画面、実はアプリの背景なんですね。アプリではホーム画面の処理を実装していないので、「ユーザ は アプリアイコン を タップした! しかし なにもおこらない」という状態を作り上げてしまっていたのでした。
「android アプリ 終了処理」でググってヒットした下記の記事を参考に、finishではなくfinishAndRemoveTaskを実装し、アプリが終了するように改修しました。
Activity#finish() でアプリが終了できないときは https://qiita.com/okaxaki/items/f3a4a4ab0616ac2f68ed
ダイアログの枠外をタップすると、ダイアログは閉じるが思ったような処理ができない
ダイアログのボタン以外の操作を失念していました。上記と同じ現象にハマってしまいます。
「android ダイアログ 枠外 タップ」でググってヒットした下記の記事を参考に、setCancelable(false)を実装し、ダイアログのボタン操作を促すよう改修しました。
AlertDialog の背景をタップできなくする http://tomoyamkung.net/2013/06/11/android-modal-dialog/
以上、Androidアプリに、通知を受信したらダイアログを表示する機能を実装してみたら、思った以上に考慮することが多かった話でした。