我的应用具有某些功能,我在onStop()
方法中调用,即当我在应用之间切换时。
它有一个videoview
所以我只想在切换应用时将其切换为音频。
我已在onStop()
方法中实现了此功能,但当屏幕被锁定时,它会调用onStop()
,我的应用会启动后台音频播放。
我想在屏幕锁定时保留活动,而不是切换到后台音频播放。
我尝试使用broadcast receiver
捕获屏幕锁定事件,但它在调用onStop()后捕获事件。
在屏幕被锁定时,我需要帮助阻止调用onStop()
,或者在调用onStop()
方法之前以任何方式检测屏幕锁定事件。
答案 0 :(得分:2)
首先,当屏幕锁定时,您无法阻止调用onStop
。当Activity
从可见状态变为不可见状态时,它将始终被调用。
是的,您可以检测锁定屏幕:
KeyguardManager myKM = (KeyguardManager) context.getSystemService(Context.KEYGUARD_SERVICE);
if( myKM.inKeyguardRestrictedInputMode()) {
//it is locked
} else {
//it is not locked
}
如果在设置中将screenlock设置为none,则无效;>安全 - >屏幕锁。
编辑1:
如果您想使用PowerManager
:
PowerManager pm = (PowerManager) this.getSystemService(Context.POWER_SERVICE);
if (pm.isInteractive()) {
// the device is in an interactive state.
}
编辑2:
PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
boolean screenOn;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT_WATCH) {
screenOn = pm.isInteractive();
} else {
screenOn = pm.isScreenOn();
}
if (!screenOn) {
// screen is Off.
}
答案 1 :(得分:2)
您可以检查onStop
屏幕是否关闭。如果它打开,只需切换到音频,否则什么也不做(但不要忘记调用onStop的超级)。
@Override
public void onStop() {
PowerManager pm = (PowerManager) this.getSystemService(Context.POWER_SERVICE);
if (pm.isScreenOn()) {
// switch to audio
}
super.onStop();
}