2010-11-20 1 views
8

브로드 캐스트 리시버가 screen_on에 의해 활성화 될 때 어떻게하면 키 가드를 비활성화 할 수 있습니까? 그러면 사용자가 내가 시작한 활동을 볼 수 있습니까? 나는 화면 오프에 의해 트리거 된 방송 수신기에서 다음 코드를 시도하고있다SCREEN_ON의 수신자가 트리거 될 때 Keyguard를 비활성화하고 사용자에게 활동을 표시하는 방법은 무엇입니까?

(활동은 ... 이미 실행중인)

KeyguardManager myKeyGuard = (KeyguardManager)getSystemService(Context.KEYGUARD_SERVICE); 
myLock = myKeyGuard.newKeyguardLock(); 
myLock.disableKeyguard(); 
그것은 같은 있지만 작동하지 않는 것

그 입니다. 화면을 켜면 전화기의 키 가드를 수동으로 열어 뒤에있는 활동을 표시해야합니다.

+0

이 외에도 exitKeyguardSecurely()를 사용하는 몇 가지 코드가 있습니다. 아직 작동하지 못해서 FLAG_DISMISS_KEYGUARD 플래그를 설정하고 있습니다. – Ryan

+0

Ryan, 코드 공유 가능합니까? 나도 같은 일을하고있다. – Manikandan

답변

1

내가 뭘 잘못했는지 알았어. disable_keyguard 권한을 사용할 때 내 매니페스트의 태그 오류 일 뿐인 것처럼 보입니다. 매니 페스트를 바로 잡았으니 제대로 작동하고 있습니다.

+0

이 권한을 추가해도 나에게 도움이되지 않습니다. 사용자가 잠금 해제 버튼을 누르면 내 활동을 실행해야합니다. 액티비티가 잠금 해제 화면보다 먼저 트리거되어야합니다. – Manikandan

5

wakeup 바로 잠금 화면 상단에 창이 있어야하는 경우 dismiss_keyguard 또는 show_when_locked 창 플래그를 사용하는 것이 좋습니다.

http://developer.android.com/reference/android/view/WindowManager.LayoutParams.html#FLAG_SHOW_WHEN_LOCKED

방법이 다음과 같이 (설정 레이아웃 전에서 onCreate에서 호출)입니다

getWindow().addFlags(WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD); 
+6

나는 이것이 오래된 게시물 인 것을 알고 있지만 깃발이 어디에 있든 관계없이 작동하지 않는다. 반면에 키 가드 매니저는 항상 작동하는 것처럼 보인다. 다른 독자를위한 주목할 점 – Idistic

+0

플래그를 사용하는 것이 '권장'솔루션이지만, 실제 사용에서는 완벽하지는 않습니다. 예를 들어 플래그가있는 상태에서 액티비티를 벗어나면 안드로이드가 키 가드를 잠깐 '깜박'시킵니다. 사소하지만 회귀. 키 가드를 완전히 비활성화해도 문제가 발생하지 않습니다. –

+0

액티비티는 전혀 투명하지 않을 수 있습니다. 또한 dialog.getWindow()를 사용하여 플래그를 설정할 수도 없습니다. 이것은 아마도 응용 프로그램이 다른 응용 프로그램의 활동을 부분적으로 '표시'하지 못하게하는 것입니다. https://code.google.com/p/android/issues/detail?id=8778에서이 문제를 참조하십시오. – aaronvargas

1

나는 키 가드 솔루션 작업을 확인할 수 없습니다 (그리고 사용되지 것)를 사용합니다. 나를 위해 일하는 것은 내가 풀어주지 않는 영구적 인 PARTIAL_WAKE_LOCK을 움켜 잡는 것입니다. 이렇게하면 장치가 실제로 잠들지 않게되어 활성화 될 때마다 잠금 화면이 나타나지 않습니다.

그런 다음 화면이 종료 될 때마다 해당 알림을 수신하고 장치를 다시 가동시킵니다. 그것은 내가 테스트 한 모든 장치에서 작동합니다.

나는 이것이 장치의 배터리를 꽤 빨리 죽일 것이라는 것을 깨달았습니다. 따라서이 것을 아주 조심스럽게 사용해야합니다.