標籤:
1. 建立一個廣播,這個擷取許可權是一個廣播操作
<receiver android:name=".activity.DeviceAdminSample" android:label="@string/sample_device_admin" android:description="@string/sample_device_admin_description" android:permission="android.permission.BIND_DEVICE_ADMIN"> <meta-data android:name="android.app.device_admin" android:resource="@xml/device_admin_sample" /> //這個xml檔案是規定了這個超級許可權包含哪些內容,這裡需要再建立的一個xml檔案夾下面去定義 <intent-filter> <action android:name="android.app.action.DEVICE_ADMIN_ENABLED" /> </intent-filter> </receiver>
然後是定義那個 @xml/device_admin_sample檔案
<device-admin xmlns:android="http://schemas.android.com/apk/res/android"> <uses-policies> <limit-password /> <watch-login /> <reset-password /> <force-lock /> <wipe-data /> <expire-password /> <encrypted-storage /> <disable-camera /> </uses-policies></device-admin>
前面的檔案定義好了,下面這個DeviceAdminSample是繼承自一個系統定義的一個廣播類 DeviceAdminReceiver,通過這個廣播來擷取超級許可權
public class DeviceAdminSample extends DeviceAdminReceiver{ void showToast(Context context, String msg) { String status = context.getString(R.string.admin_receiver_status, msg); Toast.makeText(context, status, Toast.LENGTH_SHORT).show(); } @Override public void onEnabled(Context context, Intent intent) { showToast(context, context.getString(R.string.admin_receiver_status_enabled)); } @Override public CharSequence onDisableRequested(Context context, Intent intent) { return context.getString(R.string.admin_receiver_status_disable_warning); } @Override public void onDisabled(Context context, Intent intent) { showToast(context, context.getString(R.string.admin_receiver_status_disabled)); } @Override public void onPasswordChanged(Context context, Intent intent) { showToast(context, context.getString(R.string.admin_receiver_status_pw_changed)); }}
擷取許可權的代碼,通過開啟一個 Intent 對象,這個對象通過系統的 DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN 意圖,開啟擷取系統許可權那個介面讓使用者確定是否授予這些許可權
public void activeSuperuser(View view) {
ComponentName mDeviceAdminSample = new ComponentName(this, DeviceAdminSample.class); // 那個DeviceAdminSample就是前面我們定義的廣播類
Intent intent = new Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN); intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN, mDeviceAdminSample); // mDeviceAdminSample是 intent.putExtra(DevicePolicyManager.EXTRA_ADD_EXPLANATION, R.string.add_admin_extra_app_text); startActivityForResult(intent, REQUEST_CODE_ENABLE_ADMIN); // 開啟授予許可權的那個activity }
接下來就是在擷取許可權之後通過 DevicePolicyManager來具體操作那些需要許可權的操作了
DevicePolicyManager dpm = (DevicePolicyManager) getSystemService(DEVICE_POLICY_SERVICE); // 擷取系統服務
if(dpm.isAdminActive(mDeviceAdminSample)){ // 判斷是否已經擷取了超級許可權
dpm.lockNow(); // 鎖屏
}
android擷取超級許可權