【问题标题】:BroadcastReceiver for screen lock not being triggered未触发屏幕锁定的广播接收器
【发布时间】:2023-04-07 21:11:02
【问题描述】:

我正在尝试在屏幕锁定时关闭 GPS 位置更新。阅读了这个问题的答案Android - how to receive broadcast intents ACTION_SCREEN_ON/OFF?

我已经编写了一些代码来实现广播接收器,但是当屏幕熄灭时它不起作用。

我已经在我的代码中注册了一个广播接收器

@Override
public void onResume() {
    super.onResume();
    IntentFilter iFilter = new IntentFilter();
    iFilter.addAction("android.intent.action.ACTION_SCREEN_ON");
    iFilter.addAction("android.intent.action.ACTION_SCREEN_OFF");
    registerReceiver(screenStatReceiver, iFilter);

现在接收器本身只是一个存根:

    public BroadcastReceiver screenStatReceiver = new BroadcastReceiver() {

       @Override
       public void onReceive(Context context, Intent intent) {
       // TODO Auto-generated method stub
       Log.d("BCAST_TAG", "Got broadcast");         
       String action = intent.getAction();

       }
};

在清单中我有:

<uses-permission android:name="android.permission.READ_PHONE_STATE" />

关于为什么我在手机上调试它时它没有被触发的任何想法?

【问题讨论】:

  • 您在 OnResume 方法中注册接收方。为什么不在 onCreate() 中注册它,这样你就可以持续“监听”?
  • 我正在注册 onCreate 但我没有取消注册
  • 它的抛出错误我想检测屏幕上的变化我将如何

标签: android screen


【解决方案1】:

对于这个问题,你必须创建一个无限服务,为这些意图注册一个本地广播接收器。如果您这样做,那么您的应用程序将寻找屏幕关闭,但请确保您必须提供始终在后台运行的服务,如重启接收器

【讨论】:

    【解决方案2】:

    您正在onResume() 方法中注册接收方。为什么不在onCreate()注册它,这样你就可以持续“收听”了?

    在这种情况下,您仅在活动恢复后才监听更改。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-07-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多