日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

使用Java代码在应用层获取Android系统属性

發布時間:2025/4/16 Android 47 豆豆
生活随笔 收集整理的這篇文章主要介紹了 使用Java代码在应用层获取Android系统属性 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

之前使用Native代碼的property_get()/property_set()來獲取Android系統屬性,現在需要改寫到Java上面,

但是System.getProperty() /?System.setProperty()所操作的屬性與上面的是不同的東西,而在android.os.Build只提供了訪問ro屬性的方法。


好在Google提供了一個隱藏類android.os.SystemProperties用來管理屬性,其內部實際上也是通過JNI調用Native的property_get和property_set方法來獲得和設置屬性。我們不能直接import這個類來使用,但是可以通過Java中的反射機制來實現。


get代碼如下:

  • private static Method getStringPropMethod = null;
  • private static Method getBooleanPropMethod = null;
  • public static String getSystemPropString(final String key, final String defaultValue) {
  • try {
  • if (getStringPropMethod == null) {
  • getStringPropMethod = Class.forName("android.os.SystemProperties")
  • .getMethod("get", String.class, String.class);
  • }
  • return (String) getStringPropMethod.invoke(null, key, defaultValue);
  • } catch (Exception e) {
  • Log.e(TAG, "Reflect error: " + e.toString());
  • return defaultValue;
  • }
  • }
  • public static boolean getSystemPropBoolean(final String key, final boolean defaultValue) {
  • try {
  • if (getBooleanPropMethod == null) {
  • getBooleanPropMethod = Class.forName("android.os.SystemProperties")
  • .getMethod("getBoolean", String.class, boolean.class);
  • }
  • return (boolean) getBooleanPropMethod.invoke(null, key, defaultValue);
  • } catch (Exception e) {
  • Log.e(TAG, "Reflect error: " + e.toString());
  • return defaultValue;
  • }
  • }


  • 屬性名字的意義:

    (1)persist.* :?以persist開始的屬性會在/data/property存一個副本。也就是說,如果程序調property_set設了一個以persist為前綴的屬性,系統會在/data/property/*里加一個文件記錄這個屬性,重啟以后這個屬性還有。

    如果property_set其它屬性,因為屬性是在內存里存,所以重啟后這個屬性就沒有了。

    (2)ro.* :以ro為前綴的屬性不能修改。

    (3)如果屬性名稱以“net.”開頭,當設置這個屬性時,“net.change”屬性將會自動設置,以加入到最后修改的屬性名。(這是很巧妙的。 netresolve模塊的使用這個屬性來追蹤在net.*屬性上的任何變化。)

    (4)屬性“ ctrl.start ”和“ ctrl.stop ”是用來啟動和停止服務。每一項服務必須在/init.rc中定義.系統啟動時,與init守護進程將解析init.rc和啟動屬性服務。一旦收到設置“ ctrl.start ”屬性的請求,屬性服務將使用該屬性值作為服務名找到該服務,啟動該服務。這項服務的啟動結果將會放入“ init.svc.<服務名>“屬性中。客戶端應用程序可以輪詢那個屬性值,以確定結果。

    總結

    以上是生活随笔為你收集整理的使用Java代码在应用层获取Android系统属性的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。