使用NotificationManagerCompat
取消所有通知。
NotificationManagerCompat manager =
NotificationManagerCompat.from(ctx.getApplicationContext());
manager.cancelAll();
有时会出现异常(大部分情况下能够正常工作)。
在Android 6上:
java.lang.SecurityException:权限拒绝:来自pid=22994,uid=10184的getCurrentUser()需要android.permission.INTERACT_ACROSS_USERS
Fatal Exception: java.lang.SecurityException: Permission Denial: getCurrentUser() from pid=22994, uid=10184 requires android.permission.INTERACT_ACROSS_USERS
at android.os.Parcel.readException(Parcel.java:1602)
at android.os.Parcel.readException(Parcel.java:1555)
at android.app.INotificationManager$Stub$Proxy.cancelAllNotifications(INotificationManager.java:649)
at android.app.NotificationManager.cancelAll(NotificationManager.java:323)
at android.support.v4.app.NotificationManagerCompat.cancelAll(NotificationManagerCompat.java:197)
在Android 5.0、4.4.2版本中出现以下错误:
java.lang.SecurityException:拒绝授权的权限:getIntentSender() from pid=5460, uid=10135,(need uid=1000) 不允许作为android包发送 在android.os.Parcel.java:1465处读取异常
Fatal Exception: java.lang.SecurityException: Permission Denial: getIntentSender() from pid=3109, uid=10153, (need uid=1000) is not allowed to send as package android
at android.os.Parcel.readException(Parcel.java:1472)
at android.os.Parcel.readException(Parcel.java:1426)
at android.app.INotificationManager$Stub$Proxy.cancelAllNotifications(INotificationManager.java:271)
at android.app.NotificationManager.cancelAll(NotificationManager.java:220)
at android.support.v4.app.NotificationManagerCompat.cancelAll(NotificationManagerCompat.java:197)
问题:
- 可能的原因是什么?
- 这些 ID 是什么?它是
ctx.getApplicationContext().getApplicationInfo().uid
还是android.os.Process.myUid()
?
pid
和uid
是否属于您的应用程序,这可能是“Binder同步”中的一个错误,例如当使用uid
的Binder
标识符调用getIntentSender()
时,它应该使用系统的标识符 (uid
=1000),或者在处理您的调用时,其他对象的Binders被调用时,首先没有清除原始调用者(您)的标识。我想你不能做太多事情,只能捕获问题调用抛出的异常。 - Onik