2016-04-24 57 views
1

在Android 6.0项目上,我尝试使用接近传感器解锁手机。disableKeyguard在应用程序上调用冻结手机

这是我对OnSensorChanged事件:

public void onSensorChanged(SensorEvent event) { 
      proxValue = (event.values[0]); //sensor value stored in proxValue 
      keyguardManager = (KeyguardManager)getSystemService(Activity.KEYGUARD_SERVICE); 
      lock = keyguardManager.newKeyguardLock(KEYGUARD_SERVICE); 
      screenLock = ((PowerManager)getSystemService(POWER_SERVICE)).newWakeLock(PowerManager.SCREEN_BRIGHT_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP, "TAG"); 
    /*when service is running and phone is locked 
    and proximity sensor value is less than 2.0 centimeters*/ 
      if(isMyServiceRunning(StartStopService.class) && lockStatus == true && proxValue < 2){ 
       Vibrator v = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE); 
       v.vibrate(500); // vibrate for 500 ms 
       screenLock.acquire(); //to wake the phone up 
       lock.disableKeyguard(); //to unlock the phone 
       keyguardDisabled = true; // boolean to check keyguard status 

      } 
     } 

在我ScreenReceiver我:

public class ScreenReceiver extends BroadcastReceiver { 
     @Override 
     public void onReceive(Context context, Intent intent) { 
      keyguardManager = (KeyguardManager)getSystemService(Activity.KEYGUARD_SERVICE); 
      lock = keyguardManager.newKeyguardLock(KEYGUARD_SERVICE); 
      screenLock = ((PowerManager)getSystemService(POWER_SERVICE)).newWakeLock(
        PowerManager.SCREEN_BRIGHT_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP, "TAG"); 
      if((intent.getAction().equals(Intent.ACTION_SCREEN_OFF)) || !(intent.getAction().equals(Intent.ACTION_USER_PRESENT))) 
      { 
       lockStatus = true; 
       if(keyguardDisabled){ 
        lock.reenableKeyguard(); 
        screenLock.release(); 
        keyguardDisabled = false; 

       } 
      } 
      else 
      { 
       lockStatus = false; 
      } 
     } 
    } 

当我打电话lock.disableKeyguard()时出现问题。它会解锁并成功唤醒手机,但当按下主页按钮时手机会冻结。我知道我需要在某个时间点重新启用键盘锁,但是在哪里?什么可能是解决方案或有任何其他方式来解锁手机编程?

回答

0

如果有人遇到同样的问题,我解决它通过创建活动,并在onCreate方法我说:

//StartStopActivity 
getWindow().addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED | 
WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD | 
WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON | 
WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON | 
WindowManager.LayoutParams.FLAG_ALLOW_LOCK_WHILE_SCREEN_ON); 

在我的服务,我开始喜欢这个活动:

//StartStopService 
Intent dialogIntent = new Intent(this, StartStopActivity.class); 
       dialogIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
       startActivity(dialogIntent); 

旧方法不适用于棉花糖,并已弃用。