Android激活设备管理器--一键锁屏
2016-10-27 23:30
211 查看
激活设备管理器就是把系统的某些权力例如锁屏,链接蓝牙等功能交给某个应用来执行。也就是说,如果想要某个应用执行某些系统超级管理员才能执行的功能时,就需要让这个应用激活设备管理器。此时该应用就拿到了系统管理员的权限。
这件事要怎么做呢?
写一个广播接收者,给这个BroadcastReceiver申请系统管理员的权限,让操作系统给广播接收者授权。这样就激活了系统的授权组件。这些功能都是由android提供的DevicePolicyManager类来完成的。
下面用申请应用系统管理员以及一键锁屏来介绍这个权限操作。
1.首先创建自定义的权限xml文件– device_admin.xml
在Android工程的res目录下新建xml目录,在xml目录下新建device_admin.xml文件
可以看到后四个的权限很大,最好不要在真机上测试。本例只用
2.创建布局文件,主要是定义三个按钮:注册组件,注销组件和锁屏。
3.定义BroadcastReceiver–DeviceManagerBC,使之继承DeviceAdminReceiver。
4.在AndroidManifest.xml文件中注册BroadcastReceiver。
5.在MainActivity中完善各个按钮的功能。
6.运行效果
只有一键锁屏权限时的激活页面显示:
按照第一步的device-admin.xml设置时的激活页面:
7.一键锁屏的运行逻辑:
点击权限配置进入应用,首先检查应用有没有激活系统管理器,若激活,则显示注销和锁屏按钮。此时点击“注销”则注销系统管理器并退出应用;点击“锁屏”则锁屏后退出应用。如果应用没有激活系统管理器,主页显示“注册组件”。点击后进入上图图一,点击“激活”,则应用获取系统管理员权限,页面显示“注销”和“锁屏”按钮;点击“取消”则返回“注册组件”页面。
这件事要怎么做呢?
写一个广播接收者,给这个BroadcastReceiver申请系统管理员的权限,让操作系统给广播接收者授权。这样就激活了系统的授权组件。这些功能都是由android提供的DevicePolicyManager类来完成的。
下面用申请应用系统管理员以及一键锁屏来介绍这个权限操作。
1.首先创建自定义的权限xml文件– device_admin.xml
在Android工程的res目录下新建xml目录,在xml目录下新建device_admin.xml文件
<?xml version="1.0" encoding="utf-8"?> <device-admin xmlns:android="http://schemas.android.com/apk/res/android"> <uses-policies> <force-lock/> //一键锁屏 <disable-camera/> //停用相机,禁止使用所有设备摄像头 <limit-password/>//设置密码规则 <watch-login/>//监视屏幕解锁尝试次数,如果输错次数过多则锁定手机或者清除所有数据 <reset-password/>//重置密码 <wipe-data/>//恢复出厂设置 </uses-policies> </device-admin>
可以看到后四个的权限很大,最好不要在真机上测试。本例只用
2.创建布局文件,主要是定义三个按钮:注册组件,注销组件和锁屏。
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" android:orientation="vertical" tools:context="com.cindy.onekeylock.MainActivity"> <Button android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/btn_regDivice" android:text="注册成为系统组件" android:textSize="@dimen/activity_horizontal_margin" android:gravity="center"/> <Button android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/btn_unRegDivice" android:text="注销系统组件" android:textSize="@dimen/activity_horizontal_margin" android:gravity="center"/> <Button android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/btn_lockScreen" android:text="锁屏" android:textSize="@dimen/activity_horizontal_margin" android:gravity="center"/> </LinearLayout>
3.定义BroadcastReceiver–DeviceManagerBC,使之继承DeviceAdminReceiver。
package com.cindy.onekeylock; import android.app.admin.DeviceAdminReceiver; import android.content.Context; import android.content.Intent; /** * Created by Cindy on 2016/10/23. */ public class DeviceManagerBC extends DeviceAdminReceiver{ @Override public void onEnabled(Context context, Intent intent) { super.onEnabled(context, intent); System.out.println("已经注册成为系统组件"); } @Override public void onDisabled(Context context, Intent intent) { super.onDisabled(context, intent); System.out.println("已经注销了系统组件"); } }
4.在AndroidManifest.xml文件中注册BroadcastReceiver。
<receiver android:name=".DeviceManagerBC"> <meta-data android:name="android.app.device_admin" android:resource="@xml/device_admin"/> <intent-filter> <action android:name="android.app.action.DEVICE_ADMIN_ENABLED"/> <action android:name="android.app.action.DEVICE_ADMIN_DISABLED"/> </intent-filter> </receiver>
5.在MainActivity中完善各个按钮的功能。
package com.cindy.onekeylock; import android.app.admin.DevicePolicyManager; import android.content.ComponentName; import android.content.Intent; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.Button; public class MainActivity extends AppCompatActivity implements View.OnClickListener{ private Button btn_regDivice,btn_unRegDivice,btn_lockScreen; private DevicePolicyManager devicePolicyManager; public ComponentName componentName;//权限监听器 private boolean flag; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); btn_regDivice = (Button)findViewById(R.id.btn_regDivice); btn_regDivice.setOnClickListener(this); btn_unRegDivice = (Button)findViewById(R.id.btn_unRegDivice); btn_unRegDivice.setOnClickListener(this); btn_lockScreen = (Button)findViewById(R.id.btn_lockScreen); btn_lockScreen.setOnClickListener(this); devicePolicyManager = (DevicePolicyManager) getSystemService(DEVICE_POLICY_SERVICE); componentName = new ComponentName(this,DeviceManagerBC.class);//用广播接收器实例化一个系统组件 flag = devicePolicyManager.isAdminActive(componentName);//判断这个应用是否激活了设备管理器 if(flag){ btn_regDivice.setVisibility(View.GONE); btn_lockScreen.setVisibility(View.VISIBLE); btn_unRegDivice.setVisibility(View.VISIBLE); }else{ btn_regDivice.setVisibility(View.VISIBLE); btn_lockScreen.setVisibility(View.GONE); btn_unRegDivice.setVisibility(View.GONE); } } @Override public void onClick(View v) { switch (v.getId()){ case R.id.btn_regDivice: Intent i = new Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN);//激活系统设备管理器 i.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN, componentName);//注册系统组件 startActivity(i); break; case R.id.btn_unRegDivice: devicePolicyManager.removeActiveAdmin(componentName);//注销系统组件 this.finish(); break; case R.id.btn_lockScreen: devicePolicyManager.lockNow(); this.finish(); break; } } @Override protected void onResume(){ super.onResume(); boolean flagChanged = devicePolicyManager.isAdminActive(componentName);//判断这个应用是否激活了设备管理器 if(flagChanged){ btn_regDivice.setVisibility(View.GONE); btn_lockScreen.setVisibility(View.VISIBLE); btn_unRegDivice.setVisibility(View.VISIBLE); }else{ btn_regDivice.setVisibility(View.VISIBLE); btn_lockScreen.setVisibility(View.GONE); btn_unRegDivice.setVisibility(View.GONE); } } }
6.运行效果
只有一键锁屏权限时的激活页面显示:
按照第一步的device-admin.xml设置时的激活页面:
7.一键锁屏的运行逻辑:
点击权限配置进入应用,首先检查应用有没有激活系统管理器,若激活,则显示注销和锁屏按钮。此时点击“注销”则注销系统管理器并退出应用;点击“锁屏”则锁屏后退出应用。如果应用没有激活系统管理器,主页显示“注册组件”。点击后进入上图图一,点击“激活”,则应用获取系统管理员权限,页面显示“注销”和“锁屏”按钮;点击“取消”则返回“注册组件”页面。
相关文章推荐
- 一键锁屏,激活设备管理器,卸载应用,清除数据
- Android Device Administration 设备管理器——实现一键锁屏
- Android锁屏和激活设备管理器
- Android 一键锁屏源码(激活、锁屏、删除)
- 简单几步实现Android 一键锁屏,一键卸载程序,一键激活设备管理权限
- Android-利用设备管理器来实现锁屏功能并可一键自我卸载
- android_一键锁屏
- Android一键锁屏开发全过程
- android DevicePolicyManager实现一键锁屏
- Android一键锁屏开发全过程…
- 一键锁屏 设备管理器
- android 一键锁屏(二)
- Android 激活Deviceadmin,并进行锁屏和恢复出厂设置
- Android一键锁屏和清除数据代码实现
- Android一键锁屏实现(附源码链接)
- 【拯救电源键】最详尽的android开发一键锁屏实例 提供免费源码+apk
- android Desk桌面一键锁屏 源码
- android 一键锁屏
- Android一键锁屏开发全过程
- android 一键锁屏和清除手机数据