Hi các bạn,
Mình viết tut này giới thiệu các bạn kiến thức mới, làm sao để một ứng dụng có thể sử dụng được chức năng của hệ thống, mà bình thường không được phép can thiệp? Như các bạn đã tìm hiểu trong cấu trúc của Android thì việc này chỉ có thể làm khi người dùng cho phép ứng dụng đó thực thi quyền admin đó.
Bài này mình sẽ hướng dẫn các bạn làm 1 ứng dụng có chức năng tương tự như app sau:
https://play.google.com/store/apps/d...reen.off&hl=vi
Mã:
Project name: ScreenLockDemo
Version: 1.0
Environment: Eclipse
Hướng giải quyết yêu cầu:
1: Tạo file .xml để đưa ra các quyền cần được active từ phía người dùng cho ứng dụng ( my_admin.xml)
2: Tạo 1 receiver để nhận phản hồi.
3: Code để thực thi sau khi nhận được quyền từ người dùng ( Lock Screen! [IMG]images/smilies/1.gif[/IMG] )
1: Tạo file .xml:
File my_admin.xml ( Tạo thư mục xml trong res và đặt file vào đó):
Mã:
<device-admin xmlns:android="http://schemas.android.com/apk/res/android" >
<uses-policies>
<force-lock />
</uses-policies>
</device-admin>
Trong file này chúng ta chỉ định rằng sẽ chỉ yêu cầu quyền lock máy.
2: Thêm vào trong file manifest receiver :
Mã:
<receiver
android:name=".ReceiverClass"
android:permission="android.permission.BIND_DEVICE_ADMIN" >
<meta-data
android:name="android.app.device_admin"
android:resource="@xml/my_admin" />
<intent-filter>
<action android:name="android.app.action.DEVICE_ADMIN_ENABLED" />
</intent-filter>
</receiver>
Ở trên .Receiver; }[/CODE]Ở đây đơn giản là không xử lý gì cả. [IMG]images/smilies/smile.png[/IMG]
3: Code chính thực thi:
Để biết được ứng dụng đã được request quyền admin ( cho chức năng mình cần ) chưa, các bạn sử dụng class : DevicePolicyManager để kiểm tra.
Mã:
devicePolicyManager = (DevicePolicyManager) getSystemService(Context.DEVICE_POLICY_SERVICE);if (!devicePolicyManager.isAdminActive(adminComponent)) { // Nếu chưa thì cần phải start màn hình yêu cầu user cấp quyền.Intent intent = new Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN); intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN, adminComponent); startActivityForResult(intent, REQUEST_ENABLE);}else{ // Nếu đã có quyền rồi thì // xử lý lock screen.}
Biến: adminComponent là instance của class ComponentName
Mã:
adminComponent = new ComponentName(getBaseContext(), ReceiverClass.class);
Vì rằng chúng ta đã khai báo 1 receiver trong Manifest của ứng dụng, vì thế đến đây chúng ta sẽ gọi nó.
Nhận về action từ user ( Đồng ý cấp quyền hay không cấp quyền cho ứng dụng )
Mã:
@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == REQUEST_ENABLE) { super.onActivityResult(requestCode, resultCode, data); } else { showToast("User do not accept!"); } }
Vậy là xong rồi, các bạn đã biết được cách mà 1 ứng dụng yêu cầu sử dụng quyền admin để thực hiện các tác vụ sâu của thiết bị.
Source code mình đính kèm.
Link tham khảo:
http://developer.android.com/guide/t...ice-admin.html
Đây là hình ảnh của em nó, very simple.
Chúc các bạn code vui vẻ!
View more random threads:
Pallet nhựa Long An đã trở thành một trong những lựa chọn phổ biến cho nhu cầu vận chuyển và lưu trữ hàng hóa trong nhiều ngành công nghiệp. Với đặc tính nhẹ nhàng, chắc chắn và dễ vận chuyển, các...
Thanh lý pallet nhựa Long An giá rẻ