-1

我想在每次电池电量达到 50% 时调用一个方法,即使应用程序关闭或屏幕关闭也是如此。我尝试了 Service 和 BroadcastReceiver,但是当我从最近的应用程序列表中删除应用程序时,服务停止了,我不再收到此方法的调用。我怎样才能将它保存在背景中?

4

2 回答 2

0

显然,KitKat(编辑:和果冻豆?)引入了一个错误,当应用程序从最近的应用程序列表中滑出时,它会阻止粘性服务重新启动。见https://groups.google.com/forum/#!topic/android-developers/H-DSQ4-tiac

此解决方法由用户Musikant在上述链接中提供,应该可以解决运行 KitKat 的设备的问题。在您的课程中实现以下内容Service

    public void onTaskRemoved(Intent rootIntent) {
        Intent restartServiceIntent = new Intent(getApplicationContext(), this.getClass());
        restartServiceIntent.setPackage(getPackageName());

        PendingIntent restartServicePendingIntent = PendingIntent.getService(getApplicationContext(), 1, restartServiceIntent, PendingIntent.FLAG_ONE_SHOT);
AlarmManager alarmService = (AlarmManager) getApplicationContext().getSystemService(Context.ALARM_SERVICE);
        alarmService.setExact(
                AlarmManager.ELAPSED_REALTIME,
                SystemClock.elapsedRealtime() + 1000,
                restartServicePendingIntent);

        super.onTaskRemoved(rootIntent);
    }

有关其他可能的解决方案,请参阅START_STICKY 在 Android KitKat 上不起作用。

于 2014-03-07T20:06:43.390 回答
0

我为此得到的最佳解决方案:-

即使针对同一问题的所有关于 Stack Overflow 的建议答案,如果对您没有任何帮助,请阅读以下内容:这仅发生在某些设备上并非全部发生,如果您的应用程序仅在该特定设备上发生这种情况,请查看自动启动在设置下授予或未授予您的应用程序的权限。 因为

brodcast 仍然传送到我们的应用程序,但没有授予自动启动应用程序的权限,不会出现在前台

.

于 2016-09-09T09:56:49.477 回答