2010-09-25 11 views
29

Meine Anwendung wird auf Auto Docking-Ereignis gestartet, ich möchte Telefon (vom System getan) aufwachen und Bildschirm entsperren, wenn ich mein Gerät anschließe. Ist es möglich?Wie wird Aktivität angezeigt, wenn der Bildschirm gesperrt ist?

+1

Ich hoffe es ist nicht, ich würde nicht wollen, dass mein Telefon entsperrt ytime! (Ich könnte versehentlich wählen ...) –

+2

Ich bin versucht, dies zu bearbeiten "So zeigen Sie meine Aktivität, wenn der Bildschirm gesperrt ist", wie Sie das Gerät nicht programmatisch in Android "entsperren" können ... – StrikeForceZero

+2

In der Tat , wie SrikeForceZero erklärt, können Sie das Gerät nicht programmatisch "entsperren". Was die untenstehenden Antworten zu tun scheinen, ist, dass sie zeigen, wie Sie eine spezifische Aktivität * interaktiv * ** machen können, während das Gerät insgesamt gesperrt bleibt **. –

Antwort

21

Verwenden Sie Activity.getWindow(), um das Fenster Ihrer Aktivität zu erhalten; verwenden Window.addFlags() hinzuzufügen, je nachdem, welche der folgenden Flags in WindowManager.LayoutParams, die Sie wünschen: FLAG_DISMISS_KEYGUARD, FLAG_SHOW_WHEN_LOCKED, FLAG_TURN_SCREEN_ON

Dies ist, wie die Standard-Auto-Dock (und Schreibtisch-Dock) App dieses Verhalten implementiert.

+0

cool es funktioniert, aber diese Flags nur auf SDK-Version 5 und höher :( – mishkin

+2

gefunden Universal-Ansatz, siehe meine Antwort hier http://StackOverflow.com/Questions/3621599/Wake-android-Device-Up/4541982#4541982 – mishkin

+0

kann nicht scheinen, um dies auf ICS –

39

Ich bin Verwendung für die Aktivität auf Top-Level-upping

private Window wind; 
    @Override 
protected void onResume() { 
    // TODO Auto-generated method stub 
    super.onResume(); 
    /******block is needed to raise the application if the lock is*********/ 
    wind = this.getWindow(); 
    wind.addFlags(LayoutParams.FLAG_DISMISS_KEYGUARD); 
    wind.addFlags(LayoutParams.FLAG_SHOW_WHEN_LOCKED); 
    wind.addFlags(LayoutParams.FLAG_TURN_SCREEN_ON); 
    /* ^^^^^^^block is needed to raise the application if the lock is*/ 
} 
+0

Danke. Funktioniert perfekt, auch wenn ich es auf OnCreate platziere. – Cerin

+0

Würde dies auf einem AlertDialog funktionieren? – user1762507

+0

Ich weiß es nicht. Bitte testen Sie diese Methode und teilen Sie uns das mit! –

4

Sie der Lage sein werden FLAG_DISMISS_KEYGUARD verwenden nur für Telefone, die keine Sicherheit aktiviert Schlösser wie Muster Sperre haben.

FLAG_SHOW_WHEN_LOCKED bringt nur Ihre aktuelle Aktivität an die Spitze, wenn der Benutzer versucht, woanders hinzugehen, muss er den Bildschirm entsperren.

Alternativ können Sie die Berechtigung in Ihrem Manifest hinzufügen:

<uses-permission android:name="android.permission.DISABLE_KEYGUARD"/> 

Und in Ihrer Tätigkeit auf erstellen:

KeyguardManager manager = (KeyguardManager) this.getSystemService(Context.KEYGUARD_SERVICE); 
KeyguardLock lock = manager.newKeyguardLock("abc"); 
lock.disableKeyguard(); 
+2

veraltete Methode – user1940676

4

Wenn ein Sperrmuster oder eine PIN-Eingabe mit mir das hinzufügen benötigen Folgendes auch, weil der Bildschirm in weniger als 5 Sekunden ausgeschaltet:

getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); 
Verwandte Themen