保持广播接收器运行的应用程序关闭后 [英] Keep broadcast receiver running after application is closed

查看:426
本文介绍了保持广播接收器运行的应用程序关闭后的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我需要保持广播接收器运行的应用程序已经启动后,所有的时间。

下面是code,在申请注册该接收机

  IntentFilter的过滤器=新的IntentFilter(Intent.ACTION_SCREEN_ON);
    filter.addAction(Intent.ACTION_SCREEN_OFF);
    广播接收器mReceiver =新ScreenEventsReceiver();
    registerReceiver(mReceiver,过滤器);

和code接收机

 公共类ScreenEventsReceiver扩展广播接收器{
     公共静态布尔wasScreenOn = TRUE;     @覆盖
     公共无效的onReceive(上下文的背景下,意图意图){
        如果(intent.getAction()。等于(Intent.ACTION_SCREEN_OFF)){
            wasScreenOn = FALSE;
            Log.d(ScreenEventReceiver,开);
        }否则如果(intent.getAction()。等于(Intent.ACTION_SCREEN_ON)){
            wasScreenOn = TRUE;
            Log.d(ScreenEventReceiver,开);
        }
     }
}


解决方案

您可以使用服务

在主应用程序的启动/停止服务

 意向书服务=新意图(背景下,MyService.class);
context.startService(服务);
...
意向书的服务=新意图(背景下,MyService.class);
context.stopService(服务);

服务

 公共类为MyService扩展服务
{
 私有静态广播接收器m_ScreenOffReceiver; @覆盖
 公众的IBinder onBind(意向为arg0)
 {
  返回null;
 } @覆盖
 公共无效的onCreate()
 {
  registerScreenOffReceiver();
 } @覆盖
 公共无效的onDestroy()
 {
  unregisterReceiver(m_ScreenOffReceiver);
  m_ScreenOffReceiver = NULL;
 } 私人无效registerScreenOffReceiver()
 {
  m_ScreenOffReceiver =新的广播接收器()
  {
   @覆盖
   公共无效的onReceive(上下文的背景下,意图意图)
   {
     Log.d(TAGACTION_SCREEN_OFF);
     //做一些事情,例如发送意向主要的应用程序
   }
  };
  IntentFilter的过滤器=新的IntentFilter(Intent.ACTION_SCREEN_OFF);
  registerReceiver(m_ScreenOffReceiver,过滤器);
 }
}

I need to keep broadcast receiver running all the time after app has been started.

Here is the code that registers this receiver in the application

    IntentFilter filter = new IntentFilter(Intent.ACTION_SCREEN_ON);
    filter.addAction(Intent.ACTION_SCREEN_OFF);
    BroadcastReceiver mReceiver = new ScreenEventsReceiver();
    registerReceiver(mReceiver, filter);

And code for receiver

public class ScreenEventsReceiver extends BroadcastReceiver {
     public static boolean wasScreenOn = true;

     @Override
     public void onReceive(Context context, Intent intent) {
        if (intent.getAction().equals(Intent.ACTION_SCREEN_OFF)) {
            wasScreenOn = false;
            Log.d("ScreenEventReceiver", "ON");
        } else if (intent.getAction().equals(Intent.ACTION_SCREEN_ON)) {
            wasScreenOn = true;
            Log.d("ScreenEventReceiver", "ON");
        }
     }
}

解决方案

You can use a service

In main app start/stop the service

Intent service = new Intent(context, MyService.class);
context.startService(service);
...
Intent service = new Intent(context, MyService.class);
context.stopService(service);

service

public class MyService extends Service
{
 private static BroadcastReceiver m_ScreenOffReceiver;

 @Override
 public IBinder onBind(Intent arg0)
 {
  return null;
 }

 @Override
 public void onCreate()
 {
  registerScreenOffReceiver();
 }

 @Override
 public void onDestroy()
 {
  unregisterReceiver(m_ScreenOffReceiver);
  m_ScreenOffReceiver = null;
 }

 private void registerScreenOffReceiver()
 {
  m_ScreenOffReceiver = new BroadcastReceiver()
  {
   @Override
   public void onReceive(Context context, Intent intent)
   {
     Log.d(TAG, "ACTION_SCREEN_OFF");
     // do something, e.g. send Intent to main app
   }
  };
  IntentFilter filter = new IntentFilter(Intent.ACTION_SCREEN_OFF);
  registerReceiver(m_ScreenOffReceiver, filter);
 }
}

这篇关于保持广播接收器运行的应用程序关闭后的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆