閱讀86 返回首頁    go 汽車大全


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

  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. }  

鎖定設備方法:

  1. mDPM.lockNow();  

清除所有用戶數據(相當於Master Reset)

  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>


最後更新:2017-04-03 05:39:37

  上一篇:go 無線路由器與modem的IP衝突問題剖析及解決(家庭上網)
  下一篇:go iOS應用性能調優的25個建議和技巧