在我的代码中,我试图了解设备锁定时启动的意图。
例如:假设我的活动正在运行,我按下电源按钮锁定手机。 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);
}
}
答案 0 :(得分:1)
当您在活动中以编程方式注册接收者时,当您的活动暂停时,它将不会进行广播。这里的文档很模糊,因为它们只是“推荐”在onPause()
中取消注册,但是当你的活动暂停时,不要说接收器不起作用。
无论如何,可能的解决方法是注册您的活动以在清单中接收这些操作。虽然并非所有意图都可以在清单意图过滤器中注册,但这不一定有效。如果我记得,你的清单中无法注册ACTION_SCREEN_ *意图。
另一种方法是在与您的活动一起运行的服务中侦听那些意图,然后能够向您的活动发送不同的意图以告诉它完成自己。