1、權限配置
詳細請參考Device Administration以及DeviceAdminReceiver的相關文檔
根據sdk文檔,說明,先創建Androidmanifest.xml,它必須包含如下信息
子類(繼承自DeviceAdminReceiver)需要包含以下兩點:
- 必須擁有BIND_DEVICE_ADMIN
- 能處理ACTION_DEVICE_ADMIN_ENABLED的intent請求,並在xml中聲明爲一個intent
在metadata中進行安全聲明
下面是一個manifest例子
<receiver
android:name=".myDeviceAdminReceiver"
android:permission="android.permission.BIND_DEVICE_ADMIN" >
<meta-data
android:name="android.app.device_admin"
android:resource="@xml/device_admin_sample" />
<intent-filter>
<action android:name="android.app.action.DEVICE_ADMIN_ENABLED" />
</intent-filter>
</receiver>
a) meta-data項是必須的,還有權限以及intent-filter
b) android:resource對應的xml需要自己創建,並放在xml目錄下,xml目錄沒有自己創建,其內容如下:
<?xml version="1.0" encoding="utf-8"?>
<device-admin
xmlns:android="http://schemas.android.com/apk/res/android">
<uses-policies>
<force-lock />
</uses-policies>
</device-admin>
2、代碼部分,創建繼承子類MyDeviceAdminReceiver
public class myDeviceAdminReceiver extends DeviceAdminReceiver{
private static String TAG = "TestHello";
@Override
public void onEnabled(Context context, Intent intent) {
// TODO Auto-generated method stub
super.onEnabled(context, intent);
Toast.makeText(context, context.getResources().getString(R.string.device_admin_jihuo_success_tips), Toast.LENGTH_LONG).show();;
Log.i(TAG, "DeviceAdminReceiver::onEnabled");
}
@Override
public CharSequence onDisableRequested(Context context, Intent intent) {
// TODO Auto-generated method stub
//這裏如果返回的字符串不爲空,那麼當用戶去設置裏取消時,則會提示帶此文字的確定框
String strResult = "請不要取消,謝謝!!!";
Log.i(TAG, "DeviceAdminReceiver::onDisableRequested");
//return super.onDisableRequested(context, intent);
return strResult;
}
@Override
public void onDisabled(Context context, Intent intent) {
// TODO Auto-generated method stub
super.onDisabled(context, intent);
Log.i(TAG, "DeviceAdminReceiver::onDisable");
Toast.makeText(context, context.getResources().getString(R.string.device_admin_cancel_jihuo_tips), Toast.LENGTH_LONG).show();;
}
@Override
public void onReceive(Context context, Intent intent) {
// TODO Auto-generated method stub
super.onReceive(context, intent);
Log.i(TAG, "DeviceAdminReceiver::onReceive");
}
}
3、編寫添加進入設備的代碼
public void OpenDevicePolicyManager(Context context)
{
DevicePolicyManager dManager = (DevicePolicyManager) context.getSystemService("device_policy");//獲取manager對象
ComponentName localComponentName = new ComponentName(this, myDeviceAdminReceiver.class);
if (dManager != null &&
localComponentName != null &&
false == dManager.isAdminActive(localComponentName)) {
Intent localIntent = new Intent(dManager.ACTION_ADD_DEVICE_ADMIN);
localIntent.putExtra(dManager.EXTRA_DEVICE_ADMIN, localComponentName);
localIntent.putExtra(dManager.EXTRA_ADD_EXPLANATION,
context.getResources().getString(R.string.device_admin_explanation));
startActivityForResult(localIntent, ActivityResult);
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// TODO Auto-generated method stub
//用於判斷是否startActivity成功,需要xml中的配置權限才能設置成功
super.onActivityResult(requestCode, resultCode, data);
Log.i(TAG, "onActivityResult,resultCode:"+resultCode);
if (-1 == resultCode) {
Toast.makeText(this, this.getResources().getString(R.string.device_admin_jihuo_success_tips), Toast.LENGTH_LONG).show();;
}
else {
Toast.makeText(this, this.getResources().getString(R.string.device_admin_jihuo_failed_tips), Toast.LENGTH_LONG).show();;
}
}