2012-01-25 35 views
13

Đối với ứng dụng của tôi, tôi cần biết rằng màn hình đã bị khóa. Làm thế nào để kiểm tra điều này là có vấn đề. Tôi đã sử dụng cờ sau:Cách tìm màn hình bị khóa trong android

if(WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON != 0){ 
    // some code 
}else if((WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED)!= 0){ 
    // some code 
} 

Nhưng điều này luôn luôn thực hiện cả phần và nếu khác ... cờ nào tôi phải sử dụng để kiểm tra màn hình có bị khóa hay không?

+0

Xem sau liên kết [http://stackoverflow.com/questions/3170563/android-detect-phone-lock-event][1] [http://stackoverflow.com/questions/8317331/detecting-when-screen-is-locked][2] [http://stackoverflow.com/questions/3446202/android-detect- phone-unlock-event-not-screen-on] [3] [1]: http: // stackoverflow.com/questions/3170563/android-detect-phone-lock-event [2]: http://stackoverflow.com/questions/8317331/detecting-when-screen-is-locked [3]: http: //stackoverflow.com/questions/3446202/android-detect-phone-unlock-event-not-screen-on – Shruti

+5

cách nó sẽ thực hiện cả nếu và nếu không? –

+0

http://stackoverflow.com/questions/8968265/android-auto-logout-when-app-goes-to-background/8968763#8968763 –

Trả lời

1

Đăng ký bộ thu phát sóng với hành động android.intent.action.ACTION_SCREEN_OFF và viết mã của bạn trong phương thức nhận onReceive().

Nếu bạn đang sử dụng một hoạt động, onPause() sẽ được gọi khi màn hình bị khóa và onResume() sẽ được gọi khi màn hình mở khóa.

Trong mã của bạn, bạn đang kiểm tra một số cờ, tôi không biết bạn sẽ kiểm tra ở đâu? là nó liên tục xác minh? Nếu bạn đang sử dụng một hoạt động trong ứng dụng của mình, quy trình trên sẽ xảy ra, chỉ cần kiểm tra nó trong trang web Nhà phát triển Android.

+0

@Babu: Cảm ơn rất nhiều câu trả lời của bạn. Tôi sẽ thử :) – Prasad

0

Có ý định phát sóng cho khóa màn hình & mở khóa.

Check nó thích:

if (intent.getAction().equals(Intent.ACTION_SCREEN_OFF)){//LOGIC Here} 

Hãy cho tôi biết!

+0

các điều kiện trên nên được kiểm tra trong Braodcast nhận? – Prasad

+0

: Tôi đã sử dụng những thứ giống nhau nhưng Không hoạt động: ( – Prasad

22

Tôi sẽ cố gắng trả lời câu hỏi này mặc dù câu hỏi đã cũ vì nó chưa được giải quyết và có thể giúp những người chơi khác. ;)

Trước tiên, bạn phải đăng ký BroadcastReceiver cho Intent.ACTION_SCREEN_OFF & Intent.ACTION_SCREEN_ON. Lưu ý rằng người nhận này phải được đăng ký bằng mã và sẽ không hoạt động khi được khai báo trong tệp kê khai.

Trong máy thu phát sóng của bạn, khi bạn nhận Intent.ACTION_SCREEN_ON, bạn có thể kiểm tra xem màn hình bị khóa bằng mã số dưới đây:

KeyguardManager km = (KeyguardManager) getSystemService(Context.KEYGUARD_SERVICE); 
boolean locked = km.inKeyguardRestrictedInputMode(); 
+1

liên kết dưới đây có vẻ như không cần BroadcastReceiver http://stackoverflow.com/a/8668648/401403 – Arash

0

Dưới đây là những gì tôi đã làm:

này xử lý nếu người dùng đã mở khóa màn hình nhưng chưa nhập màn hình chính hoặc màn hình của người dùng bị tắt trong khi gọi.

  if (Intent.ACTION_SCREEN_ON.equals(pIntent.getAction()) || 
        Intent.ACTION_USER_PRESENT.equals(pIntent.getAction())) { 
       if(mListener!=null) { 
        KeyguardManager km = (KeyguardManager) context.getSystemService(Context.KEYGUARD_SERVICE); 
        boolean locked = km.inKeyguardRestrictedInputMode(); 
        Log.v(TAG, ": Phone lock state from KEYGUARD_SERVICE: Current state:" + (locked ? "LOCKED":"UNLOCKED")); 
        mIsPhoneLocked = locked; 
       } 
      } 
1

Tôi đoán bạn có thể đã tìm thấy câu trả lời, nhưng nếu không (và cho các nhà phát triển khác), bạn có thể làm điều đó như thế này:

   PowerManager powerManager = (PowerManager) getSystemService(POWER_SERVICE); 
       boolean isScreenOn = powerManager.isScreenOn(); 

if (!isScreenOn) { 
      //Screen is in OFF State 
      //Code to power on and release lock 



       KeyguardManager km = (KeyguardManager) this 
       .getSystemService(Context.KEYGUARD_SERVICE); 
       final KeyguardManager.KeyguardLock kl = km 
       .newKeyguardLock("MyKeyguardLock"); 
       kl.disableKeyguard(); 

       PowerManager pm = (PowerManager) this 
       .getSystemService(Context.POWER_SERVICE); 
       WakeLock wakeLock = pm.newWakeLock(PowerManager.FULL_WAKE_LOCK 
       | PowerManager.ACQUIRE_CAUSES_WAKEUP 
       | PowerManager.ON_AFTER_RELEASE, "MyWakeLock"); 
       wakeLock.acquire(); 
} 
3
KeyguardManager myKeyManager = (KeyguardManager)getSystemService(Context.KEYGUARD_SERVICE); 

if(myKeyManager.inKeyguardRestrictedInputMode()) { 

//screen is locked 

} else { 

//screen is not locked 

} 
Các vấn đề liên quan