使用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代碼如下:
屬性名字的意義:
(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系统属性的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Android : 反射机制获取或设置系
- 下一篇: Android 使用反射机制获取或设置系