2009-04-09 25 views
9

Tôi phải kích hoạt khóa hệ thống của Android (khóa bạn nhận được khi bạn nhấn phím tắt tắt/treo lên). Xem ở đây:Android - Kích hoạt khóa hệ thống (còn gọi là màn hình khóa)

img

Tôi đã duyệt các tài liệu nhưng tất cả những gì tôi thấy được PowerManagerKeyguardManager. Cả hai dường như không phải là giải pháp :-(

Vì vậy, mọi người đều biết cách đạt được điều đó từ một ứng dụng Android không? ..)

EDIT: Hoặc không ai biết rằng đây chắc chắn là không thể thực hiện ở tất cả Btw Craigs giải pháp với việc gửi các phím không hoạt động nữa (xem ý kiến)

+1

Bạn cũng có thể thử nhảy trên IRC (freenode #android) và nói chuyện với các nhà phát triển chính mình –

Trả lời

2

Tôi đã tìm kiếm câu trả lời cho cùng một câu hỏi trong một thời gian. Rõ ràng, sau 2.0 trở đi, đặc quyền quản lý thiết bị cho cấp ứng dụng đã bị xóa. Nhưng với Froyo - 2.2 người quản lý chính sách thiết bị được tiết lộ cho phép các nhà phát triển vô số các điều khiển cấp quản trị.

http://developer.android.com/guide/topics/admin/device-admin.html

0

có một ví dụ khá tốt ở đây?.. :

http://www.anddev.org/throwing-simulating_keystrokes_programatically-t717.html

Có vẻ như bạn có thể lập trình bất kỳ phím tắt nào được gửi đến hệ thống. Nghe có vẻ như mã phím bạn đang tìm kiếm là KEYCODE_ENDCALL, nhưng nếu điều đó không làm việc có rất nhiều mã khác để thử ở đây:

http://developer.android.com/reference/android/view/KeyEvent.html

Tôi không biết nếu có bất kỳ cuộc gọi API để gây ra khóa xảy ra, nhưng điều này có vẻ như một giải pháp khá vững chắc cho đến khi bạn tìm thấy một giải pháp tốt hơn.

+2

phương pháp này không còn có sẵn, nó đã được gỡ bỏ cho vấn đề an ninh. – sooniln

+0

Xin lỗi, bạn có biết bất kỳ giải pháp nào khác không? –

+0

Hmm, Android 1.0/1.5 sắp tới là nền tảng mục tiêu, vì vậy sẽ không hoạt động :-( –

0

Đào qua nguồn Android tìm thấy WindowManagerService dường như có phương thức công khai (startAppFreezingScreenLocked) để kích hoạt tính năng này. Đây có thể là một nơi tốt để bắt đầu tìm kiếm câu trả lời của bạn, vì tiếc là nó không có vẻ như là bạn có thể trực tiếp có được một đối tượng WindowManagerService.

1

Điều bạn đang tìm kiếm là phương pháp reenableKeyguard() trong KeyguardManager.KeyguardLock bạn của tôi!

+0

Bạn đã thử điều đó chưa? Màn hình khóa như bạn có thể thấy ở trên thực sự xuất hiện? Tôi đã thử điều đó và nó đã khóa bàn phím nhưng nó không phải là khóa phím hệ thống ... –

+0

Ah, có thể đã hiểu lầm câu hỏi của bạn ở đây.Đây có phải là về việc hiển thị SCREEN hoặc kích hoạt khóa hệ thống không? – sthg

+0

sthg, cả hai :-). Tôi chỉ muốn kích hoạt khóa phím hệ thống bình thường. Bản thân màn hình là một phần của khóa phím đó. Nếu người dùng kích hoạt một mã (hoặc một dạng mở khóa), anh ta sẽ được hỏi về mã/mẫu đó. Chỉ cần khóa bàn phím là không đủ :-( –

1

Hình như chức năng khóa màn hình được thực hiện bằng phương pháp:

public void goToSleep(long time) 

phương pháp trong PowerManager.java. Nó có thể làm cho một tham chiếu đến nó theo cách này:

PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE); 

Tuy nhiên điều này đòi hỏi sự cho phép

android.permission.DEVICE_POWER 

mà là một mức độ 2 cho phép có sẵn để chỉ hệ thống.

Vì vậy, có vẻ như điều này không thể thực hiện được. Điều này chỉ dành cho phiên bản 1.1, tôi không biết 1.5.

+0

hmm, điều đó thật tệ.Trong thực tế, tôi nghĩ rằng điều đó thậm chí sẽ không đủ, bởi vì tôi thực sự cần khóa hệ thống như bạn có thể thấy trong ảnh chụp màn hình ở trên. được đề cập trong tài liệu PowerManager ... Nó chỉ nói rằng thiết bị sẽ đi ngủ nhưng không phải là khóa hệ thống được kích hoạt –

+1

Không chắc chắn nó sẽ giúp vì nó là phiên bản <1.1 nguồn nhưng: goToSleep cuộc gọi goToSleep trong PowerManagerService sau đó goToSleepLocked Và sau đó là bình luận này trong setPowerState: // Khi người dùng nhấn nút nguồn, chúng ta cần luôn gửi thông báo // rằng nó sẽ chuyển sang chế độ ngủ để bàn phím bảo vệ tiếp tục. Nhưng // chúng tôi không thể làm điều đó cho đến khi màn hình biến mất, vì vậy chúng tôi không ' t hiển thị phím bảo vệ // quá sớm. – JRL

+0

Và trong LockPatternKeyguardView có một cuộc gọi đến ScreenLock trong thời trang sau: Xem createLockScreen() { trở LockScreen mới ( mContext, mLockPatternUtils, mUpdateMonitor, mKeyguardScreenCallback); } – JRL

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