功能:单击按钮实现锁屏功能,可以根据文档来:Administration->Device Policies

需要手动去打开管理员权限,否则会报安全异常的错误,不过也可以用代码打开管理员权限,但是会弹出激活提示,需要用户去激活

手动打开管理员权限的位置为:手机设置-->安全--> :下图勾选的文字为代码中写的

android 屏锁显示权限 锁屏权限管理在哪里找_android

   

android 屏锁显示权限 锁屏权限管理在哪里找_android_02

代码如下:

 主活动:

public class MainActivity extends Activity {
    /**
     * 设备策略管理者
     */
    private DevicePolicyManager deviceManager;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //得到管理者对象
        deviceManager=(DevicePolicyManager) getSystemService(DEVICE_POLICY_SERVICE);
    }
    /**
     * 按钮单击事件,实现代码打开管理员权限,会弹出界面需要用户点击激活
     */
    public void openAdmin(View v){
        //开启管理员权限
        Intent intent = new Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN);
        ComponentName mDeviceAdminSample=new ComponentName(this, MyPolicies.class);
        intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN, mDeviceAdminSample);
        intent.putExtra(DevicePolicyManager.EXTRA_ADD_EXPLANATION,"提示语,需要打开管理员权限实现一键锁屏");
        startActivity(intent);
    }
    
    /**
     *按钮单击事件,实现锁屏以及加密功能
     */
    public void lockscreen(View v){
        ComponentName mDeviceAdminSample=new ComponentName(this, MyPolicies.class);
        if(deviceManager.isAdminActive(mDeviceAdminSample)){//如果是管理员了
            deviceManager.lockNow();//一键锁屏,按返回就可以亮屏
            //加了这行代码,锁屏了解锁就需要密码了
            deviceManager.resetPassword("123", 0);//重置密码为123
            //deviceManager.resetPassword("", 0);//取消密码
            
            //清楚sddata上的数据
            //deviceManager.wipeData(DevicePolicyManager.WIPE_EXTERNAL_STORAGE);
            //恢复出厂设置
            //deviceManager.wipeData(0);
        }else{
            Toast.makeText(this, "管理员权限没有打开", 0).show();
        }
    }
    
    /**
     * 卸载当前软件的单击事件
     * 很不幸的是如果不写这个方法实现卸载程序,该应用就卸载不了了,毕竟得到了管理员权限
     */
    public void uninstall(View v){
        //取消该应用的管理员权限
        ComponentName mDeviceAdminSample=new ComponentName(this, MyPolicies.class);
        deviceManager.removeActiveAdmin(mDeviceAdminSample);
        //普通程序的卸载
        Intent intent=new Intent();
        intent.setAction("android.intent.action.DELETE");
        intent.addCategory("android.intent.category.DEFAULT");
        intent.setData(Uri.parse("package:"+getPackageName()));
        startActivity(intent);
    }
}

广播接收者:MyPolicies.java  只需要继承就行,因为注册文件中需要用到

/**
 * 实现一键锁屏的步骤:
 * 1.定义一个类继承设备管理的广播接受者,DeviceAdminReceiver继承了BroadcastReceiver
 * 2.在清单文件中进行注册服务,已经一些额外数据
 * 3.在res/xml文件夹下创建一个xml文件,指定拥有的功能
 * 4.得到管理员对象,调用锁屏方法
 */
public class MyPolicies extends DeviceAdminReceiver {
    
}

清单文件:

<!-- 根据文档来的:Administration->Device Policies -->
        <receiver android:name="com.example.yjsp.MyPolicies"
            android:label="@string/sample_device_admin"
               android:description="@string/sample_device_admin_description"
            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>

上面用到的字符串: 也是激活管理器权限后显示的文字

<string name="sample_device_admin">设置管理员权限标签</string>
    <string name="sample_device_admin_description">用户管理员的描述信息</string>

定义管理员的权限功能:res/ xml/ device_admin_sample.xml

<device-admin xmlns:android="http://schemas.android.com/apk/res/android">
      <uses-policies>
          <!-- 下面为管理员拥有的功能权限 也就是上面那弹出的激活图片里显示的功能 -->
        <limit-password />
        <watch-login />
        <reset-password />
        <force-lock />
        <wipe-data />
        <expire-password />
        <encrypted-storage />
        <disable-camera />
      </uses-policies>
</device-admin>