Android自己动手实现一键锁屏
2016-10-31 本文已影响1109人
Devin_Lin
最近买了一款手机,每次锁屏都要按电源键,总担心着电源键按久了就会坏(手机用久了也就那回事),就在网上下了一键锁屏,用了几个下来全是万恶的广告,最后决定自己实现。
主类Activity
public class MainActivity extends Activity {
private DevicePolicyManager mDevicePolicyManager;
private ComponentName mComponentName;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//获取设备管理器
mDevicePolicyManager = (DevicePolicyManager)getSystemService(Context.DEVICE_POLICY_SERVICE);
mComponentName = new ComponentName(this, LockReceiver.class);
// 判断该组件是否有系统管理员的权限
if (mDevicePolicyManager.isAdminActive(mComponentName)) {
mDevicePolicyManager.lockNow(); //锁屏
} else {
activeManager(); //激活权限
}
//结束进程
android.os.Process.killProcess(android.os.Process.myPid());
}
/**
* 激活设备管理器获取权限
*/
private void activeManager() {
Intent intent = new Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN);
intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN, mComponentName);
intent.putExtra(DevicePolicyManager.EXTRA_ADD_EXPLANATION, "一键锁屏");
startActivity(intent);
}
}
设备管理器LockReceiver
继承DeviceAdminReceiver,用于接收激活/接触激活的广播,并进行下一步操作,这里只进行信息打印。
public class LockReceiver extends DeviceAdminReceiver {
private final static String TAG = LockReceiver.class.getSimpleName();
@Override public void onReceive(Context context, Intent intent) {
Log.i(TAG, "接收");
super.onReceive(context, intent);
}
@Override
public void onEnabled(Context context, Intent intent) {
Log.i(TAG, "激活");
super.onEnabled(context, intent);
}
@Override
public void onDisabled(Context context, Intent intent) {
Log.i(TAG, "取消");
super.onDisabled(context, intent);
}
}
清单文件
这里只贴出LockReceiver注册部分。其中lock_screen是设备管理器的权限声明,需要在res/xml目录下以xml文件形式定义。
AndroidManifest.xml
<!-- 设备管理 -->
<receiver android:name=".LockReceiver"
android:label="@string/app_name"
android:description="@string/app_name"
android:permission="android.permission.BIND_DEVICE_ADMIN">
<meta-data android:name="android.app.device_admin"
android:resource="@xml/lock_screen" />
<intent-filter>
<action
android:name="android.app.action.DEVICE_ADMIN_ENABLED" />
</intent-filter>
</receiver>
lock_screen.xml
<?xml version="1.0" encoding="UTF-8"?>
<device-admin xmlns:android="http://schemas.android.com/apk/res/android">
<uses-policies>
<!-- 强行锁定 在里仅这个是需要的-->
<force-lock />
<!-- 清除所有数据(恢复出厂设置) -->
<wipe-data />
<!-- 重置密码 -->
<reset-password />
<!-- 限制密码选择 -->
<limit-password />
<!-- 监控登录尝试 -->
<watch-login />
</uses-policies>
</device-admin>
这里一键锁屏只需要<force-lock/>即可,其他用于了解。
运行
当我们首次运行时,一般都会弹出页面进行权限设置,点击激活即可。
S61028-17271292.jpg卸载
由于运行程序时进行了权限激活,所以不能对程序直接卸载,需要先进入系统设置-->安全-->设备管理器,选中程序取消激活,然后再卸载程序。激活即可。