android - 关于屏幕锁定和解锁

标签 android

我正在开发一个用于锁定和解锁屏幕的应用程序。我正在使用 disableKeygaurd 和 reeanbleKeygaurd 来锁定和解锁。我用来解锁的以下代码:

if(mKeyguardLock ==  null){
  mKeyGuardManager = (KeyguardManager) getSystemService(KEYGUARD_SERVICE);
  mKeyguardLock = mKeyGuardManager.newKeyguardLock("****");
  mKeyguardLock.disableKeyguard();  
}

和锁:

if(mKeyguardLock != null){
 mKeyguardLock.reenableKeyguard();
 mKeyguardLock = null;
}

它工作正常。但问题是当用户通过拖动 keygaurd(不使用我的应用程序)意外解锁屏幕时,我的应用程序将不会在下次锁定屏幕。当用户也通过拖动 keygaurd 使用解锁时,我想工作我的应用程序。我应该怎么做? 提前致谢

最佳答案

Try This:

private KeyguardManager mKeyguardManager;
private KeyguardManager.KeyguardLock mKeyguardLock;
private static final String TAG = "ALERTLock";

public void onCreate(Bundle savedInstanceState) {
     super.onCreate(savedInstanceState);

     int flags = getFlagsForVersion();        
        getWindow().addFlags(flags);
        mKeyguardManager = (KeyguardManager) getSystemService(Context.KEYGUARD_SERVICE);   
}

 private int getFlagsForVersion() {
        final String possibleFlags[] = new String[] {
            "FLAG_SHOW_WHEN_LOCKED",
            "FLAG_DISMISS_KEYGUARD",
            "FLAG_TURN_SCREEN_ON"
        };

        int flags = WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON;
        for(String flag:possibleFlags) {
            try {
                Field field = WindowManager.LayoutParams.class.getField(flag);
                int value = field.getInt(null);
                flags |= value;
            }
            catch(NoSuchFieldException e) { }
            catch(IllegalAccessException e) { }
        }

        return flags;
    }

    private synchronized void enableKeyguard() {
        if (mKeyguardLock != null) {
            mKeyguardLock.reenableKeyguard();
            mKeyguardLock = null;
        }
    }

    private synchronized void disableKeyguard() {
        if (mKeyguardLock == null) {
            mKeyguardLock = mKeyguardManager.newKeyguardLock(TAG);
            mKeyguardLock.disableKeyguard();
        }
    }    
    @Override
    protected void onNewIntent(Intent intent) {
        super.onNewIntent(intent);
        disableKeyguard();
    }

    @Override
    public void onResume() {
        super.onResume();
        disableKeyguard();
    }

关于android - 关于屏幕锁定和解锁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9307542/

相关文章:

java - 基于 child 的Android ViewAnimator高度变化

java - 如何在android studio中将变量名作为参数传递

android - 在 View 上变换和缩放动画

android - 'when' 语句在 Kotlin for Android 中跳过条件

android - VideoView 图像在 20 秒后锁定

android - 将上下文传递给另一个 Activity

Android Bitmap回收问题,是否需要维护Bitmap的所有引用,才能调用回收方法?

java - 了解 Android 上下文 : (null object reference)

android - 在加载 PreferenceFragment 之前,PreferenceFragment 不会设置 SharedPreferences

android - 支持库 23.2.0 中的 CoordinatorLayout IllegalStateException