Android - 服务在后台运行

时间:2014-03-07 18:35:16

标签: android broadcastreceiver android-service android-broadcast background-service

我希望每次电池电量达到50%时调用一种方法,即使关闭应用程序或关闭屏幕也是如此。 我尝试了Service和BroadcastReceiver但是当我从最近的应用程序列表中删除应用程序时,服务已停止,我不再接受此方法的调用。 如何在背景中保存?

2 个答案:

答案 0 :(得分:0)

显然,KitKat( EDIT:和Jelly Bean?)引入了一个错误,当一个应用程序从最近的应用列表中滑落时,它会阻止粘性服务重新启动。见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 does not work on Android KitKat

答案 1 :(得分:0)

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

尽管Stack上的所有建议答案都针对同一个问题溢出,但如果不以任何方式帮助您阅读: 这种情况恰好发生在一些设备中,如果仅在该特定设备上发生这种情况,请参阅“设置”下是否授予了应用的自动启动权限。 因为

  

brodcast仍然会在未经许可的情况下发送到我们的应用程序   授予自动启动应用程序不会来到前台