Câu trả lời:
Một lựa chọn là sử dụng khóa đánh thức . Ví dụ từ các tài liệu:
PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.SCREEN_DIM_WAKE_LOCK, "My Tag");
wl.acquire();
// screen and CPU will stay awake during this section
wl.release();
Ngoài ra còn có một bảng trên trang này mô tả các loại wakelocks khác nhau.
Hãy lưu ý rằng một số thận trọng cần được thực hiện khi sử dụng khóa đánh thức. Đảm bảo rằng bạn luôn release()khóa khi bạn hoàn thành với nó (hoặc không ở phía trước). Nếu không, ứng dụng của bạn có khả năng gây hao pin nghiêm trọng và sử dụng CPU.
Tài liệu này cũng chứa một trang hữu ích mô tả các cách tiếp cận khác nhau để giữ cho thiết bị luôn hoạt động và khi nào bạn có thể chọn sử dụng một phương pháp. Nếu "ngăn không cho thiết bị đi ngủ" chỉ liên quan đến màn hình (và không giữ CPU hoạt động) thì khóa thức có lẽ là nhiều hơn bạn cần.
Bạn cũng cần chắc chắn rằng bạn đã đặt quyền WAKE_LOCK trong tệp kê khai của mình để sử dụng phương thức này.
Nếu bạn chỉ muốn ngăn chế độ ngủ trên một chế độ cụ thể View, chỉ cần gọi setKeepScreenOn(true)vào đó Viewhoặc đặt thuộc keepScreenOntính true. Điều này sẽ ngăn màn hình tắt trong khi Viewtrên màn hình. Không có sự cho phép đặc biệt cần thiết cho việc này.
setKeepScreenOn(true)sẽ chỉ có hiệu lực khi Viewnhìn thấy.
Tôi tìm thấy một giải pháp làm việc khác: thêm dòng sau vào ứng dụng của bạn trong sự kiện onCreate.
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
Dự án Cordova mẫu của tôi trông như thế này:
package com.apps.demo;
import android.os.Bundle;
import android.view.WindowManager;
import org.apache.cordova.*;
public class ScanManActivity extends DroidGap {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
super.loadUrl("http://stackoverflow.com");
}
}
Sau đó, ứng dụng của tôi sẽ không đi ngủ trong khi nó được mở. Cảm ơn vì anwer đã đến xSus.
android:keepScreenOn="true" có thể là tùy chọn tốt hơn để có từ bố cục XML.
Thông tin thêm: https://developer.android.com/training/schedcing/wakelock.html
Đặt cờ trên Cửa sổ Hoạt động như bên dưới
@Override public void onResume() {
super.onResume();
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
}
@Override public void onPause() {
super.onPause();
getWindow().clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
}
Từ vỏ gốc (ví dụ vỏ adb), bạn có thể khóa bằng:
echo mylockname >/sys/power/wake_lock
Sau đó, thiết bị sẽ tỉnh táo, cho đến khi bạn làm:
echo mylockname >/sys/power/wake_unlock
Với cùng một chuỗi cho 'mylockname'.
Lưu ý rằng điều này sẽ không ngăn màn hình chuyển sang màu đen, nhưng nó sẽ ngăn CPU ngủ.
Lưu ý rằng / sys / power / Wake_lock là đọc-ghi cho radio người dùng (1001) và hệ thống nhóm (1000), và, tất nhiên, root.
Một tài liệu tham khảo có tại đây: http://lwn.net/Articles/479841/
Những gì @eldarerathis nói là chính xác về mọi mặt, khóa thức là cách giữ thiết bị không đi ngủ.
Tôi không biết ứng dụng của bạn cần phải làm gì nhưng điều thực sự quan trọng là bạn nghĩ về cách kiến trúc sư ứng dụng của bạn để bạn không buộc điện thoại phải thức nhiều hơn mà bạn cần, hoặc thời lượng pin sẽ bị ảnh hưởng rất lớn.
Tôi sẽ chỉ cho bạn ví dụ thực sự tốt này về cách sử dụngAlarmManager để kích hoạt các sự kiện và đánh thức điện thoại và (ứng dụng của bạn) để thực hiện những gì bạn cần làm và sau đó đi ngủ lại: Trình quản lý báo thức (nguồn: commonsware.com)