編輯:關於Android編程
公司新需求,要求在camera應用中添加一個開關,可以進行拍照聲音的關閉和開啟。
上篇文章解決靜音不能有拍照聲音用的是系統靜音的property,在camera playsound()函數中來進行判斷的(詳見一)。如何自己定義個property,使其既能有get的權限,關鍵是得有set權限。
其實android系統有一個service,是用來進行SystemProperty權限的檢查,它就藏在system/core/init/property_service.c中。
具體修改如下:
<SPAN style="FONT-SIZE: 18px">/* * Checks permissions for setting system properties. * Returns 1 if uid allowed, 0 otherwise. */ static int check_perms(const char *name, unsigned int uid, unsigned int gid) { int i; if (uid == 0) return 1; if(!strncmp(name, "ro.", 3)) name +=3; //add duanyf for start if (strncmp(name, "ty.camera.", 10) == 0){ return 1; } //add duanyf for end for (i = 0; property_perms[i].prefix; i++) { int tmp; if (strncmp(property_perms[i].prefix, name, strlen(property_perms[i].prefix)) == 0) { if ((uid && property_perms[i].uid == uid) || (gid && property_perms[i].gid == gid)) { return 1; } } } return 0; }</SPAN> /* * Checks permissions for setting system properties. * Returns 1 if uid allowed, 0 otherwise. */ static int check_perms(const char *name, unsigned int uid, unsigned int gid) { int i; if (uid == 0) return 1; if(!strncmp(name, "ro.", 3)) name +=3; //add duanyf for start if (strncmp(name, "ty.camera.", 10) == 0){ return 1; } //add duanyf for end for (i = 0; property_perms[i].prefix; i++) { int tmp; if (strncmp(property_perms[i].prefix, name, strlen(property_perms[i].prefix)) == 0) { if ((uid && property_perms[i].uid == uid) || (gid && property_perms[i].gid == gid)) { return 1; } } } return 0; }
其中:
//add duanyf for start
if (strncmp(name, "ty.camera.", 10) == 0){
return 1;
}
//add duanyf for end
就是 修改,相當於開個後門,只要是ty.camera開頭的SystemProperty都return 1.
然後 再用這個property在cameraservice中當做判斷條件。剩下的就是Camera App的添加開關的修改來。
總結 :此方法合理的避開了set需要system權限造成其他未知問題的麻煩。平台允許不允許這樣修改,那就得跟PM進行商量了。
當然 ,還是推薦大家通過JNI,binder傳遞到cameraservice的系統原生的上層和framework交互的方式進行修改,這種方法也是可以使用的,我已經試驗過了。只不過覺得上面介紹的方法比較簡單,對代碼的修改較小。
前言:從本篇開始,將進入Multimedia框架,包含MediaPlayer, Camera, Surface, MediaRecord, 接下來幾篇都是MediaPla
LruCache以鍵-值對的形式存儲(內部定義了一個LinkedHashMap)數據,通過new LruCache(int size)實例化,參數使指定分配給LruCac
一、簡介編寫手機App時,有時需要使用文字轉語音(Text to Speech)的功能,比如開車時閱讀收到的短信、導航語音提示、界面中比較重要的信息通過語音強調、……等。
1 前言前一篇(點我閱讀前一篇《Android應用Preference相關及源碼淺析(SharePreferences篇)》)我們討論分析使用了Android的Share