前言:
安卓系统设备管理器是由谷歌,通过以下方式帮助 Android 业主提供优越的特点:
- 追查你的 Android 设备的位置与谷歌帐户用于管理您的设备。
- 响你的 Android 手机,无论其位置如何。
- 重置锁定屏幕密码。
- 消灭你的 Android 手机上的所有数据
设备管理器创建还是比较繁琐的接下来我们就看着api来创建一个简单功能的案例。
首先进入官方文档看文档给出的Demo及其说明:
Creating the manifest
To use the Device Administration API, the application's manifest must include the following:
A subclass of DeviceAdminReceiver
that includes the following:The BIND_DEVICE_ADMIN
permission.
The ability to respond to the ACTION_DEVICE_ADMIN_ENABLED
intent, expressed in the manifest as an intent filter.
A declaration of security policies used in metadata.
Here is an excerpt from the Device Administration sample manifest:
android:label="@string/activity_sample_device_admin">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.SAMPLE_CODE" />
</intent-filter>
</activity>
<receiver android:name=".app.DeviceAdminSample$DeviceAdminSampleReceiver"
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>
由于activity界面系统已将帮我们弄好了所以在此处我们只需注册广播就行。
步骤1: 找到官方文档 吧上面的receiver复制粘贴到清单文件(复制到清单文件你会发现好多错误不要怕下面一点一点处理)
步骤2 :receiver 节点name处往下看文档你会发现需要个DeviceAdminReceiver,故像以前建立广播接收器一样创建个类继承DeviceAdminReceiver然后在name处注册。
步骤 3: 往下处理,看到@string你会发现这需要字符串 故你自己可以写几个字符串。
步骤 4 :"@xml/device_admin_sample的处理,我们按照他的要求创建xml文件夹 再创建xml文件,文档给出了以下demo:
<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>
把此内容贴到你的xml文件即可。
这样任务就基本完成了 接下来你可以写个简单布局按钮(我的demo):
步骤 5:一键开启功能 接着往下看文档你会发现:
此处文档给出了开启方法还是老样子帖走到你的开启按钮中
此处的错误处理,下面的字符串简单你自己随便写个就是但是mDeviceAdminSample你会发现此处需要个ComponentName对象
参数 上下文 ,类(广播接收者)所对应的字节码文件,此处不需要返回结果故直接开启(startActivity)活动。我的demo贴图如下
步骤:6 锁屏功能
文档给出了两种创建方法你会发现第二种简单些
用此例子比较简单(学会分析代码DevicePolicyManager是由系统服务获得,mDPM为成员变量
故
mDPM = (DevicePolicyManager) getSystemService(Context.DEVICE_POLICY_SERVICE);
// 如果设备管理器未激活,点击开启锁屏就会崩 可以先判断
// 组件对象可以作为是否激活的判断标识
if (mDPM.isAdminActive(mDeviceAdminSample)){
mDPM.lockNow();
// 锁屏 同时去设密码
mDPM.resetPassword("1996",0);
}else{
Toast.makeText(MainActivity.this, "请前往:设置 安全 设备管理器 点击激活", Toast.LENGTH_LONG).show();
}
注:开启激活设备管理器后不关闭应用是卸不掉的哦
附录(我的代码)
清单文件:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.administrator.deviceani">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<receiver android:name=".DeviceAdmin"
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>
</application>
</manifest>
java代码
package com.example.administrator.deviceani;
import android.app.admin.DevicePolicyManager;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
private ComponentName mDeviceAdminSample;
private DevicePolicyManager mDPM;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button tvLock = (Button) findViewById(R.id.tv_lock);
Button tvRemove = (Button) findViewById(R.id.tv_remove);
Button tvUninstall = (Button) findViewById(R.id.tv_uninstall);
Button tvStart = (Button) findViewById(R.id.tv_start);
// 参数 上下文 ,类(广播接收者)所对应的字节码文件
mDeviceAdminSample = new ComponentName(this,DeviceAdmin.class);
mDPM = (DevicePolicyManager) getSystemService(Context.DEVICE_POLICY_SERVICE);
//一键开启按钮
tvStart.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN);
intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN, mDeviceAdminSample);
intent.putExtra(DevicePolicyManager.EXTRA_ADD_EXPLANATION,
"设备管理器");
startActivity(intent);
if (mDPM.isAdminActive(mDeviceAdminSample)){
Toast.makeText(MainActivity.this, "亲您已经开启", Toast.LENGTH_SHORT).show();
}
}
});
//一键锁屏按钮
tvLock.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//锁屏功能 查看文档 下面set device lock 中有 (代码案例)
// DevicePolicyManager mDPM;
//mDPM.lockNow();
//用此例子比较简单(学会分析代码DevicePolicyManager是由系统服务获得,mDPM为成员变量)
// 如果设备管理器未激活,点击开启锁屏就会崩 可以先判断
// 组件对象可以作为是否激活的判断标识
if (mDPM.isAdminActive(mDeviceAdminSample)){
mDPM.lockNow();
// 锁屏 同时去设密码
mDPM.resetPassword("1996",0);
}else{
Toast.makeText(MainActivity.this, "请前往:设置 安全 设备管理器 点击激活", Toast.LENGTH_LONG).show();
}
}
});
}
}
布局比较简单就不在给了。
小结:
经过上面的一番步骤就实现 开启 锁屏两个功能以下的功能看着文档相信你们也是可以简单的创建的。作为初学者的我最近在做一个项目的时候发现这个功能在手机防盗上用途很多。由于这个步骤比较繁琐就在此记下一笔,当然也方便自己以后查看哈。
希望对需要的有所帮助,如有不足欢迎指点嘿嘿!!!