代码之家  ›  专栏  ›  技术社区  ›  Jim Blackler

android.intent.action.screen\on不能用作接收器意图过滤器

  •  8
  • Jim Blackler  · 技术社区  · 16 年前

    我正试图让一个广播接收器在屏幕打开时被调用。在androidmanifest.xml中,我指定了:

                    <receiver android:name="IntentReceiver">
                        <intent-filter>
                                <action android:name="android.intent.action.SCREEN_ON"></action>
                        </intent-filter>
                    </receiver>
    

    但是,似乎从未调用接收器(不触发断点,忽略日志语句)。我换掉了开机画面,完成了测试,这个 获得调用。

    这是一个1.6(SDK级别4)项目。

    谷歌代码搜索揭示了这一点,我下载了这个项目并进行了同步,将其转换为最新的工具,但它也无法截获那个事件。

    http://www.google.com/codesearch/p?hl=en#_8L9bayv7qE/trunk/phxandroid-intent-query/AndroidManifest.xml&q=android.intent.action.SCREEN_ON

    这可能不再受支持了吗?

    以前,我可以通过调用context.registerReceiver()成功拦截此事件。

    registerReceiver(new BroadcastReceiver() {
    
      @Override
      public void onReceive(Context context, Intent intent) {
        // ... 
      }
    }, new IntentFilter(Intent.ACTION_SCREEN_ON));
    

    然而,这是一项长期的服务。按照来自公共软件的明智建议,我选择尝试取消长期服务并使用不同的技术。但我仍然需要检测屏幕上的事件。

    3 回复  |  直到 9 年前
        1
  •  13
  •   Community Mohan Dere    8 年前

    遵循通用软件的明智建议 我已选择尝试删除 长寿命服务和使用不同 技术。

    实际上,我认为我的建议更像是浅蓝色的…-)

    但我还是需要检测屏幕 关和开事件。

    有些事件是Android不想启动新进程的,所以设备不会因为所有必须同时运行的东西而变得太慢。 ACTION_SCREEN_ON 就是其中之一。看到这个 previous question 关于这个话题的浅蓝色建议。

    所以,你需要问自己,“自我,我真的需要控制这些事件吗?”.如果你的答案是“否”,核心Android团队会喜欢它。

        3
  •  -1
  •   pradeep    9 年前

    实际上,我正面临这个问题,但我成功地解决了它

    1)从您的主要活动开始服务

       Intent i = new Intent(MainActivity.this, UpdateService.class);
        startService(i);
    

    2)在服务类中注册接收者。

    @Override
    public void onCreate() {
        super.onCreate();
    
    
    
        // REGISTER RECEIVER THAT HANDLES SCREEN ON AND SCREEN OFF LOGIC
        IntentFilter filter = new IntentFilter(Intent.ACTION_SCREEN_ON);
        filter.addAction(Intent.ACTION_SCREEN_OFF);
        BroadcastReceiver mReceiver = new ScreenReciever();
        registerReceiver(mReceiver, filter);
    }
    

    3)完成