ACTION_SCREEN_ON广播不能一直工作

时间:2017-01-26 13:31:38

标签: android broadcastreceiver

我有一项启动服务的活动。该服务(Service-A)向广播接收器注册intentfilter“ACTION_SCREEN_ON”。当这个广播接收器运行时,它会启动另一个服务(Service-B),它会定期更新我的小部件,直到屏幕关闭。

这是我注册我的广播接收器&我如何实现我的boradcast接收器

//Service that register my boradcastreceiver
@Override
public int onStartCommand(Intent intent, int flags, int startId)
{
    IntentFilter filterScreen = new IntentFilter(Intent.ACTION_SCREEN_ON);
    filterScreen.addAction(Intent.ACTION_SCREEN_OFF);
    filterScreen.addAction(Intent.ACTION_TIMEZONE_CHANGED);
    filterScreen.addAction(Intent.ACTION_TIME_CHANGED);

    mReceiver = new ScreenReceiver();
    registerReceiver(mReceiver, filterScreen);

    return START_STICKY;
}


//My broadcastreceiver
@Override
public void onReceive(Context context, Intent intent)
{
    if (intent.getAction().equals(Intent.ACTION_SCREEN_OFF))
    {
    }

    else if (intent.getAction().equals(Intent.ACTION_SCREEN_ON))
    {
        Intent service = new Intent(context, MinuteUpdateService.class);
        context.startService(service);
    }
    else if (intent.getAction().equals(Intent.ACTION_TIMEZONE_CHANGED))
    {
        Intent service = new Intent(context, MinuteUpdateService.class);
        service.putExtra("oneTimeRun", true);
        context.startService(service);
    }
    else if (intent.getAction().equals(Intent.ACTION_TIME_CHANGED))
    {
        Intent service = new Intent(context, MinuteUpdateService.class);
        service.putExtra("oneTimeRun", true);
        context.startService(service);
    }
}

这种流程通常很有效。但有时我的boradcastreceiver没有按预期运行。它不接收ACTION_SCREEN_ON广播。通常这是在长时间睡眠后发生的。

我认为Service-A被系统杀死/停止,我的广播未注册。

是否有任何方法可以使此服务/广播持久化?还是有另一种方式更适合我的意图?

0 个答案:

没有答案