実現したいこと
NotificationChannel
の再設定がしたいです.
現状わかっていること
APIが26以上の場合の通知として以下のプログラムが完成しています.
java
1if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) 2{ 3 // 通知チャンネルの定義 4 NotificationChannel notificationChannel = new NotificationChannel(channelID, 5 channelID, 6 NotificationManager.IMPORTANCE_DEFAULT); 7 8 // -------------------- 9 // 追記エリア 10 // -------------------- 11 12 // 通知チャンネルの作成 13 notificationManager.createNotificationChannel(notificationChannel); 14 15 // 通知の生成と設定 16 Notification.Builder builder = new Notification.Builder(this, channelID) 17 .setContentTitle("MyTitle") 18 .setContentText("MyMessage") 19 .setSmallIcon(R.drawable.MyIcon); 20 21 //通知の発行 22 notificationManager.notify(1, builder.build()); 23} 24else 25{ 26 // 通常の通知設定 27 ... 28}
上記のプログラムは適切に動作するのですが,今回はプログラム中の追記エリア
に以下のコードを追加したいと考えています.
Java
1// isSound と isVibrate の初期値は false です. 2// また,この初期値は別のアクティビティで管理しており,Switchにより切り替えるようにしています. 3 4// 通知音の無効化 5if (isSound == false) 6{ 7 notificationChannel.setSound(null, null); 8} 9 10// 振動の無効化 11if (isVibrate == false) 12{ 13 notificationChannel.enableVibration(false); 14}
このプログラムを追加した結果,「はじめは」通知音と振動は無効化されませんでした.
そこで色々と調査を進めるうち,一度アプリケーションをアンインストールし,再度インストールすることで無効化されました.
※ここでの操作は Android Studio 上で再度Run
を実行することとは異なり,実際にアプリケーションを手動でアンインストールし,その後Run
を実行しインストールすることです.
そしてアプリをアンインストール後,実験としてisSound
とisVibrate
の初期値をtrue
にしてアプリをインストールしてみたところ,もちろん通知音や振動は無効化されませんでした.
予想
恐らく,アプリをインストールした時点でOS側でアプリの通知設定を定義してしまい,後からの変更(Run
による再インストールやメソッドでのNotificationChannel
の設定変更)では歯が立たなくなっているのだと思います.
実現したいこと(詳細)
今回は通知音と振動をSwitch
による切替えにより有無を決定したいと考えています.
すなわち,通知の設定をアプリ内で変更する必要があるということです.
通知の設定は以下のメソッドを追加して実現したいと考えています.
Java
1// 通知の設定(複数呼び出す予定) 2private void setNotification() 3{ 4 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) 5 { 6 ... 7 } 8 else 9 { 10 ... 11 } 12}
しかし,先ほどの結果からも分かる通り,NotificationChannel
の設定はアプリをRun
による再インストールだけではなく,手動でアンインストールさえもしなければ設定が変更されないという,ガチガチであることです.
もちろん,isSound
とisVibrate
を変更後,上記のsetNotification
メソッドを呼び出しても期待通りの動作はしませんでした.
繰り返しになりますが,NotificationChannel
の設定はインストール時点の初期値で決められたisSound
とisVibrate
がずっと生きているのです.
どのようにすれば,NotificationChannel
の再設定が可能になるのでしょうか.
よろしくお願いいたします.
補足
APIが26未満の処理では以下の処理を記述しており,こちらは適切に動作しています.
Java
1if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) 2{ 3 ... 4} 5else 6{ 7 Notification.Builder builder = new Notification.Builder(this); 8 builder.setContentTitle("MyTitle"); 9 builder.setContentText("MyMessage"); 10 builder.setSmallIcon(R.drawable.MyIcon); 11 12 // 通知音の有効化 13 if (isSound == true) 14 { 15 builder.setSound(alarmSound); 16 } 17 18 // 振動の有効化 19 if (isVibrate == true) 20 { 21 builder.setVibrate(new long[] {wait, vibrate, sleep, vibrate, sleep}); 22 } 23}
setSound
やseteVibrate
を設定していないと,通知音や振動が有効にならなかったため,こちらは無効化ではなく有効化をしております.
このように,古いAPIでは設定可能であるにも関わらず,新しいAPIではできないのが疑問です.
しかし,現状を見る限り,恐らくできないことをしようとしているのだと思います.
それなりの理由で無理なのであれば,こちらとしてもこの問題を追究するための時間を空けることができます.
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/09/24 13:46