一键锁屏,激活设备管理器,卸载应用,清除数据

 开发一个设备管理器

参考文档:http://wear.techbrood.com/guide/topics/admin/device-admin.html

一键锁屏,激活设备管理器,卸载应用,清除数据_第1张图片

一键锁屏 & 激活设备管理器功能:

AdminReceiver.java
package com.example.lockscreen;

import android.app.admin.DeviceAdminReceiver;

public class AdminReceiver extends DeviceAdminReceiver {


}
在清单文件中配置:
 
            

            
                
            
        
res/values/strings.xml



    一键锁屏
    Settings
    Hello world!
    设备管理描述
    设备管理

res/xml/device_admin_sample.xml



    
        

        

        

        

        

        

        

        
    

activity_main.xml


    
MainActivity.java
package com.example.lockscreen;

import android.app.Activity;
import android.app.admin.DevicePolicyManager;
import android.content.Context;
import android.os.Bundle;
import android.view.View;

public class MainActivity extends Activity {

	private DevicePolicyManager mDPM;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		mDPM = (DevicePolicyManager) getSystemService(Context.DEVICE_POLICY_SERVICE);//获取设备策略服务
	}
	public void lockScreen(View view){
		mDPM.lockNow();//立即锁屏
	}

}
运行程序,发现程序崩溃了,报错信息如下:
Caused by: java.lang.SecurityException: No active admin owned by uid 10047 for policy #3
安全异常,没有激活设备管理器。
解决这种方法,有两种:
第一种,在真机或者模拟器中手机激活:
设置-->安全-->设备管理器-->点击设备管理,进行激活。
然后运行程序,成功实现了一键锁屏功能。但是这种方法不推荐,因为用户有可能不知道怎么激活设备管理器,这样的话,用户的体验效果不好。
第二种,通过代码实现:
activity_main.xml


    
MainActivity.java
package com.example.lockscreen;

import android.app.Activity;
import android.app.admin.DevicePolicyManager;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Toast;

public class MainActivity extends Activity {

	private DevicePolicyManager mDPM;
	private ComponentName mDeviceAdminSample;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		mDPM = (DevicePolicyManager) getSystemService(Context.DEVICE_POLICY_SERVICE);// 获取设备策略服务
		mDeviceAdminSample = new ComponentName(this, AdminReceiver.class);
	}

	/** 激活设备管理器 */
	public void activeAdmin(View view) {
		Intent intent = new Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN);
		intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN,
				mDeviceAdminSample);
		intent.putExtra(DevicePolicyManager.EXTRA_ADD_EXPLANATION,
				"我们有了超级设备管理器,好NB");
		startActivity(intent);
	}
	/** 一键锁屏 */
	public void lockScreen(View view) {
		if(mDPM.isAdminActive(mDeviceAdminSample)){
			//判断设备管理器是否已经激活
			mDPM.lockNow();//立即锁屏
			mDPM.resetPassword("123456", 0);//设置密码
		}else{
			Toast.makeText(this, "必须先激活设备管理器!", 0).show();
		}
	}
}
运行效果图:
一键锁屏,激活设备管理器,卸载应用,清除数据_第2张图片
虽然实现了一键锁屏的功能,但是用户如果不想再用这个app了,想要卸载的时候(在用户管理器已经激活的情况下),却出现了这种情况,卸载不了。
一键锁屏,激活设备管理器,卸载应用,清除数据_第3张图片
卸载这种应用的方法,也有两种:
方法一:取消设备管理器的激活
方法二:用代码实现

卸载应用

参考源码:
一键锁屏,激活设备管理器,卸载应用,清除数据_第4张图片
activity_main.xml
 
MainActivity.java
	/**卸载应用*/
	public void unInstall(View view){
		mDPM.removeActiveAdmin(mDeviceAdminSample);//取消激活
		//卸载程序
		Intent intent = new Intent();
		intent.setAction(Intent.ACTION_VIEW);
		intent.addCategory(Intent.CATEGORY_DEFAULT);
		intent.setData(Uri.parse("package:"+getPackageName()));
		startActivity(intent);
	}

清除数据

MainActivity.java
/**清除数据*/
	public void clearData(View view){
		if(mDPM.isAdminActive(mDeviceAdminSample)){//判断设备管理器是否已经激活
			mDPM.wipeData(0);//清除数据,恢复出厂设置
		}else{
			Toast.makeText(this, "必须先激活设备管理器!", 0).show();
		}
	}

你可能感兴趣的:(Android基础学习)