設備管理
Android從2.2版本開始,提供了一套設備管理API來進行Android手機設備的管理工作,其中包含設備鎖屏、禁用啟用攝像頭(4.0開始提供)、擦除用戶數據(也可擦除sdcard中的數據,不過要到2.3)等一系列的設備管理策略,具體可參見DevicePolicyManager類中的定義(http://developer.android.com/reference/android/app/admin/DevicePolicyManager.html),下面是一些具體的步驟~
聲明和定義策略
在使用設備管理功能前需在res/xml/device_admin.xml 中聲明和定義要使用的設備策略,這些聲明和定義的策略將會被我們的應用程序執行,如果你執行了沒在 res/xml/device_admin.xml 聲明和定義的策略,那將會拋出 SecurityException 異常,具體定義如下
<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 />
<disable-keyguard-features />
</uses-policies>
</device-admin>
接收設備管理中一些事件
在進行設備管理的操作中,根據具體的業務邏輯可能需要知曉一些重要事件,比如取消激活設備管理事件,這個事件就很重要了,我們必須得知道用戶進行了此項操作,從而來進行一些邏輯的處理或者提示用戶,還有許多的事件這裡就不一一說了,具體詳見DeviceAdminReceiver(http://developer.android.com/training/enterprise/device-management-policy.html#CreateDeviceAdminReceiver),我們可以繼承DeviceAdminReceiver,覆寫一些回調方法,具體可能如下
public class AdminReceiver extends DeviceAdminReceiver {
@Override
public DevicePolicyManager getManager(Context context) {
return super.getManager(context);
}
@Override
public ComponentName getWho(Context context) {
return super.getWho(context);
}
/**
* 禁用
*/
@Override
public void onDisabled(Context context, Intent intent) {
Toast.makeText(context, "禁用設備管理", Toast.LENGTH_SHORT).show();
super.onDisabled(context, intent);
}
@Override
public CharSequence onDisableRequested(Context context, Intent intent) {
return super.onDisableRequested(context, intent);
}
/**
* 激活
*/
@Override
public void onEnabled(Context context, Intent intent) {
Toast.makeText(context, "啟動設備管理", Toast.LENGTH_SHORT).show();
super.onEnabled(context, intent);
}
@Override
public void onPasswordChanged(Context context, Intent intent) {
super.onPasswordChanged(context, intent);
}
@Override
public void onPasswordFailed(Context context, Intent intent) {
super.onPasswordFailed(context, intent);
}
@Override
public void onPasswordSucceeded(Context context, Intent intent) {
super.onPasswordSucceeded(context, intent);
}
@Override
public void onReceive(Context context, Intent intent) {
super.onReceive(context, intent);
}
@Override
public IBinder peekService(Context myContext, Intent service) {
//Logger.d("------" + "peekService" + "------");
return super.peekService(myContext, service);
}
}
當然還需像正常的Receiver一樣得在Manifest文件中進行注冊,還行注意的是在注冊過程中還需引用我們剛才聲明定義好的策略列表
<receiver
android:name=".receiver.AdminReceiver"
android:description="@string/device_des"
android:label="@string/device_label"
android:permission="android.permission.BIND_DEVICE_ADMIN" >
<meta-data
android:name="android.app.device_admin"
android:resource="@xml/device_manager" />
<intent-filter>
<action android:name="android.app.action.DEVICE_ADMIN_ENABLED" />
</intent-filter>
</receiver>