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
copyprint?

  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
copyprint?

  1. mDPM.lockNow();  

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

[java] view
plain
copyprint?

  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>

时间: 2024-08-19 23:45:51

android Device Admin以及hasSystemFeature(String string)的相关文章

Android ApiDemos示例解析(21) App-&amp;gt;Device Admin

Device Admin示例介绍了类DeviceAdminReceiver,DevicePolicyManager和ActivityManager. 类 DevicePolicyManager 用于管理Android设备定义的一些策略,主要指密码定义的长度,密码是否要含大写字母,小写字母等设 置密码需要满足的规范,锁定设备或是清除所有用户数据,这个类一般需要配合DeviceAdminReceiver来使用. DeviceAdminReceiver派生于BroadcastReceiver,可以接受

android sqlite3 将expiretime赋值为String类型的long

问题描述 android sqlite3 将expiretime赋值为String类型的long db.execSQL("create table t_user (_id integer primary key autoincrement,phone,starttime,expiretime)"); 将expiretime赋值为String类型的1461573094000 但是取出的值为:1.461573094E12 这是为什么? 解决方案 建表时指定字段类型,不然数字会偏向numbe

Android Device Administration 设备管理器——实现一键锁屏

Android Device Administration 设备管理器--实现一键锁屏 最近研究了一下安全这一块的内容,当然,我是比较水的,所以也拿不出什么好知识点,但是有一些冷门的东西我还是可以聊聊的,就拿这个锁屏来说吧,我们现在市面上有一些一键锁屏的软件 我们可以看到,是数不胜数的,所以,其实他一开始使用的时候,都需要请求设备管理器 我们可以看到,只有当我们激活的时候,我们才可以使用它,那么,他到底是什么东西呢?其实,当我们激活之后,我们可以在我们手机的设置--安全--设备管理器里面看到他的

Dictionary&amp;lt;string, string&amp;gt;

Dictionary<string, string>是一个泛型 他本身有集合的功能有时候可以把它看成数组 他的结构是这样的:Dictionary<[key], [value]> 他的特点是存入对象是需要与[key]值一一对应的存入该泛型 通过某一个一定的[key]去找到对应的值 举个例子: //实例化对象 Dictionary<int, string> dic = new Dictionary<int, string>(); //对象打点添加 dic.Add

struts2-Struts2 s:select 如何加载List&amp;amp;lt;Object[]&amp;amp;gt; 和Map&amp;amp;lt;String,String&amp;amp;gt;

问题描述 Struts2 s:select 如何加载List<Object[]> 和Map<String,String> map的时候这么写的/s:select 报错 org.apache.jasper.JasperException: tag 'select', field 'list', name 'ptYxsbgkxx.ptYxsbjbqk.ptYxsbjbqk.yxsh': The requested list key 'sjyxshs' could not be reso

6.5、Android Studio的Android Device Monitor

Android Device Monitor是一个独立的工具,可以对Android应用进行调试和分析.Android Device Monitor无需安装整合在一个IDE中,比如像Android Studio,提供如下工具: 1. DDMS 2. Tracer for OpenGL ES 3. Hierarchy Viewer 4. Systrace 5. Traceview 6. Pixel Perfect magnification viewer 运行Android Device Monit

string&amp;amp;gt;&amp;amp;gt;循环求和问题-大神求解救,list&amp;amp;lt;Map&amp;amp;lt;String,String&amp;amp;gt;&amp;amp;gt;去重求和问题?本人菜鸟

问题描述 大神求解救,list<Map<String,String>>去重求和问题?本人菜鸟 问题是:有个list>,里面存放的比如是[{num=1,cc=1},{num=1,cc=1},{num=1,cc=1},{num=1,cc=2},{num=1,cc=2}],要求将list>变为存放的是[{num=3,cc=1},{num=2,cc=2}] 解决方案 将num和cc拼接成key,存储在map中,然后遍历去重 比如第一个元素可以为1#1,第二个元素可以为1#1,依

区分java中String+String和String+char_java

我们来考虑一个关于java中String的问题: "abc" + '/'和 "abc" + "/"的区别. 通过这个例子, 我们可以顺便练习一下JDK工具中javap的用法, 原问题是这样的: 把斜杠/当作字符或字符串有什么区别呢? 一个是当作基本数据类型char,一个是对象String.具体有什么区别呢? 当作字符效率会更高吗?String str = "abc" + '/';和String str = "abc&

spring注入-spring 注入Map&amp;amp;lt;String, Map&amp;amp;lt;String, String&amp;amp;gt;&amp;amp;gt;

问题描述 spring 注入Map<String, Map<String, String>> spring注入这类数据的时候如果配置文件写成如下方式 http://ask.csdn.net/# <!-- 数据审核的关键信息配置 --> <!-- 快递网点 --> WEB_EXPRESS_STATION 快递网点审核 STATIONNAME ID STATUS 0 1 会报Could not resolve matching constructor (hint