标签:android android-intent android-pendingintent
我得到NotificationListenerService来拦截Notification并清除,然后想拦截PendingIntent的Notification保存到数据库,但PendingIntent没有序列化,所以我想获取PendingIntend内部的Intent然后使用intent.toUri()方法序列化保存到数据库,但这次出现问题,当我在异常时调用startActivity(intent)后对Intent进行去同步:
Process: com.example.joee.cleardatademo, PID: 20441
java.lang.SecurityException: Permission Denial: starting Intent { act=android.intent.action.VIEW flg=0x14008000 cmp=com.skype.raider/com.skype.android.app.main.HubActivity (has extras) } from ProcessRecord{4596be88 20441:com.example.joee.cleardatademo/u0a1647} (pid=20441, uid=11647) not exported from uid 11028
at android.os.Parcel.readException(Parcel.java:1474)
at android.os.Parcel.readException(Parcel.java:1427)
at android.app.ActivityManagerProxy.startActivity(ActivityManagerNative.java:2104)
at android.app.Instrumentation.execStartActivity(Instrumentation.java:1419)
at android.app.ContextImpl.startActivity(ContextImpl.java:1065)
at android.app.ContextImpl.startActivity(ContextImpl.java:1047)
at com.example.joee.cleardatademo.activity.NotificationManagerActivity$2$1.onClick(NotificationManagerActivity.java:110)
at android.view.View.performClick(View.java:4569)
at android.view.View$PerformClick.run(View.java:18570)
at android.os.Handler.handleCallback(Handler.java:733)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:212)
at android.app.ActivityThread.main(ActivityThread.java:5151)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:684)
at dalvik.system.NativeStart.main(Native Method)
I/Process: Sending signal. PID: 20441 SIG: 9
Disconnected from the target VM, address: 'localhost:8633', transport: 'socket'
我怎样才能将PendingIntent保存到数据库中?或者其他方法实现和保存PendingIntent效果相同?
解决方法:
我认为你误解了PendingIntent的目的.它应该用于在不同于原始应用程序的应用程序中触发它包含的Intent,但具有相同的权限.这是您可以启动其他应用程序内部活动的方法.
它的方式是通过Android中的binder机制与原始目标建立连接.即使将PendingIntent保存到Parcel,当您还原PendingIntent时,它仍会与原始对象建立连接,因为它会保存连接令牌.
然而,你所做的是从PendingIntent中撕掉Intent并尝试启动它.它尝试从原始应用程序启动您无权访问的活动.不幸的是,我没有看到你将PendingIntent保存到数据库的方法,因为你需要保存我提到的令牌,并且没有可靠的方法来获取它.它甚至没有存储在Java代码中.
标签:android,android-intent,android-pendingintent 来源: https://codeday.me/bug/20190706/1393297.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。