PublisherAdView.loadAd() throwing SecurityException - getTasks() требует android.permission.GET_TASKS

Начиная с 11 марта, я начал видеть всплеск в SecurityException. (См. Таблицу стека ниже.) Другие видят это исключение? Поиски ничего не показали.

Мой вопрос заключается в том, исправляет ли обновление до более новой версии Служб Службы.

Здесь стек:

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()

Я планирую опубликовать патч с try/catch вокруг вызова loadAd(). Я также планирую перейти с PlayServices 6.1.71 на 6.5.87 в ближайшем будущем, но я не хочу вводить этот риск в выпуск исправлений, если это не известное решение.

Я сообщил об ошибке Google здесь: https://groups.google.com/forum/#!category-topic/google-admob-ads-sdk/android/IuSQriNWKps

Edit/Разъяснение: Я знаю, что этого SecurityException можно было бы избежать, запросив разрешение GET_TASKS, но мне не нужно это разрешение для моего приложения, и я не понимаю, почему реклама AdMob тоже должна быть.

Мне также известно, что GET_TASKS устарел от API 21, но это приложение предназначено для API 19.

Ответы

Ответ 1

Google сообщает, что исправление было выпущено и что "мы должны увидеть частоту снижения этого конкретного исключения, а в течение недели полностью исчезнуть". Кроме того, это исправление на стороне сервера и не требует обновления для Play Services.

Полный разговор доступен здесь: https://groups.google.com/forum/#!category-topic/google-admob-ads-sdk/android/IuSQriNWKps

В то же время вы можете либо поймать SecurityException и разрешить вызову loadAd() сбой, либо - как отметил @dthacker - вы можете включить разрешение GET_TASKS в AndroidManifest.xml. Если вы решите включить это разрешение, обратите внимание, что вы удаляете его, когда вы нацеливаете API 21, поскольку разрешение больше не применяется (видимо, потому, что они уменьшили объем предоставленной информации, теперь, когда задачи, ориентированные на документы, могут привести к утечке конфиденциальной информации).

Ответ 2

Это либо потому, что у вас нет GET_TASKS, добавленного в ваш манифест

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

Или, поскольку он устарел в API 21, см. дополнительную информацию о том, как получить подобную информацию без GET_TASKS введите ссылку здесь здесь