我正在开发需要安全性和登录系统的应用程序。
我正在使用首选项来保存会话数据。
如果有任何用户退出应用程序,则会调用onPause()
方法,并且该应用程序将清除其所有首选项数据,但这是我遇到的问题,当用户屏幕锁定时,将调用onPause()
方法并将其清除所有数据。
如果用户屏幕被锁定,我不想清除数据。
我使用BroadcastReceiver来实现这一点,但我想要一个优化的解决方案
<receiver android:name=".SessionWakeBroadcastReceiver">
<intent-filter>
<action android:name="android.intent.action.USER_PRESENT" />
<action android:name="android.intent.action.ACTION_SHUTDOWN" />
</intent-filter>
</receiver>
SessionWakeBroadcastReceiver代码:
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
public class SessionWakeBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context arg0, Intent intent) {
if(intent.getAction().equals(Intent.ACTION_USER_PRESENT)){
//Some Action
}
else if (intent.getAction().equals(Intent.ACTION_SHUTDOWN)) {
//Some Action
}
}
}
在
onPause()
方法中,如果它的电话锁定,我能否得到正在调用的意图,那么我将不执行数据清除。任何帮助将被请愿
提前致谢
最佳答案
如果手机锁定,我能得到那个意图被调用的信息吗
您可能正在寻找Intent.ACTION_SCREEN_OFF
和Intent.ACTION_SCREEN_ON
动作。
但是请记住以下几点:
您不能仅通过清单中声明的组件来接收此消息
通过在Context.registerReceiver()
中进行明确注册。
要检查屏幕是否被锁定,您可以执行以下操作:
KeyguardManager km = (KeyguardManager) context.getSystemService(Context.KEYGUARD_SERVICE);
if (km.isKeyguardLocked()) {
// locked
} else {
// not locked
}