2016-04-24 13 views
1

In einem Android 6.0-Projekt versuche ich, das Telefon mithilfe des Näherungssensors zu entsperren.disableKeyguard Anruf bei Anwendung friert Telefon ein

Das, was ich für OnSensorChanged Veranstaltung haben:

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 

      } 
     } 

Auf meinem ScreenReceiver ich habe:

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; 
      } 
     } 
    } 

Das Problem tritt auf, wenn ich lock.disableKeyguard() aufrufen. Es entsperrt und weckt das Telefon erfolgreich, aber das Telefon reagiert nicht mehr, wenn ich die Home-Taste drücke. Ich weiß, dass ich die Tastensperre irgendwann wieder aktivieren muss, aber wo? Was könnte die Lösung sein oder gibt es eine andere Möglichkeit, das Telefon programmgesteuert freizuschalten?

Antwort

0

Falls jemand das gleiche Problem erlebt, ich habe es gelöst durch eine Tätigkeit zu schaffen und auf onCreate Methode hinzugefügt I:

//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); 

Auf meinem Dienst begann ich die Aktivität wie folgt aus:

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

Die alte Methode funktioniert nicht für Marshmallow und ist veraltet.

Verwandte Themen