使用notificationmanagercompat
取消所有通知。
NotificationManagerCompat manager =
NotificationManagerCompat.from(ctx.getApplicationContext());
manager.cancelAll();
它得到了例外的一些时间(大多数时间工作)。
在Andoid 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:
ava.lang.SecurityException:权限拒绝:来自PID=5460,UID=10135,(需要UID=1000)的getIntentSender()不允许在android.os.Parcel.ReadException(parcel.java:1465)作为包android发送
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)
问题:
ctx.getapplicationcontext().getapplicationinfo().uid
还是android.os.process.myuid()
?在我看来,这听起来有两种不同的可能为什么不起作用:
最可能的原因是您使用了错误的上下文来进行调用;getApplicationContext()
不是100%可靠的,有时会产生奇怪的错误,因此最好避免此调用。如果从服务或activity调用CancelAll()
,请使用YourClass.this
而不是GetApplicationContext()
,如果是从BroadcastReceiver,则使用提供的上下文变量。
如果这仍然不起作用,可能是notificationmanagercompat
中的错误,请尝试使用notificationmanager
重现相同的问题。解决方法是将所有通知id保存在一个列表中,然后用Manager.cancel(id)
分别取消它们。这样,系统就不会试图取消任何不属于您应用程序的通知。
答案并没有为问题提供一个坚实的解决方案,而是试图为OP和提供赏金的@66clsjy提供一个类似问题的原因给出一个解释。
检查stacktrace
根据stacktraceSecurityException
在远程进程中抛出:您的应用程序进程“Binder
”对象(例如InotificationManager.Stub
、ActivityManagerProxy
等)在远程Binder
对象上创建一个Binder
事务(MRemote.Transact()
)*并从该对象读取远程调用中发生异常(_Reply.ReadException()
)。如果有,则分析异常消息,并在进程中抛出相应的异常。
分析异常消息
这两条异常消息(一条是GetIntentSender()
,另一条是GetCurrentUser()
)非常简单--您的应用程序没有通过权限检查,换句话说,就是ActivityManagerService
的代码段,这些代码应该在System_Server
进程标识(UID=1000
)**下调用,但实际上是在您的应用程序进程标识下调用的。
可能的原因和解决方法
它得到了例外的一些时间(大多数时间工作)。
不做假设,你得到的“一些时间”是不恰当的Android
行为。使用try/catch
包装问题调用似乎是一种变通方法,直到有人提出一个可靠的解决方案(如果存在的话)。
*ActivityManagerProxy.SetRequestedOrientation()和IAccessibilityManager$Stub$Proxy.SendAccessibilityEvent()
**Android.Permission.Interact_Across_Users
属于签名系统保护级别
嗨,我不知道我做错了什么。I有一个字符串作为参数传递给my类。我必须拆分该字符串并将相应的值赋给成员变量,但它不能正常工作。 这是我的课。 我的输入=Apple$$##12.5$$##9 我犯错了-
我有一个简单的方法 每当我运行代码时,我都会收到插入电影名称的第一个提示,但是一旦我按下回车键,就会调用第二个打印,给我这个消息。 该文件已写入,但我无法在文本文件中插入任何内容。我的逻辑有什么问题,我该如何解决这个问题?我在Ruby我和Ubuntu中使用irb。 编辑:看起来,由于其他用户对我的代码工作的反应,以及我自己在另一台开发机器上的测试,我的代码在这台机器上无法工作。我唯一能说的是我在使
输入是一个名为Wiki micro的文本文件。txt。。。字数计算程序运行正常。。我需要的是修改它 }
风格: 日志消息:10-10 13:20:01.184:E/AndroidRuntime(1417):致命异常:main 10-10 13:20:01.184:E/AndroidRuntime(1417):android。看法WindowManager$BadTokenException:无法添加窗口--android令牌。应用程序。本地活动管理器$LocalActivityRecord@411e
我正试图根据OpenGL SuperBible第六版绘制一个纹理平面。但由于某些原因,我失败了。 这是我的纹理初始化代码。 这是平面对象。对象本身是绘制的,只是没有纹理。 这些是我的顶点和片段着色器。 我这样画 但我刚买了一架黑色的飞机。如果我通过在后面添加另一行来覆盖赋值,如下所示 它可以工作,也就是说,我得到了一个白色平面,所以着色器似乎工作正常。 我没有从中得到任何错误。 兼容性: 数组包含
问题内容: 我们的客户抱怨说,偶尔会有我们的电话以失败。在Javadoc中没有列出这是一个合法的可能性。有人知道这里可能会发生什么吗? 问题答案: 通道操作绑定到执行该操作的线程。如果此线程被中断,则由于IO安全问题,流/通道将关闭。