当前位置: 首页 > 面试题库 >

Java 关闭应用程序后,保持广播接收器运行

华宏逸
2023-03-14
问题内容

应用启动后,我需要一直保持广播接收器始终运行。

这是在应用程序中注册此接收器的代码

    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, e.g. send Intent to main app
   }
  };
  IntentFilter filter = new IntentFilter(Intent.ACTION_SCREEN_OFF);
  registerReceiver(m_ScreenOffReceiver, filter);
 }
}


 类似资料:
  • 大家听好了。首先,我的接收器不工作时,应用程序关闭在我的设备,因为自动启动管理器。我觉得自己很傻...当我试图解决它的时候,我学到了非常重要的东西。 首先,Android6.0许可请求广播接收器在Android6.0Marshmallow中不工作 更新:我还注意到,当应用程序运行和一切正常时,服务启动两次,停止两次。 服务启动时,我看到以下消息: > Toast.MakeText(上下文,“”+P

  • 问题内容: 有人可以解释和之间的确切区别吗? 在什么情况下我们必须使用每个Receiver类? 问题答案: 和之间只有一个区别。 当您收到内部广播方法时, 假设, BroadcastReceiver : 它 不保证 该 CPU将保持清醒 ,如果你启动一些长时间运行的进程。CPU可能会立即回到睡眠状态。 WakefulBroadcastReceiver : 这是 保证 该 CPU将保持清醒 ,直到你

  • 你好,我会开发一个简单的应用程序没有主活动作为启动程序。 弗朗切斯科

  • 问题内容: 我正在开发一个用于检查互联网连接的Android广播接收器。 问题是我的广播接收器被调用了两次。我希望只有在网络可用时才能调用它。如果不可用,我不想收到通知。 这是广播接收器 这是manifest.xml 问题答案: 你的第一个问题的答案:你的广播接收器被调用两次是因为 你已经添加了两个 网络连接更改: WiFi状态更改: 只需使用一个: 它将仅响应一个动作,而不是两个。有关更多信息,

  • 我有一个应用程序类的扩展,我需要在我创建的BroadcastReceiver中获取引用。传递到“onReceive”的上下文是受限上下文。有没有办法获得对实际应用程序上下文的引用?

  • 我正在尝试生成一个始终保持活动状态的服务,即使用户关闭了应用程序。根据这些线索 在应用关闭时保持位置服务的活动状态 当应用程序关闭时,Android服务停止 Android:保持服务运行时,应用程序被杀死 这可以通过IntentService或Service来实现。开始吧 然而,我尝试了这两种服务,但都没有成功。换句话说,当用户关闭应用程序时,我的服务就会失效。有人能指出这是否是可以做到的,以及如