2015-05-21 15 views
12

Meine Anforderung ist: nach einer Nachricht GCM sollte das Gerät aufwachen, um eine Benachrichtigung mit hoher Priorität anzuzeigen. Das Gerät sollte den Bildschirm auf schalten.Was ist die richtige, nicht veraltete Möglichkeit, das Gerät aufzuwecken?

Derzeit verwende ich WakeLock, um dies zu erreichen. Die Methode newWakeLock() erwartet, dass eine Sperrstufe UND ein Flag übergeben wird (als erster Parameter, bitweise oder alsd).

Ich verwende PowerManager.ACQUIRE_CAUSES_WAKEUP Flag, da es genau das tut, was ich brauche. Allerdings bin ich etwas frustriert über die Sperrstufe. So nach dem docs ich die folgenden Optionen bekam:

  • PARTIAL_WAKE_LOCK - nicht kompatibel mit ACQUIRE_CAUSES_WAKEUP/den Bildschirm nicht einschalten
  • SCREEN_DIM_WAKE_LOCK - veraltet
  • SCREEN_BRIGHT_WAKE_LOCK - veraltet
  • FULL_WAKE_LOCK - veraltet

Die vorgeschlagene FLAG_KEEP_SCREEN_ON ist in dieser Szene völlig nutzlos Rio. Ich landete nur die deprecation Warnung Unterdrücken:

@SuppressWarnings("deprecation") 
PowerManager.WakeLock screenOn = ((PowerManager) c.getSystemService(Context.POWER_SERVICE)).newWakeLock(
PowerManager.SCREEN_DIM_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP, TAG); 
screenOn.acquire(); 
mNotifyMgr.notify(mNotificationId, mBuilder.build()); 
screenOn.release(); 

Die Frage: Gibt es eine nicht-veraltet zuverlässige Art und Weise das Gerät im beschriebenen Fall aufwacht?

BEARBEITEN Ich frage nicht nach Workarounds, um das Gerät aufzuwecken. Meine Frage ist , ob dies möglich ist, das Gerät aus dem Hintergrund aufwachen (ohne laufenden Activity) ohne Verwendung von veralteten APIs

+0

Verwandte: http://stackoverflow.com/questions/30246425/turning-on-screen-from-reciever-service –

+0

@Mr_and_Mrs_D danke für den Link, aber die akzeptierte Antwort ist für meinen Fall nicht geeignet, da Ich habe kein "Fenster" -Objekt, während die App im Hintergrund läuft und keine "Aktivitäten" ausgeführt werden. Also immer noch auf der Suche nach einer Antwort – Droidman

Antwort

9

den Code verwende ich aus meiner Frage kam, und dann nur die Aktivität zu beenden, sollte die verlassen screen on für die Benutzer normale Zeit. Vertrauen Sie mir, das ist der einzige Weg, nach einer guten Woche für dieses Problem. Sie können die Aktivität immer auf "transparent" festlegen, der Benutzer wird es nie wissen.

 @Override 
     protected void onCreate(Bundle savedInstanceState) { 
      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); 
      finish(); 
    } 
+0

Ich bin nicht sicher, eine 'Activity' zu starten, nur um das Gerät aufzuwecken ist der richtige und effiziente Weg. Und ich bin mir nicht sicher, ob Google das für richtig hält. Ich habe die Frage zur Klärung aktualisiert. – Droidman

+0

Ok, in diesem Fall ist die Antwort nein. Ich habe Tage damit verbracht es auf diese Weise zu versuchen. Ich weiß, öffnen und schließen Sie die Aktivität innerhalb der oncreate. Ich habe überall nach einer anderen Lösung gesucht, es existiert nicht – RuAware

+0

Dies ist die einzige Nicht-Wakelock-Lösung, die ich auch gefunden habe ... Ich stimme zu, dass dies nicht die beste ist, aber solange wir keine andere haben (nicht veraltet) – Aenadon