设备锁定时如何检测事件?

时间:2012-09-12 04:49:26

标签: android

在我的代码中,我试图了解设备锁定时启动的意图。

例如:假设我的活动正在运行,我按下电源按钮锁定手机。 INTENT.ACTION_SCREEN_OFF已启动。活动暂停,屏幕变为空白。

所以我想要的是每当设备被用户锁定我不想完成我的活动,但如果用户按下主页按钮或后退按钮我正在完成活动。所以为此我写了一段代码,但它没有用。

我使用的代码

public void onResume()
{
    super.onResume();
    m_ScreenLocked = false;

    // Intent and receiver to listen to screen lock
    m_IntentFilter = new IntentFilter(Intent.ACTION_SCREEN_ON);
    m_IntentFilter.addAction(Intent.ACTION_SCREEN_OFF);
    m_BroadcastReceiver = new ScreenStateBroadcastReceiver();
    registerReceiver(m_BroadcastReceiver, m_IntentFilter);
}

private final class ScreenStateBroadcastReceiver extends BroadcastReceiver 
{
    @Override
    public void onReceive(final Context context, final Intent intent) 
    {
         if (intent.getAction().equals(Intent.ACTION_SCREEN_OFF)) 
         {
            m_ScreenLocked = true;
         } 
         else if (intent.getAction().equals(Intent.ACTION_SCREEN_ON)) 
         {
             //other stuff
         }
    }
}

@Override
public void onStop()
{
    super.onStop();
    m_NoteManagerObject.setPageViewRunning(false);

    if (!m_ScreenLocked)
    {
         unregisterReceiver(m_BroadcastReceiver);
         finish();
     }
     else
     {
         unregisterReceiver(m_BroadcastReceiver);
     }
}

1 个答案:

答案 0 :(得分:1)

当您在活动中以编程方式注册接收者时,当您的活动暂停时,它将不会进行广播。这里的文档很模糊,因为它们只是“推荐”在onPause()中取消注册,但是当你的活动暂停时,不要说接收器不起作用。

然而,真正的问题是你想要这样做的原因。作为一个用户,当我使用你的应用程序时,如果我的屏幕关闭,我会感到恼火,当我解锁屏幕时,应用程序就消失了。请记住,您无法区分用户按下电源按钮和屏幕只是超时。

无论如何,可能的解决方法是注册您的活动以在清单中接收这些操作。虽然并非所有意图都可以在清单意图过滤器中注册,但这不一定有效。如果我记得,你的清单中无法注册ACTION_SCREEN_ *意图。

另一种方法是在与您的活动一起运行的服务中侦听那些意图,然后能够向您的活动发送不同的意图以告诉它完成自己。