2011-12-09 37 views
12

Tôi muốn gửi thiết bị ở chế độ ngủ hoặc tắt màn hình. Tôi đã điều tra và tìm thấy chủ đề này: Turn off screen on AndroidCách tắt màn hình hoặc gửi thiết bị về chế độ ngủ

Về cơ bản, có ba cách để làm điều đó, nhưng tôi đã tìm thấy vấn đề cho ba:

a) Lựa chọn 1:

PowerManager manager = (PowerManager) getSystemService(Context.POWER_SERVICE); 
manager.goToSleep(int amountOfTime); 

Vấn đề : Nó gây ra FC. Tôi đã đọc Tôi cần quyền truy cập DEVICE_POWER nhưng không thể cấp cho các ứng dụng thông thường.

b) Lựa chọn 2:

PowerManager manager = (PowerManager) getSystemService(Context.POWER_SERVICE); 
PowerManager.WakeLock wl = manager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "Your Tag"); 
wl.acquire(); 
wl.release(); 

Vấn đề: này không làm việc cho tôi. Tôi không biết tại sao. Nó không cho tôi một FC, nhưng nó vô hại.

c) Lựa chọn 3:

WindowManager.LayoutParams params = getWindow().getAttributes(); 
params.flags |= LayoutParams.FLAG_KEEP_SCREEN_ON; 
params.screenBrightness = 0; 
getWindow().setAttributes(params); 

Vấn đề: tôi có thể lấy nó để làm việc nhưng khi cố gắng để bật điện thoại nó những điều kỳ lạ, giống như không muốn trở về, hoặc nếu ứng dụng của tôi ở phía trước, tự động chuyển sang chế độ ngủ ngay sau khi nhấn nút. Điều này trông giống như một mẹo hoặc giải pháp thay vì giải pháp thông thường.

Bất cứ ai có thể cho tôi biết bất kỳ phương pháp hay nào để gửi thiết bị về chế độ ngủ hoặc tắt màn hình có thể chạy mà không có sự cố? Nghe có vẻ hiếm hoi với tôi rằng một chức năng đơn giản như thế này không phải là một cách hay để sử dụng nó (hoặc vì không được tài liệu rõ ràng)

Trả lời

7

Tôi tự trả lời. Có thể tắt thiết bị nhưng ứng dụng phải triển khai tính năng quản trị viên thiết bị qua API: Device Administration

Trong API này có chức năng làm những gì tôi muốn.

Dù sao, đây là để mở rộng các tính năng bảo mật và phần cứng của Android và rất khó có ai muốn điều khiển thiết bị theo cách đó.

Điều tôi muốn là khả năng khóa thiết bị từ một cử chỉ đơn giản. Vì tôi không muốn tạo lớp quản lý thiết bị của riêng mình nên hãy kiểm tra xem ứng dụng miễn phí "lockScreen" đã được cài đặt và khởi chạy nó chưa. Đó là một phím tắt và một cách dễ dàng để làm những gì tôi muốn. Ứng dụng này phải đăng ký làm trình quản lý thiết bị để ứng dụng này đã triển khai lớp này. Nó có thể để có được nó miễn phí từ thị trường.

+0

gì nếu tôi muốn nó tắt màn hình và không khóa cho đến khi thời gian khóa màn hình của tôi ra? –

0

Ứng dụng của tôi đã làm tốt điều này, tôi thấy điều này trong tôi PowerManager.class

/** 
* Force the device to go to sleep. Overrides all the wake locks that are 
* held. 
* 
* @param time is used to order this correctly with the wake lock calls. 
*   The time should be in the {@link SystemClock#uptimeMillis 
*   SystemClock.uptimeMillis()} time base. 
*/ 
public void goToSleep(long time) 
{ 
    try { 
     mService.goToSleep(time); 
    } catch (RemoteException e) { 
    } 
} 
+0

Bạn có chắc là bạn không vừa mới bắt được việc triển khai lớp PowerManager của API? Tôi không sử dụng phương pháp này vì tôi không thể nhận được các quyền nessesary. –

+1

Điều gì về quyền 'DEVICE_POWER'? –

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