Sau khi không có thứ tự với điều này trong một thời gian, tôi đã phát hiện ra rằng cách tốt nhất để làm điều này là để đăng ký một BroadcastReceiver vào "android.intent.action.USER_PRESENT " hoạt động.
"Hành động phát sóng: Đã gửi khi người dùng có mặt sau khi thiết bị tỉnh dậy (ví dụ: khi bảo vệ phím tắt)."
Để phân biệt giữa các trường hợp người dùng đã bật màn hình của mình khi nó không bị khóa khi thực sự mở khóa, hãy sử dụng KeyguardManager để kiểm tra cài đặt bảo mật.
Mã dụ:
Thêm phần này vào hoạt động của bạn:
registerReceiver(new PhoneUnlockedReceiver(), new IntentFilter("android.intent.action.USER_PRESENT"));
Sau đó sử dụng lớp này:
public class PhoneUnlockedReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
KeyguardManager keyguardManager = (KeyguardManager)context.getSystemService(Context.KEYGUARD_SERVICE);
if (keyguardManager.isKeyguardSecure()) {
//phone was unlocked, do stuff here
}
}
}
Nguồn
2015-02-24 11:45:24
Nhưng tính năng này có hoạt động trên tất cả các điện thoại không? Ví dụ, trên myTouch nhấn nút Menu mở khóa điện thoại, một số điện thoại khác yêu cầu bạn phải trượt qua điện thoại. Vì vậy, có cái gì đó có thể bắt tất cả? – Chris
Tôi tin như vậy - ACTION_MAIN với danh mục CATEGORY_HOME chắc chắn được gọi để chạy màn hình chính (tức là trình khởi chạy). Có rất nhiều điện thoại Android, tuy nhiên, vì vậy tôi không thể chắc chắn 100%.Tốt hơn cho nó một thử và xem nếu nó làm việc cho bạn. – adamk
Tôi đoán tôi quên đề cập đến việc tôi đang chạy một hoạt động và trong khi đang chạy, tôi muốn khóa/mở khóa màn hình và tiếp tục hoạt động khi đã mở khóa. Việc chờ ACTION_MAIN và CATEGORY_HOME chỉ đóng băng hoạt động của tôi khi mở khóa. – Chris