android系统在静音模式下关闭camera拍照声音的方法

时间:2021-09-04 00:34:20 

话说为了防止 * ,业内有不成文规定,手机公司在做camera时,点击拍照和录像键的时候,必须要有提示音。因此,google也就非常人性化的将播放拍照声音的函数,放到了cameraService中,防止开发者能开发出不响的camera,从而只要调用拍照函数,一定会响,这是写死在framework中的。

话说这个规定在当今有点不合时宜,这不,今天我收到测试提的一个BUG,说是公司的新需求,要求在静音模式下拍照声音也得取消。这么无耻的需求,也许就在我们中国最大的山寨手机公司才会提到。废话不多说,看看是怎么改的。

刚开始想到的是调用audiomanager的service,但是这会涉及到进程间通信,比较繁琐。所以用到了SystemProperity。想在APP监听点击事件时增加一个property,将当时的aduio状态写进去,如果为静音模式,则写入1,然后cameraservice再调用playsound时也取这个property,来判断是否playsound。

关于在app中写入systemprperty,我想引用一下大神的博客,博客地址http://www.cnblogs.com/eustoma/archive/2011/05/28/2415859.html。
以下为引用的博文:
---------------------------------------------------------------------------------------------------------start
使应用程序具有AID_SYSTEM的UID
那如何使应用程序的uid变为1000呢?
由于我可以在Android系统源码的环境下用make来编译,所以需要做如下几步:
l在应用程序的AndroidManifest.xml文件中的manifest节点中加入属性:
android:sharedUserId="android.uid.system";
通过Shared User id,拥有同一个User id的多个APK可以配置成运行在同一个进程中。那么把程序的UID配成android.uid.system,也就是要让程序运行在系统进程中,这样就有权限来设置前缀为hw.的属性了。
l修改Android.mk文件,加入LOCAL_CERTIFICATE := platform;
加入UID还不够,如果这时候安装APK的话发现无法安装,提示签名不符,原因是程序想要运行在系统进程中还要有目标系统的platform. key,就是platform.pk8和platform.x509.pem两个文件。通过这样的设置,系统才可以拿到platform.pk8和platform.x509.pem两个文件。使用这两个key签名后apk才真正可以放入系统进程中。
然后使用mm命令来编译,生成的apk的uid就会成为1000。在去调用property_set("hw.jpeg.path", "/data/test.jpg");就不会有问题了。
---------------------------------------------------------------------------------------------------------------------------------------------end
忙活半天发现其实在AudioManager.java文件中,已经将一个KEY-VALUE值写入到了SystemProperity中:
android系统在静音模式下关闭camera拍照声音的方法 
然后在CameraService.cpp文件中,关于调用playsound()函数的地方加入如下判断:
android系统在静音模式下关闭camera拍照声音的方法 
注意:property_get()函数需要引入头文件,<cutils/properties.h>

标签:android,静音模式,camera,拍照声音
0
投稿

猜你喜欢

  • Java 逻辑控制全面详解

    2022-10-29 09:01:48
  • C#编程实现向并口设备发送指令、获取并口设备的状态

    2023-02-02 02:56:39
  • C++中的long long与__int64

    2022-03-06 01:55:05
  • 详解如何利用C#实现设置系统时间

    2023-09-04 13:55:05
  • python 转换 Javascript %u 字符串为python unicode的代码

    2022-07-28 03:15:14
  • java使用jaxb操作xml示例

    2023-11-05 15:02:18
  • Java执行cmd命令两种实现方法解析

    2022-09-24 02:43:49
  • Spring bean的实例化和IOC依赖注入详解

    2023-11-23 23:57:15
  • C# DateTime日期比较方法案例详解

    2021-11-09 15:32:47
  • .NET垃圾回收器(GC)原理浅析

    2023-11-24 13:50:56
  • 详解android是如何管理内存的

    2022-02-08 03:37:22
  • Java IO流 文件传输基础

    2023-08-24 13:27:11
  • Java JVM运行时数据区(Run-Time Data Areas)

    2022-01-22 22:10:35
  • springdata jpa使用Example快速实现动态查询功能

    2022-12-01 21:49:08
  • Android实现京东首页效果

    2023-10-16 23:10:10
  • Java之JFrame输出Helloworld实例

    2022-01-19 16:40:52
  • Java面试题解析之判断以及防止SQL注入

    2023-05-26 18:08:59
  • 详解Mybatis中的select方法

    2023-06-10 05:44:49
  • Java 比较接口comparable与comparator区别解析

    2022-11-26 20:54:24
  • Android开发中编写蓝牙相关功能的核心代码讲解

    2021-07-26 00:24:53
  • asp之家 软件编程 m.aspxhome.com