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

17

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

1
我也一样,现在有很多这些问题。将 AdMob 捆绑在 Google Play 服务中并不是 Google 曾经拥有的最明智的想法。每个月都会出现新的错误,我们必须等待几周才能得到修复。 - Christer Nordvik
1
是的,我也看到了很多这样的崩溃。在这里找到了一个崩溃报告:https://groups.google.com/forum/#!category-topic/google-admob-ads-sdk/android/IuSQriNWKps。不确定你是否已经报告过这个问题。希望他们尽快推出新版本。在那之前,可能有意义自己添加权限。 - MRK
我也看到这个问题了。我想我会按照@MRK所说的,只是在问题得到解决之前添加权限。 - Shane Doyle
同样的情况发生在我这里。添加权限不是我的选择。我不希望像那样的权限出现在我的应用程序中,因为我的应用程序甚至不需要它。这会让用户感到疑惑... - A.J.
2个回答

14

这可能是因为您的清单文件中没有添加GET_TASKS权限。

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

或者是因为 API 21 中已经被弃用,有关如何在没有 GET_TASKS 的情况下获取类似信息的更多信息,请参阅此链接


2
谢谢,@dthacker。我知道我可以请求GET_TASKS权限,但我的应用程序不需要它,我也不明白为什么AdMob广告需要它。涉及的应用程序版本已经成功地托管广告两个月了,只有昨天我才开始看到这个异常。 - Mark McClelland
截至2020年,“GET_TASKS”已被弃用。 - Abu Nayem

5
谷歌报告称已经发布了修复程序,并且我们“应该看到特定异常的发生率降低,并在一周内完全消失”。此外,这是一个服务器端修复,不需要升级Play服务。
完整对话可在此处查看:https://groups.google.com/forum/#!category-topic/google-admob-ads-sdk/android/IuSQriNWKps 同时,您可以捕获SecurityException并允许调用loadAd()失败,或者 - 如@dthacker所指出的那样 - 您可以在AndroidManifest.xml中包含GET_TASKS权限。如果选择包括此权限,请注意,在针对API 21时删除它,因为该权限不再执行(显然是因为他们减少了提供的信息量,现在以文档为导向的任务可能会导致隐私泄露)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接