Device Admin示例介绍了类DeviceAdminReceiver,DevicePolicyManager和ActivityManager。

类DevicePolicyManager 用于管理Android设备定义的一些策略,主要指密码定义的长度,密码是否要含大写字母,小写字母等设置密码需要满足的规范,锁定设备或是清除所有用户数据,这个类一般需要配合DeviceAdminReceiver来使用。DeviceAdminReceiver派生于BroadcastReceiver,可以接受Android操作系统发出的Intent事件:如密码过期了,密码更新等。

当它Publish在AndroidManifest.xml作为BroadcastReceiver定义时,必须处理android.app.action.DEVICE_ADMIN_ENABLED和设置android.permission.BIND_DEVICE_ADMIN权限:

<receiver android:name=”.app.DeviceAdminSample”
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>

使用DevicePolicyManager 来设置密码定义的Policy

[java] view plain copy print ?
  1. voidupdatePolicies(){
  2. SharedPreferencesprefs=getSamplePreferences(this);
  3. finalintpwQuality=prefs.getInt(PREF_PASSWORD_QUALITY,
  4. DevicePolicyManager.PASSWORD_QUALITY_UNSPECIFIED);
  5. finalintpwLength=prefs.getInt(PREF_PASSWORD_LENGTH,0);
  6. finalintmaxFailedPw=prefs.getInt(PREF_MAX_FAILED_PW,0);
  7. booleanactive=mDPM.isAdminActive(mDeviceAdminSample);
  8. if(active){
  9. mDPM.setPasswordQuality(mDeviceAdminSample,pwQuality);
  10. mDPM.setPasswordMinimumLength(mDeviceAdminSample,pwLength);
  11. mDPM.setMaximumFailedPasswordsForWipe(mDeviceAdminSample,maxFailedPw);
  12. }
  13. }

锁定设备方法:

[java] view plain copy print ?
  1. mDPM.lockNow();

清除所有用户数据(相当于Master Reset)

[java] view plain copy print ?
  1. mDPM.wipeData(0);

ActivityManager类一般用来获取Android系统中所有运行的Activity的信息,有点类似Windows中的Task Manager。可以获得 Memory ,Process ,Service等信息。而在例子中使用了一个很好笑的方法:isUserAMonkey ,用来判断当前设备使用者是否为一只猴子:-)。真不知道如果来判断,我以为如果这是乱敲键盘会使这个函数返回“真”。结果不是:)。

总的来说这些类和方法在一般的应用中用到的地方很少,有些印象就可以了。




hasSystemFeature函数

(frameworks\base\services\java\com\android\server\pm) mPM.hasSystemFeature(name)经过AIDL实际上调用到文件PackageManagerService.java 。

mAvailableFeatures里面的内容是通过读取/system/etc/permissions下面的文档。


延伸:


android4.0 及以上 版本里 ,如果在settings下看不到wifi和bluetooth两个菜单选项,这是因为在setting里,对系统是否有特定的模块加上了判断,如果没有就不显示。android4.0的模块判断函数:getPackageManager().hasSystemFeature(String string).通过该函数判断系统是否有特定的模块功能。

例如判断是否有 wifi 和 蓝牙模块的具体代码:

getPackageManager().hasSystemFeature(PackageManager.FEATURE_WIFI);

getPackageManager().hasSystemFe(PackageManager.FEATURE_BLUETOOTH);

PackageManager这些字符串 存在system/etc/permissions/xxxx.xml文件里,它们一般从/framework/base/data/etc/xxx.xml复制过来。

PackageManager.FEATURE_BLUETOOTH = "android.hardware.wifi"

PackageManager.FEATURE_BLUETOOTH = "android.hardware.bluetooth"


解决wifi和蓝牙不显示方法:

一、直接把包含对应 feature 的xml文件复制到system/etc/permissions/目录下,相当于加上系统所具有的具体模块的功能配置文件;

、修改product_copy.mk文件,添加相应的设备。


++++++++++++++++++++++++++++++++++++++++++

相关方法如下:

FeatureInfo[] PackageManager.getSystemAvailableFeatures()
boolean PackageManager.hasSystemFeature(String feature)


范例:
PackageManager pm = context.getPackageManager();

FeatureInfo[] features = pm.getSystemAvailableFeatures(); //得到所有支援的硬體種類

for (FeatureInfo feature : features) Log.v(TAG, feature.name);


boolean hasFlashlight = pm.hsaSystemFeature(PackageManager.FEATURE_CAMERA_FLASH); //是否支援閃光燈
boolean hasCamera = pm.hsaSystemFeature(PackageManager.FEATURE_CAMERA); //是否支援相機
boolean hasBt = pm.hsaSystemFeature(PackageManager.FEATURE_BLUETOOTH); //是否支援藍牙



hasSystemFeature 這個接口參考信息是
/system/etc/permissions/android.hardware*.xml 文件中定義的feature的信息


/frameworks/base/data/etc/android.hardware.camera.flash-autofocus.xml
<?xml version="1.0" encoding="utf-8"?>
<permissions>
<feature name="android.hardware.camera" />
<feature name="android.hardware.camera.autofocus" />
<feature name="android.hardware.camera.flash" />
</permissions>


更多相关文章

  1. Mars服务器和客户端demo运行教程
  2. android中判断sim卡状态和读取联系人资料的方法
  3. 【Android开发笔记】仿微信支付密码
  4. android MakeFile写法
  5. Android中Java根据文件头获取文件类型
  6. android用SharedPreferences保存登录账户密码
  7. Android判断是否首次登录
  8. Android(安卓)组件化
  9. Android判断现在所处界面是否为home主桌面的方法

随机推荐

  1. spring android 编译环境搭建
  2. Android HttpURLConnection网络通信
  3. Android 开发时遇到的两个模拟器问题
  4. 解析Android如何利用Handler
  5. Android官方入门文档[3]构建一个简单的用
  6. TextVview的属性
  7. Android Studio中Gradle使用详解
  8. Android OnTouchListener实时监听触点坐
  9. android 下载文件注意事项
  10. android 如何判断软件是否第一次运行?