Yeh Sau khi Marshmallow đến với Android làm cho mức độ bảo mật chặt chẽ hơn, Nhưng Đối với
SYSTEM_ALERT_WINDOW
bạn có thể hiển thị hành động nổi và bất cứ thứ gì Bạn có thể Buộc người dùng cấp quyền cho nó bằng cách theo dõi các mã trong onCreate()
phương thức của bạn Đặt mã này sau setContentView
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
Intent myIntent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION);
startActivity(myIntent);
}
Hành động ACTION_MANAGE_OVERLAY_PERMISSION
trực tiếp khởi chạy màn hình quyền 'Vẽ qua các ứng dụng khác'.
Chỉnh sửa: Mã trên của tôi hoạt động đúng 100%
Nhưng tôi chỉ thấy rằng nhiều người vẫn đang tìm kiếm rằng làm thế nào có thể cho phép ACTION_MANAGE_OVERLAY_PERMISSION
vĩnh viễn như Nếu người dùng đã cho phép Quyền một lần thì đừng hỏi nó mỗi khi anh ta mở ứng dụng, hãy nghe giải pháp cho bạn-
Kiểm tra xem thiết bị có API 23+ hay không
nếu 23+ API thì hãy kiểm tra xem người dùng có giấy phép hay không
nếu có giấy phép một lần đừng lái xe anh ta đến Settings.ACTION_MANAGE_OVERLAY_PERMISSION
và nếu chưa được phép thì hãy yêu cầu kiểm tra quyền thời gian chạy
Đặt dòng dưới đây trong onCreate()
phương pháp của bạn . Đặt cái này sausetContentView
checkPermission();
Bây giờ hãy đặt mã bên dưới vào onActivityResult
@TargetApi(Build.VERSION_CODES.M)
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == ACTION_MANAGE_OVERLAY_PERMISSION_REQUEST_CODE) {
if (!Settings.canDrawOverlays(this)) {
checkPermission();
} else {
}
}
}
Bây giờ cuối cùng là mã phương thức checkPermission
public void checkPermission() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
if (!Settings.canDrawOverlays(this)) {
Intent intent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION,
Uri.parse("package:" + getPackageName()));
startActivityForResult(intent, ACTION_MANAGE_OVERLAY_PERMISSION_REQUEST_CODE);
}
}
}
Và đừng quên khai báo biến công khai này trong lớp của bạn
public static int ACTION_MANAGE_OVERLAY_PERMISSION_REQUEST_CODE = 5469;