实现效果:一键锁屏
点击一个button 触发类似于按power键一样,使手机屏幕暗下,再次点击power显示系统锁屏界面。
实现:
一:启动设备管理权限
创建 AdminReceiver 的广播接受者 继承 DeviceAdminReceiver 申请系统管理员的权限,让操作系统给广播接收者授权
public class AdminReceiver extends DeviceAdminReceiver {
@Override
public DevicePolicyManager getManager(Context context) {
return super.getManager(context);
}
@Override
public ComponentName getWho(Context context) {
return super.getWho(context);
}
/**
* 禁用
*/
@Override
public void onDisabled(Context context, Intent intent) {
Toast.makeText(context, "禁用设备管理", Toast.LENGTH_SHORT).show();
super.onDisabled(context, intent);
}
@Override
public CharSequence onDisableRequested(Context context, Intent intent) {
return super.onDisableRequested(context, intent);
}
/**
* 激活
*/
@Override
public void onEnabled(Context context, Intent intent) {
Toast.makeText(context, "启动设备管理", Toast.LENGTH_SHORT).show();
super.onEnabled(context, intent);
}
@Override
public void onPasswordChanged(Context context, Intent intent) {
super.onPasswordChanged(context, intent);
}
@Override
public void onPasswordFailed(Context context, Intent intent) {
super.onPasswordFailed(context, intent);
}
@Override
public void onPasswordSucceeded(Context context, Intent intent) {
super.onPasswordSucceeded(context, intent);
}
@Override
public void onReceive(Context context, Intent intent) {
super.onReceive(context, intent);
}
@Override
public IBinder peekService(Context myContext, Intent service) {
return super.peekService(myContext, service);
}
}
二:调用DevicePolicyManager的lockNow()方法 实现锁屏
public class DevicePolicyManagerDemoActivity extends Activity {
private Button sysLockBtn;
private DevicePolicyManager dpm;
private ComponentName componentName ;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main); //main.xml 布局文件就一个button此处就不用列出了
//初始化
init();
}
/**
* 初始化实现
*/
private void init(){
//资源声明定位
sysLockBtn = (Button)findViewById(R.id.button3);
sysLockBtn.setOnClickListener(listener);
//取得系统服务
dpm = (DevicePolicyManager)getSystemService(Context.DEVICE_POLICY_SERVICE);
componentName = new ComponentName(this, AdminReceiver.class);
}
private OnClickListener listener = new OnClickListener() {
@Override
public void onClick(View v) {
//启动设备管理权限
startDeviceManager();
//调用系统锁
sysLock(); }
};
/**
* 启动设备管理权限
*/
private void startDeviceManager(){
//添加一个隐式意图,完成设备权限的添加
//这个Intent (DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN)跳转到 权限提醒页面
//并传递了两个参数EXTRA_DEVICE_ADMIN 、 EXTRA_ADD_EXPLANATION
Intent intent = new Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN);
//权限列表
//EXTRA_DEVICE_ADMIN参数中说明了用到哪些权限,
intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN, componentName); //如果不需要给客户显示激活设备权限的提示,直接获取设备管理权限,此处可 //以注掉
startActivityForResult(intent, 0);
}
/**
* 调用系统锁方法实现
*/
private void sysLock(){
boolean active = dpm.isAdminActive(componentName); //如果不需要给客户显示激活设备权限的提示,直接获取设备管理权限,此处可以不要此开关
if (active) {
dpm.lockNow();
}
}
}