从昨天3月11日开始,我开始看到SecurityException崩溃的高峰。 (请参阅下面的堆栈跟踪。)其他人是否也看到此异常?搜索没有发现任何东西。
我的问题是升级到较新版本的Play服务是否可以解决问题。
这是堆栈:
java.lang.SecurityException: Permission Denial: getTasks() from pid=30319, uid=10157 requires android.permission.GET_TASKS
at android.os.Parcel.readException(Parcel.java:1474)
at android.os.Parcel.readException(Parcel.java:1428)
at android.app.ActivityManagerProxy.getTasks(ActivityManagerNative.java:2726)
at android.app.ActivityManager.getRunningTasks(ActivityManager.java:791)
at android.app.ActivityManager.getRunningTasks(ActivityManager.java:827)
at com.google.android.gms.ads.internal.util.h.a(SourceFile:703)
at com.google.android.gms.ads.internal.a.a(SourceFile:1634)
at com.google.android.gms.ads.internal.a.a(SourceFile:530)
at com.google.android.gms.ads.internal.client.t.onTransact(SourceFile:81)
at android.os.Binder.transact(Binder.java:361)
at com.google.android.gms.internal.bd$a$a.a()
at com.google.android.gms.internal.bh.a()
at com.google.android.gms.ads.doubleclick.PublisherAdView.loadAd()
我打算在调用loadAd()时发布带有try / catch的补丁。我还计划在不久的将来从PlayServices 6.1.71升级到6.5.87,但我不愿意在补丁发布中引入这种风险,除非它是一个已知的修复程序。
我已在此处向Google报告了该错误:https://groups.google.com/forum/#!category-topic/google-admob-ads-sdk/android/IuSQriNWKps
编辑/澄清: 我知道可以通过请求GET_TASKS权限来避免此SecurityException,但我不需要该应用程序的权限,我也不知道为什么AdMob广告应该。
我也知道GET_TASKS自API 21起已被弃用,但此应用针对API 19。
答案 0 :(得分:12)
这可能是因为您的清单中没有添加GET_TASKS
<uses-permission android:name="android.permission.GET_TASKS" />
或者因为它已在API 21中弃用,请参阅有关如何在没有GET_TASKS
enter link description here
答案 1 :(得分:5)
谷歌报告已经发布修复程序,我们“应该会看到该特定异常的发生率下降,并在一周内完全消失”。此外,它是服务器端修复程序,不需要升级到Play服务。
完整的对话可在此处找到:https://groups.google.com/forum/#!category-topic/google-admob-ads-sdk/android/IuSQriNWKps
同时,你可以捕获SecurityException并允许调用loadAd()失败,或者 - 如@dthacker所说 - 你可以在AndroidManifest.xml中包含GET_TASKS权限。如果您选择包含此权限,请注意在您以API 21为目标后将其删除,因为不再强制执行权限(显然是因为他们减少了提供的信息量,现在面向文档的任务可能导致隐私泄露)