android Device Admin以及hasSystemFeature(String string)

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. void updatePolicies() {  
  2.  SharedPreferences prefs = getSamplePreferences(this);  
  3.  final int pwQuality = prefs.getInt(PREF_PASSWORD_QUALITY,  
  4.  DevicePolicyManager.PASSWORD_QUALITY_UNSPECIFIED);  
  5.  final int pwLength = prefs.getInt(PREF_PASSWORD_LENGTH, 0);  
  6.  final int maxFailedPw = prefs.getInt(PREF_MAX_FAILED_PW, 0);  
  7.    
  8.  boolean active = mDPM.isAdminActive(mDeviceAdminSample);  
  9.  if (active) {  
  10.  mDPM.setPasswordQuality(mDeviceAdminSample, pwQuality);  
  11.  mDPM.setPasswordMinimumLength(mDeviceAdminSample, pwLength);  
  12.  mDPM.setMaximumFailedPasswordsForWipe(mDeviceAdminSample, maxFailedPw);  
  13.  }  
  14. }  

锁定设备方法:

[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>


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值