[セットトップ]androidシステムが静音モードでcameraの撮影音を閉じる方法(2)

2126 ワード

前に「Androidシステムはどのように静音モードの下でcameraの撮影音を閉じます」というブログを書いたことがありますが、今日は彼の続編を書いて、この問題を検討し続けます.
会社の新しい需要は、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が交互になるように修正することをお勧めします.この方法も使えます.私はすでに試験しました.ただ、上記の方法は簡単で、コードの修正は小さいと思います.