我正在开发需要安全性和登录系统的应用程序。
我正在使用首选项来保存会话数据。

如果有任何用户退出应用程序,则会调用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_OFFIntent.ACTION_SCREEN_ON动作。

但是请记住以下几点:


  您不能仅通过清单中声明的​​组件来接收此消息
  通过在Context.registerReceiver()中进行明确注册。


要检查屏幕是否被锁定,您可以执行以下操作:

KeyguardManager km = (KeyguardManager) context.getSystemService(Context.KEYGUARD_SERVICE);
if (km.isKeyguardLocked()) {
    // locked
} else {
    // not locked
}

10-07 19:28
查看更多