public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//Main Code Below-
//NotificationManagerCompat.from(context).areNotificationsEnabled()
if(NotificationManagerCompat.from(this).areNotificationsEnabled())
{
Toast.makeText(this, "Notification is on for this Application", Toast.LENGTH_SHORT).show();
}
else
{
Toast.makeText(this, "Notification is off for this Application", Toast.LENGTH_SHORT).show();
}
}
}
fun areNotificationsEnabled(context: Context, channelId: String = "fcm_fallback_notification_channel"): Boolean {
// check if global notification switch is ON or OFF
if (NotificationManagerCompat.from(context).areNotificationsEnabled())
// if its ON then we need to check for individual channels in OREO
return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
val manager = context.getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
val channel = manager.getNotificationChannel(channelId)
return channel?.importance != NotificationManager.IMPORTANCE_NONE
} else {
// if this less then OREO it means that notifications are enabled
true
}
// if this is less then OREO it means that notifications are disabled
return false
}
8条答案
按热度按时间p8ekf7hl1#
试试这个:
Is there a way an app can check if it is allowed to access notifications?
这里有更多的解释:
使用NotificationListenerService检查对通知的访问
f45qwnt82#
ie3xauqp3#
bfhwhh0e4#
2023-03-18:Android 13(SDK 33 TIRAMISU)引入了新的运行时权限(android.permission.POST_NOTIFICATIONS),允许应用发布通知(在Android 13之前默认允许)。
如果您的应用的目标SDK低于33并且在Android 13设备上运行,则用户首次打开您的应用时,系统将自动请求此权限,然后由用户决定是否允许您的应用发布通知。
如果您的应用面向SDK 33且正在运行Android 13设备,则默认情况下发布通知为不允许,除非您明确请求且用户允许。
请注意,用户可能允许您的应用发布通知,但同时禁用特定的通知通道,因此仅测试是否授予权限是不够的,还需要测试是否启用通知通道。
下面是一个示例帮助函数(在Kotlin中),用于检查是否允许通知:
xytpbqjk5#
试试这个:
xmq68pz96#
编辑-新答案:
看起来像谷歌添加了适当的API调用:
NotificationManagerCompat.from(context).areNotificationsEnabled()
旧答案:
对于正在查看此问题的任何人,请注意NotificationListenerService与“显示通知”不同。这两者是不同的东西!如果应用可以访问
NotificationListenerService
并不意味着会显示其通知,反之亦然。为了检查用户是否阻止了来自您的应用的通知,您可以使用反射:来源:https://code.google.com/p/android/issues/detail?id=38482
hk8txs487#
似乎是个好办法。
lstz6jyr8#
以下是此问题的更完整答案