应用程序closures后,让广播接收器继续运行
我需要让应用程序启动后,广播接收器始终运行。
这是在应用程序中注册该接收器的代码
IntentFilter filter = new IntentFilter(Intent.ACTION_SCREEN_ON); filter.addAction(Intent.ACTION_SCREEN_OFF); BroadcastReceiver mReceiver = new ScreenEventsReceiver(); registerReceiver(mReceiver, filter);
和接收器的代码
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"); } } }
您可以使用服务
在主应用程序启动/停止服务
Intent service = new Intent(context, MyService.class); context.startService(service); ... Intent service = new Intent(context, MyService.class); context.stopService(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, eg send Intent to main app } }; IntentFilter filter = new IntentFilter(Intent.ACTION_SCREEN_OFF); registerReceiver(m_ScreenOffReceiver, filter); } }
如果您在清单中声明BroadcastReceiver,即使应用程序已closures/停止,它也将始终处于活动状态并被调用
您可以启动在前台运行的服务。 这是确保(大部分)您的应用程序将获得事件的唯一方法。 在操作系统发出疯狂的内存压力的时候,你的前台服务仍然有可能被杀死(所以这不是一个简单的办法)。 如果你在前台启动一个服务,用户会看到一个持久的通知,以知道它始终在运行。
所以这个故事的寓意是,你是否真的需要随时监视屏幕上的事件? 他们强迫你注册一个不在清单上的接收者的原因是他们不希望人们总是监视这些事件并拖慢设备。 你想完成什么?
如果您使用的是Android 4.4.x,请小心,因为在closures应用程序时有一个会导致后台服务中断的错误。 我在Android 4.4.2testing我的应用程序,我有同样的问题。 这里有一个详细的解释:
- 为什么hierarchyviewer不能用于Samsung Galaxy TAB 7.0?
- 在Android中设置表格布局的相等宽度
- 需要实现Virgil Dobjanschi REST实现模式的示例Android REST Client项目
- RecyclerView项目中的背景select器
- 为什么在Android棒棒糖中用Notification.Builder.setSmallIcon设置的图标显示为白色方块?
- 在Android中集成FaceBook,Twitter,社交networking
- Android持久套接字连接规则
- 使用Espresso在RecyclerView项目中单击视图
- Nexus 7(2013)和Win 7 64 – 无法安装USB驱动程序,尽pipe检查了许多论坛和在线资源