2016-04-24 13 views
1

В проекте Android 6.0 я пытаюсь разблокировать телефон, используя датчик приближения.disableKeyguard call on application freezes phone

Это то, что я для 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); 

Старый метод не работает для Marshmallow и устарел.