添加當前程序到設備管理列表裏

1、權限配置

詳細請參考Device Administration以及DeviceAdminReceiver的相關文檔
根據sdk文檔,說明,先創建Androidmanifest.xml,它必須包含如下信息

  1. 子類(繼承自DeviceAdminReceiver)需要包含以下兩點:

    • 必須擁有BIND_DEVICE_ADMIN
    • 能處理ACTION_DEVICE_ADMIN_ENABLED的intent請求,並在xml中聲明爲一個intent
  2. 在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();;
        }
    }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章