PublisherAdView.loadAd()抛出SecurityException - getTasks()需要android.permission.GET_TASKS

Mar*_*and 16 android securityexception admob google-play-services

从昨天,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()
Run Code Online (Sandbox Code Playgroud)

我打算在调用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.

Dav*_*ker 12

这可能是因为您没有GET_TASKS在清单中添加

<uses-permission android:name="android.permission.GET_TASKS" />
Run Code Online (Sandbox Code Playgroud)

或者因为它已在API 21中弃用,请在此处查看有关如何获取类似信息的更多信息,而无需GET_TASKS 输入链接描述

  • 谢谢,@ dthacker.我知道我可以申请GET_TASKS权限,但我的应用不需要它,我也不知道为什么AdMob广告也需要它.有问题的应用程序版本已经成功托管了两个月的广告,直到昨天才开始看到这个例外. (2认同)

Mar*_*and 5

谷歌报告已经发布了修复程序,我们"应该会看到该特定异常的发生率下降,并在一周内完全消失".此外,它是服务器端修复程序,不需要升级到Play服务.

完整的对话可在此处获得:https://groups.google.com/forum/#!category_topic/google-admob-ads-sdk/android/IuSQriNWKps

同时,你可以捕获SecurityException并允许调用loadAd()失败,或者 - 如@dthacker所说 - 你可以在AndroidManifest.xml中包含GET_TASKS权限.如果您选择包含此权限,请注意在您以API 21为目标后将其删除,因为不再强制执行权限(显然是因为他们减少了提供的信息量,现在面向文档的任务可能导致隐私泄露) .