Зафиксированный сервис Android 6.0 убит PgedBinderListener на Huawei P9

У меня очень специфическая проблема на одном типе устройства. Приложение, над которым я работаю, не имеет проблем ни на одном из устройств, за исключением Huawei P9.

Приложение запускает службу, которая должна работать в фоновом режиме, однако на этом одном устройстве служба уничтожается, когда устройство заблокировано. Я отследил проблему до этого:

09-20 14:31:14.799 1854-1878/? I/PgedBinderListener: kstate callback type:8 value1=2656 value2=KILLED

Я понятия не имею, что может быть причиной. Единственная подозрительная вещь, которую я вижу в журнале, это ошибка, предположительно сгенерированная Keyguard. Тот факт, что это ошибка, связанная с Huawei, и тот факт, что проблема возникает только на устройстве Huawei, указывает на наличие соединения. Вот ошибка:

09-20 14:31:10.804 1364-1584/? I/KeyguardService: KGSvcCall onStartedGoingToSleep. 2
09-20 14:31:10.837 1902-1902/? I/HwLauncher: Launcher onStop()
09-20 14:31:10.841 1902-1912/? I/HwLauncher: Launcher.LauncherProvider  begin check permission at checkPermission
09-20 14:31:10.843 1902-1912/? W/System.err: java.lang.SecurityException: Permission Denial: reading com.huawei.android.launcher.LauncherProvider from pid=1364, uid=10029 requires com.huawei.android.launcher.permission.WRITE_SETTINGS: uid 10029 does not have com.huawei.android.launcher.permission.WRITE_SETTINGS.
09-20 14:31:10.843 1902-1912/? W/System.err:     at android.app.ContextImpl.enforce(ContextImpl.java:1599)
09-20 14:31:10.843 1902-1912/? W/System.err:     at android.app.ContextImpl.enforcePermission(ContextImpl.java:1612)
09-20 14:31:10.843 1902-1912/? W/System.err:     at android.content.ContextWrapper.enforcePermission(ContextWrapper.java:664)
09-20 14:31:10.843 1902-1912/? W/System.err:     at com.huawei.android.launcher.LauncherProvider.checkPermission(LauncherProvider.java:1615)
09-20 14:31:10.843 1902-1912/? W/System.err:     at com.huawei.android.launcher.LauncherProvider.call(LauncherProvider.java:1854)
09-20 14:31:10.843 1902-1912/? W/System.err:     at android.content.ContentProvider$Transport.call(ContentProvider.java:398)
09-20 14:31:10.843 1902-1912/? W/System.err:     at android.content.ContentProviderNative.onTransact(ContentProviderNative.java:283)
09-20 14:31:10.843 1902-1912/? W/System.err:     at android.os.Binder.execTransact(Binder.java:453)
09-20 14:31:10.844 1902-1912/? E/DatabaseUtils: Writing exception to parcel
                                                java.lang.SecurityException: Permission Denial: reading com.huawei.android.launcher.LauncherProvider from pid=1364, uid=10029 requires com.huawei.android.launcher.permission.WRITE_SETTINGS: uid 10029 does not have com.huawei.android.launcher.permission.WRITE_SETTINGS.
                                                    at android.app.ContextImpl.enforce(ContextImpl.java:1599)
                                                    at android.app.ContextImpl.enforcePermission(ContextImpl.java:1612)
                                                    at android.content.ContextWrapper.enforcePermission(ContextWrapper.java:664)
                                                    at com.huawei.android.launcher.LauncherProvider.checkPermission(LauncherProvider.java:1615)
                                                    at com.huawei.android.launcher.LauncherProvider.call(LauncherProvider.java:1854)
                                                    at android.content.ContentProvider$Transport.call(ContentProvider.java:398)
                                                    at android.content.ContentProviderNative.onTransact(ContentProviderNative.java:283)
                                                    at android.os.Binder.execTransact(Binder.java:453)
09-20 14:31:10.845 1364-1650/? E/LauncherInteractiveUtil: Call launcher evnt fail. lock=true
                                                          java.lang.SecurityException: Permission Denial: reading com.huawei.android.launcher.LauncherProvider from pid=1364, uid=10029 requires com.huawei.android.launcher.permission.WRITE_SETTINGS: uid 10029 does not have com.huawei.android.launcher.permission.WRITE_SETTINGS.
                                                              at android.os.Parcel.readException(Parcel.java:1602)
                                                              at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:183)
                                                              at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:135)
                                                              at android.content.ContentProviderProxy.call(ContentProviderNative.java:646)
                                                              at android.content.ContentProviderClient.call(ContentProviderClient.java:437)
                                                              at com.huawei.keyguard.support.LauncherInteractiveUtil$Caller.run(LauncherInteractiveUtil.java:59)
                                                              at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:246)
                                                              at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)
                                                              at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
                                                              at java.lang.Thread.run(Thread.java:833)

Я попытался добавить разрешение com.huawei.android.launcher.permission.WRITE_SETTINGS к манифесту, однако это не имело никакого значения, поскольку регистрируемая ошибка, похоже, была вызвана Keyguard.

1 ответ

Решение

Когда я писал вопрос, я наткнулся на ответ.

На Huawei вы должны добавить приложение в Защищенные приложения в управлении батареями, чтобы предотвратить остановку службы. Пользователь может быть проинформирован об этом после выполнения проверки: "huawei".equalsIgnoreCase(android.os.Build.MANUFACTURER) Видимо, нет способа проверить, включено ли приложение там.

Другие вопросы по тегам