[セットトップ]androidシステムが静音モードでcameraの撮影音を閉じる方法(2)
2126 ワード
前に「Androidシステムはどのように静音モードの下でcameraの撮影音を閉じます」というブログを書いたことがありますが、今日は彼の続編を書いて、この問題を検討し続けます.
会社の新しい需要は、cameraアプリケーションにスイッチを追加し、写真の音のオフとオンを行うことができることを要求しています.
前編では,静音が撮影音を持たないことを解決するためにシステム静音のpropertyを用い,camera playsound()関数で判断した(詳細は一を参照).どのように自分でpropertyを定義して、getの権限を持つことができて、肝心なのはsetの権限を持つことです.
実はandroidシステムにはサービスがあり、system/core/init/property権限のチェックを行うために使用されています.service.c中.
具体的な修正は以下の通りです.
次のようになります.
//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が交互になるように修正することをお勧めします.この方法も使えます.私はすでに試験しました.ただ、上記の方法は簡単で、コードの修正は小さいと思います.
会社の新しい需要は、cameraアプリケーションにスイッチを追加し、写真の音のオフとオンを行うことができることを要求しています.
前編では,静音が撮影音を持たないことを解決するためにシステム静音のpropertyを用い,camera playsound()関数で判断した(詳細は一を参照).どのように自分でpropertyを定義して、getの権限を持つことができて、肝心なのはsetの権限を持つことです.
実はandroidシステムにはサービスがあり、system/core/init/property権限のチェックを行うために使用されています.service.c中.
具体的な修正は以下の通りです.
/*
* 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が交互になるように修正することをお勧めします.この方法も使えます.私はすでに試験しました.ただ、上記の方法は簡単で、コードの修正は小さいと思います.