2013-03-03 26 views
7

Vì vậy, trong một thời gian dài tôi nghĩ rằng tôi biết làm thế nào để ngăn chặn các màn hình từ đi vào chế độ ngủ, tôi chỉ đơn giản là sử dụng mã này trong Hoạt động của tôi:Giữ màn hình trên trong Hoạt động - không làm việc với FLAG_KEEP_SCREEN_ON

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

Tuy nhiên, tôi nhận ra rằng điều này chỉ hoạt động khi điện thoại của tôi ở chế độ "nhà phát triển", tức là khi gỡ lỗi usb (Cài đặt -> Tùy chọn nhà phát triển -> Gỡ lỗi USB) đã được bật/kiểm tra. Sau đó, các mã trên thực sự dừng màn hình/thiết bị để đi ngủ.

Khi gỡ lỗi đó không được chọn, sau đó màn hình của tôi chuyển sang chế độ ngủ như không có ngày mai. Tôi đang chạy Android 4.04 trên thiết bị của mình và

android:minSdkVersion="12" 
android:targetSdkVersion="16" 

Có ai biết về vấn đề này không?

EDIT

tôi đã thử nghiệm với Commonswares gợi ý, và thêm setKeepScreenOn() vào mã, vì vậy nó trông như thế này:

getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); 
View root = findViewById(android.R.id.content); 
if (root != null) 
    root.setKeepScreenOn(true); 

Tôi cũng đã kiểm tra để mã này là thực sự đã được thực thi, và đúng vậy. Nhưng nó không thay đổi một điều ...

+0

Hãy thử, nhưng dường như FLAG_KEEP_SCREEN_ON thậm chí có thể hoạt động nếu ứng dụng được "triển khai" qua Eclipse, nhưng * không * nếu tôi tải xuống chính mã giống như vậy từ Google Play. Và, tất cả mọi người "trên mạng" đều nói rằng FLAG_KEEP_SCREEN_ON hoạt động ... Tôi không thể là người duy nhất có vấn đề này? – Ted

+0

Vì tôi chưa bao giờ sử dụng 'FLAG_KEEP_SCREEN_ON' và chỉ sử dụng' setKeepScreenOn() '(vì nó đơn giản hơn), tôi không thể nhận xét về hiệu quả của mã' FLAG_KEEP_SCREEN_ON' của bạn. – CommonsWare

+0

Ok, nó cũng không hoạt động với setKeepScreenOn(). – Ted

Trả lời

1

Tôi đang đối mặt với cùng một vấn đề, tôi đang sử dụng một hoạt động cho dự án của mình và tất cả màn hình khác là các mảnh rồi sử dụng android:keepScreenOn="true" trong hoạt động chính.

hãy thử sử dụng điều này và cho tôi biết nếu bạn không nhận được kết quả mong muốn của mình.

Cảm ơn.

1

Chỉ có giải pháp thực sự hoạt động trong ứng dụng của tôi là WakeLock trong lớp ứng dụng chính. Rất tiếc, cờ SCREEN_BRIGHT_WAKE_LOCK không được dùng nữa!

public class MyApp extends Application { 
    PowerManager.WakeLock screenOnWakeLock; 
    @Override 
    public void onCreate() { 
     super.onCreate(); 
     PowerManager powerManager = (PowerManager) getSystemService(POWER_SERVICE); 
     wakeLock = powerManager.newWakeLock(PowerManager.SCREEN_BRIGHT_WAKE_LOCK,"ScreenlockTag"); 
     wakeLock.acquire(); 
    } 

    @Override 
    public void onTerminate() 
    { 
     if (screenOnWakeLock != null && screenOnWakeLock.isHeld()) 
      screenOnWakeLock.release(); 
     super.onTerminate(); 
    } 
} 
Các vấn đề liên quan