2009-04-09 20 views
9

mam do aktywacji systemu Android blokadę klucza (jeden można dostać po naciśnięciu off/moc powiesić przycisku). Zobacz tutaj:Android - Aktywacja zamka klucza systemowego (aka ekran blokady)

img

już przeglądałem dokumenty, ale wszystko znalazłem PowerManager i KeyguardManager. Oba wydają się nie być rozwiązaniem :-(.

Czy każdy wie, jak to osiągnąć z aplikacji na Androida? (Jeśli wymagane są specjalne uprawnienia, nie stanowi to problemu, ale zmiana ustawień urządzenia nie jest rozwiązaniem. ..)

EDIT: A może ktoś wie, że to na pewno nie jest w ogóle możliwe Btw craigs rozwiązanie z przycisków wysyłających już nie działa (patrz komentarze)

+1

Można również spróbować skacze na IRC (FreeNode #android) i mówić do wiodącego dewelopera sam –

Odpowiedz

2

Przez jakiś czas szukałem odpowiedzi na to samo pytanie. Wygląda na to, że po upływie 2 lat uprawnienia menedżera urządzeń dla poziomu aplikacji zostały usunięte. Ale z Froyo - 2.2 ujawniono menadżera polityki urządzeń, dając nam programistów mnóstwo kontroli na poziomie administracyjnym.

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

0

jest to całkiem dobry przykład tutaj?.. :

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

Wygląda na to, że programowo można przesłać dowolne naciśnięcie klawisza do systemu. To brzmi jak kodu klawisza, którego szukasz jest KEYCODE_ENDCALL, ale jeśli to nie zadziała istnieje wiele innych kodów spróbować tutaj:

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

Nie wiem, czy istnieje jakikolwiek wywołanie API aby spowodować blokadę, ale wydaje się to całkiem solidnym rozwiązaniem, dopóki nie znajdziesz lepszego rozwiązania.

+2

Metoda ta nie jest już dostępny, został usunięty za kwestie bezpieczeństwa. – sooniln

+0

Ah bummer, czy znasz jakieś inne rozwiązanie? –

+0

Hmm, Android 1.0/nadchodzące 1.5 są docelową platformą, więc to nie zadziała :-( –

0

Wyszukując źródło Androida, WindowManagerService, która wydaje się mieć publiczną metodę (startAppFreezingScreenLocked) do aktywacji tego. To może być dobre miejsce, aby zacząć szukać odpowiedzi, ponieważ niestety nie wydaje się, że można bezpośrednio uzyskać obiekt WindowManagerService.

1

To, czego szukasz, to metoda w KeyguardManager.KeyguardLock, przyjacielu!

+0

Czy próbowałeś? Czy ekran blokady, jak widać powyżej, naprawdę się pojawił? Próbowałem tego i zablokowałem klawiaturę ale to NIE było keylock systemowy ... –

+0

Ah, może źle zrozumiałeś swoje pytanie tutaj.Czy chodzi o wyświetlanie samego ekranu lub aktywację blokady klucza systemowego? – sthg

+0

sthg, oba :-). Chcę tylko aktywować normalną blokadę systemu. Sam ekran jest częścią tego keylocka. Jeśli użytkownik aktywował kod (lub wzór odblokowujący), powinien zostać zapytany o ten kod/wzorzec. Samo zablokowanie klawiatury to za mało :-( –

1

Wygląda funkcja blokady ekranu odbywa się za pomocą metody:

public void goToSleep(long time) 

metody w PowerManager.java. Jest to możliwe, aby uzyskać odwołanie do niego w ten sposób:

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

jednak wymaga to zgody

android.permission.DEVICE_POWER 

który jest pozwolenie poziom 2 dostępna tylko w systemie.

Wygląda na to, że nie można tego zrobić. Dotyczy tylko wersji 1.1, nie wiem o 1.5.

+0

hmm, to źle.Myślę, że to nawet nie wystarczy, ponieważ naprawdę potrzebuję blokady klucza systemowego, jak widać na powyższym zrzucie ekranu. Nic o tym ekranie jest wspomniany w dokumentach PowerManager ... Mówi tylko, że urządzenie przejdzie w stan uśpienia, ale nie, że aktywuje się blokada systemu. –

+1

Nie jestem pewien, czy to pomoże, ponieważ jest to wersja <1.1 source, ale: goToSleep wywołuje goToSleep w PowerManagerService, a następnie goToSleepLocked następnie setPowerState I jest ten komentarz w setPowerState: // Kiedy użytkownik naciśnie przycisk zasilania, musimy zawsze przesłać powiadomienie //, że będzie spać, więc blokada klawiatury będzie nadal działać, ale // my nie można tego zrobić, dopóki ekran nie zniknie, więc nie t pokaż klawiaturę // zbyt wcześnie. – JRL

+0

I LockPatternKeyguardView tam wezwanie do screena w następujący sposób: Zobacz createLockScreen() {return new lockscreen ( mContext, mLockPatternUtils, mUpdateMonitor, mKeyguardScreenCallback); } – JRL