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

PublisherAdView.loadAd() throwing SecurityException - getTasks() requires android.permission.GET_TASKS

从昨天(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

Edit/Clarification: 我知道可以通过请求 GET_TASKS 权限来避免此 SecurityException,但我的应用程序不需要该权限,而且我也不明白 AdMob 广告为什么需要。

我也知道 GET_TASKS 自 API 21 起已被弃用,但此应用面向 API 19.

这要么是因为您没有在您的清单

中添加 GET_TASKS
<uses-permission android:name="android.permission.GET_TASKS" />

或者因为它在 API 21 中已被弃用,请参阅有关如何在没有 GET_TASKS

的情况下获取类似信息的更多信息

Google 报告已发布修复程序,我们 "should see the incidence rate of that particular exception decrease, and within a week disappear entirely"。此外,它是服务器端修复,不需要升级到 Play 服务。

此处提供完整对话:https://groups.google.com/forum/#!category-topic/google-admob-ads-sdk/android/IuSQriNWKps

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