全源码教你一键锁屏

人无聊的时候总是喜欢研究点小玩意,所以就敲了个一键锁屏的Demo。下面直接上代码:

1.在MainAcitivty中的代码如下:

private DevicePolicyManager policyManager;
private ComponentName componentName;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    //获取设备管理服务
    policyManager = (DevicePolicyManager) getSystemService(Context.DEVICE_POLICY_SERVICE);

    //AdminReceiver 继承自 DeviceAdminReceiver
    componentName = new ComponentName(this, AdminReceiver.class);

    mylock();
    //  killMyself ,锁屏之后就立即kill掉我们的Activity,避免资源的浪费;
    android.os.Process.killProcess(android.os.Process.myPid());
}

private void mylock(){

    boolean active = policyManager.isAdminActive(componentName);
    if(!active){//若无权限
        activeManage();//去获得权限
        policyManager.lockNow();//并锁屏
    }
    if (active) {
        policyManager.lockNow();//直接锁屏
    }
}

private void activeManage() {
    // 启动设备管理(隐式Intent) - AndroidManifest.xml中设定相应过滤器
    Intent intent = new Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN);

    //权限列表
    intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN, componentName);

    //描述(additional explanation)
    intent.putExtra(DevicePolicyManager.EXTRA_ADD_EXPLANATION, "------ 其他描述 ------");

    startActivityForResult(intent, 0);
}

2.继承DeviceAdminReceiver,只需要继承,不需要写任何代码。

public class AdminReceiver extends DeviceAdminReceiver{ }

3.注册广播

<application
    android:icon="@mipmap/ss"
    android:label="@string/app_name">
    <activity android:name=".MainActivity"
              android:label="@string/app_name"
              android:theme="@style/Theme.AppCompat.Light.NoActionBar"
                >
        <intent-filter>
            <action android:name="android.intent.action.MAIN"/>

            <category android:name="android.intent.category.LAUNCHER"/>
        </intent-filter>
    </activity>

    <!-- 设备管理 -->
    <receiver android:name=".AdminReceiver"
              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>
</application>

4.在res目录下创建xml文件夹,在xml文件夹下创建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>

好了,大功告成了。

猜你喜欢

转载自blog.csdn.net/sxk874890728/article/details/75370971