服务器之家:专注于服务器技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - Android - android系统在静音模式下关闭camera拍照声音的方法

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

2021-02-03 12:40Android开发网 Android

本文为大家详细介绍下android系统如何在静音模式下关闭camera拍照声音,具体的实现方法如下,感兴趣的朋友可以参考下哈

话说为了防止偷拍,业内有不成文规定,手机公司在做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>

延伸 · 阅读

精彩推荐