【问题标题】:PublisherAdView.loadAd() throwing SecurityException - getTasks() requires android.permission.GET_TASKSPublisherAdView.loadAd() 抛出 SecurityException - getTasks() 需要 android.permission.GET_TASKS
【发布时间】:2015-03-12 19:34:24
【问题描述】:

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

【问题讨论】:

  • 这里也一样,现在很多。在 Google Play 服务中捆绑 AdMob 并不是 Google 所拥有的最聪明的想法。每个月都会出现新闻错误,我们必须等待数周才能修复。
  • 是的,我也看到了很多这样的崩溃。在这里找到了一份崩溃报告,groups.google.com/forum/#!category-topic/google-admob-ads-sdk/…。不确定您是否已报告此问题。希望他们尽快推出新版本。在此之前自己添加权限可能是有意义的。
  • 我也看到了。我想我会按照@MRK 所说的那样添加权限,直到问题得到解决。
  • 这里也一样。添加权限不是我的选择。我不希望这样的权限出现在我的应用程序中,因为我的应用程序甚至不需要它。它会让用户想知道......

标签: android admob google-play-services securityexception


【解决方案1】:

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

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

或者因为它在 API 21 中已被弃用,请参阅有关如何在没有 GET_TASKS enter link description here 的情况下获取类似信息的更多信息

【讨论】:

  • 谢谢,@dhacker。我知道我可以请求 GET_TASKS 权限,但我的应用不需要它,我也不明白 AdMob 广告为什么需要它。有问题的应用版本已经成功托管广告两个月了,直到昨天我才开始看到这个异常。
  • 自 2020 年起已弃用“GET_TASKS”
【解决方案2】:

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

完整的对话在这里:https://groups.google.com/forum/#!category-topic/google-admob-ads-sdk/android/IuSQriNWKps

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-01-07
    • 2017-01-06
    • 2016-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多