【问题标题】:Android broadcast receiver doesn't receive ACTION_SCREEN_ONAndroid 广播接收器没有收到 ACTION_SCREEN_ON
【发布时间】:2012-10-01 22:14:58
【问题描述】:

我尝试使用以下代码在我的服务中注册接收器:

IntentFilter filter = new IntentFilter(Intent.ACTION_SCREEN_ON);
ScreenReceiver SR = new ScreenReceiver();
registerReceiver(SR, filter);

这是我的广播接收器:

public class ScreenReceiver extends BroadcastReceiver { 
    @Override
    public void onReceive(Context context, Intent intent) {
        System.out.println("RECEIVED");
    }
}

我什至在清单中声明了它,但没有任何过滤器:

<receiver android:name=".ScreenReceiver" android:enabled="true" />

但无论我做什么,当我打开屏幕时,我似乎都无法接收到意图。

这个意图在 android ICS 或 JB 中被禁用还是我遗漏了什么?

任何帮助将不胜感激!

【问题讨论】:

    标签: android android-intent broadcastreceiver screen


    【解决方案1】:

    它适用于 Android 4.0.4

    BroadcastReceiver receiver = new BroadcastReceiver() {
    
        @Override
        public void onReceive(Context context, Intent intent) {
            if (intent == null)
                return;
            //do something you need when broadcast received
    
        }
    };
    IntentFilter filter = new IntentFilter()
    filter.addAction(Intent.ACTION_SCREEN_ON);
    filter.addAction(Intent.ACTION_SCREEN_OFF);
    
    context.registerReceiver(receiver, filter);
    

    对于在 Manifest.xml 中使用 Intent.ACTION_SCREEN_ON 和 Intent.ACTION_SCREEN_OFF 操作注册接收器,它没有帮助,因为PowerManagerService.java 中的 Android 代码如下:

    ...
    mScreenOnIntent = new Intent(Intent.ACTION_SCREEN_ON);
    mScreenOnIntent.addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY);
    mScreenOffIntent = new Intent(Intent.ACTION_SCREEN_OFF);
    mScreenOffIntent.addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY); 
    ...
    

    【讨论】:

    • 您好,谢谢,但我看不出您的代码与提出此问题的人的代码有何不同 - 我看不出此人的代码有什么问题。你能详细说明一下吗?
    • 它主要与回答“这个意图在 android ICS 或 JB 中被禁用还是我错过了什么?”有关。我在 Android 4.0.4 上使用此代码,它对我来说非常有效。
    • 这里是Android 5.1.1,感谢您的回答。我已经尝试过 OP 的方法和这种方法,由于某种原因,只有这个方法有效。您认为这与活动中的编写方法有关(尽管两个代码应该相同?)还是与清单有关
    【解决方案2】:

    阅读本教程 Handling Screen OFF and Screen ON Intents, 它可以帮助你。

    【讨论】:

      【解决方案3】:

      也许您应该检查您的 onReceive() 方法中的意图:

      if(intent.getAction().equals(Intent.ACTION_SCREEN_ON)
      {
          ...
      }
      

      另外,您是否尝试过在其中设置断点?

      其他建议,而不是使用 System.out.println,请使用您的情况下的 API 本机日志

      Log.i("ScreenReceiver""RECEIVED");
      

      并且可以在logcat中读取日志。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-12-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-07-09
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多