在我的Android应用中,有一个长期运行的服务(导出数据),它显示进度,并以通知用户共享导出文件的结尾结束。需要明确的是,这不是推送通知,而是CryptoJS.AES.decrypt('MURKOx14eSOo2vs8ZQyCpXpsoKg8Uzlvyj3byQreVBk=', CryptoJS.enc.Hex.parse(HexKeyForJS), {iv: CryptoJS.enc.Hex.parse(HexInitVectorForJS), padding: CryptoJS.pad.Pkcs7}).toString(CryptoJS.enc.Utf8);
在本地创建的Notification
。
有很多用户使通知通道静音(或全局禁用我的应用程序的通知)。我不知道为什么,因为BTW确实不是很冗长。但是那些用户觉得该应用程序无法正常工作。如果通知已静音,我想警告他们。
我可以预先确定某个特定的new NotificationCompat.Builder(…).set…().build()
是否被用户静音了吗?
我只找到NotificationChannel
,但不确定是否还有其他用途。
答案 0 :(得分:2)
我相信您可以结合使用以下两种方法来检测特定通道或整个程序包的通知是否被阻止。
摘自正式文件
布尔布尔值isBlocked()
返回是否阻止发布到属于该组的频道的通知。此值独立于NotificationManager.areNotificationsEnabled()和NotificationChannel.getImportance()。
public boolean areNotificationsEnabled()
返回调用程序包的通知是否被阻止。
答案 1 :(得分:1)
要检索通知渠道,我们可以在getNotificationChannel()
上调用方法NotificationManager
。
我们需要传递相关频道的channel_id。
此外,要检索所有NotificationChannels
的列表,我们可以调用方法getNotificationChannels()
。
NotificationManager notificationManager = (NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE);
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) {
List<NotificationChannel> notificationChannels = notificationManager.getNotificationChannels();
}
现在使用您的频道ID从列表中检索该频道的属性。 例如:如果我创建的ID为“备份警报”的频道
然后我应该检查该通道的属性。
如果您需要提示用户调整该频道的设置:您可以使用以下Intents从应用本身触发一个Intent:
Intent intent = new Intent(Settings.ACTION_CHANNEL_NOTIFICATION_SETTINGS);
intent.putExtra(Settings.EXTRA_CHANNEL_ID, notificationChannel.getId());
/*intent.putExtra(Settings.EXTRA_CHANNEL_ID, "Backup alerts");*/
/* Above line is example */
intent.putExtra(Settings.EXTRA_APP_PACKAGE, getPackageName());
startActivity(intent);
我们传递频道ID和应用程序包名称。专门打开特定的频道ID。
希望对您有所帮助;)