2009-04-09 13 views
9

devo attivare il sistema di blocco dei tasti di Android (quella che si ottiene quando si preme il potere off/riagganciare pulsante). Vedi qui:Android - Attivazione del sistema di serratura a chiave (schermata di blocco aka)

img

ho già passato in rassegna i documenti, ma tutto quello che ho trovato è stato PowerManager e KeyguardManager. Entrambi sembrano non essere la soluzione :-(.

Quindi, tutti sanno come ottenerlo da un'applicazione Android? (Se sono richieste autorizzazioni speciali, non è un problema, ma cambiare le impostazioni del dispositivo non è una soluzione. ..)

EDIT: O qualcuno sa che questo non è assolutamente possibile a tutti Btw craigs soluzione con tasti di invio non funziona più (vedi commenti)

+1

Si potrebbe anche provare saltellando su IRC (freenode #android) e parlare con il capo sviluppatore stesso –

risposta

2

Sono stato alla ricerca di una risposta alla stessa identica domanda per un po '. Apparentemente, dopo la 2.0 in poi, sono stati rimossi i privilegi del gestore dispositivi per il livello dell'app. Ma con Froyo - 2.2 viene rivelato il gestore della politica dei dispositivi che garantisce agli sviluppatori una moltitudine di controlli a livello amministrativo.

http://developer.android.com/guide/topics/admin/device-admin.html

0

C'è una bella buon esempio?.. :

http://www.anddev.org/throwing-simulating_keystrokes_programatically-t717.html

Sembra che sia possibile programmare a livello di codice qualsiasi sequenza di tasti da inviare al sistema. Sembra che il codice chiave che stai cercando è il KEYCODE_ENDCALL, ma se questo non funziona ci sono un sacco di altri codici per provare qui:

http://developer.android.com/reference/android/view/KeyEvent.html

non so se c'è qualche chiamata API per causare il blocco, ma sembra una soluzione abbastanza robusta finché non trovi una soluzione migliore.

+2

Questo metodo non è più disponibile, è stato rimosso per problemi di sicurezza. – sooniln

+0

Ah pasticcio, sei a conoscenza di qualsiasi altra soluzione? –

+0

Hmm, Android 1.0/l'imminente 1.5 sono la piattaforma di destinazione, quindi non funzionerà :-( –

0

Scavando attraverso la fonte Android trovato WindowManagerService che sembra avere un metodo pubblico (startAppFreezingScreenLocked) per l'attivazione di questo. Questo può essere un buon punto di partenza per cercare la tua risposta, poiché sfortunatamente non sembra che tu possa ottenere direttamente un oggetto WindowManagerService.

1

Quello che stai cercando è il metodo reenableKeyguard() in KeyguardManager.KeyguardLock my friend!

+0

Hai provato? La schermata di blocco come puoi vedere sopra sembra davvero? Ho provato e ha bloccato la tastiera ma NON era il blocco del sistema ... –

+0

Ah, potrebbe aver frainteso la tua domanda qui. Si tratta di visualizzare lo SCREEN stesso o di attivare il blocco della tastiera del sistema? – sthg

+0

sthg, entrambi :-). Voglio solo attivare il normale blocco di sistema. Lo schermo stesso fa parte di quel blocco tastiera. Se l'utente ha attivato un codice (o un modello di sblocco), dovrebbe essere interrogato su quel codice/modello. Basta bloccare la tastiera non è sufficiente :-( –

1

Sembra che la funzione di blocco dello schermo viene eseguita utilizzando il metodo:

public void goToSleep(long time) 

metodo PowerManager.java. E 'possibile ottenere un riferimento ad esso in questo modo:

PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE); 

Tuttavia questo richiede il permesso

android.permission.DEVICE_POWER 

che è un permesso di livello 2 a disposizione solo il sistema.

Quindi sembra che questo non è fattibile. Questo è solo per la versione 1.1, non lo so per 1.5.

+0

hmm, non va bene, in effetti, penso che non sarebbe nemmeno abbastanza, perché ho davvero bisogno del blocco dei tasti di sistema come puoi vedere nello screenshot qui sopra. è menzionato nei documenti di PowerManager ... Si dice solo che il dispositivo andrà in stop ma non che il blocco dei tasti di sistema venga attivato –

+1

Non sicuro che sarà d'aiuto dato che è la versione <1.1 di origine ma: goToSleep chiama goToSleep in PowerManagerService quindi goToSleepLocked . poi SetPowerState E c'è questo commento in SetPowerState:. // Quando l'utente preme il pulsante di accensione, abbiamo bisogno di inviare sempre la notifica // che sta andando a dormire così il blocco della tastiera va avanti Ma // siamo non posso farlo finché lo schermo non svanisce, quindi non lo facciamo t mostrare il blocco tastiera // troppo presto. – JRL

+0

E in LockPatternKeyguardView c'è una chiamata a ScreenLock nel modo seguente: View createLockScreen() {return new LockScreen ( mContext, mLockPatternUtils, mUpdateMonitor, mKeyguardScreenCallback); } – JRL

Problemi correlati