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

然后在CameraService.cpp文件中,关于调用playsound()函数的地方加入如下判断:

注意:property_get()函数需要引入头文件,<cutils/properties.h>

希望能对有同样需求的朋友有所帮助。

android系统如何在静音模式下关闭camera拍照声音相关推荐

  1. android系统如何在静音模式下关闭camera拍照声音(2)

    之前写过一篇"android系统如何在静音模式下关闭camera拍照声音"的博客,今天来写他的续篇,继续探讨这个问题. 公司新需求,要求在camera应用中添加一个开关,可以进行拍 ...

  2. android静音模式,android静音模式下仍可以播放媒体声音以及调节其大小。。。。...

    不多说,先上图,先看一张我开发板的截图  ... 首先我先解释一下: 由于我的开发板硬件没有调节声音的按键,因而只能在图中所示 处调节,但是在静音之后,那个声音调节又不可点击,所以我们要在静音模式下使 ...

  3. android 默认静音模式设置,Android:如何在振动设置之间进行切换(始终,永不,仅在静音模式下,仅在非静音模式下)?再访...

    寻找方法来切换之间:从不模式模式 始终 仅在静音 仅在非静音 这些选择是通过路径找到的 - - 菜单>>设置>>声音>>振动---在手机上. 它是简单的导航手机上的 ...

  4. 如何在静音模式下播放声音(需要设置AVAudioSession)

    播放本地的声音可以使用AVAudioPlayer 首先#import <AVFoundation/AVFoundation.h> 造AVAudioPlayer对象 @property (n ...

  5. Android5.0 静音模式下让闹钟仍然响铃

    最近在看Android 5.0的代码,发现可以通过音量键来控制情景模式,而且在此次升级的静音模式可谓是完全静音了,就连闹钟都不会发音. 我要做一个可以在静音模式下选择闹钟是否仍然响铃的开关. 本文仅为 ...

  6. android流程点击开机键熄屏,一种基于android系统的灭屏状态下指纹解锁加速亮屏方法与流程...

    本发明涉及android系统解锁显示方法,尤其涉及一种基于android系统的灭屏状态下指纹解锁加速亮屏方法. 背景技术: 目前,随着指纹技术越来越普及,很多android系统设备都带有指纹外设,特别 ...

  7. WPF随笔(十四)--如何在MVVM模式下关闭窗口

    离上一篇WPF随笔有多久,再度编码WPF项目就有多久.机缘巧合又接下了一个开发WPF桌面程序的任务,又有机会详细研究之前一直忽略的细节. 今天就来谈谈如何在MVVM模式下关闭窗口. 什么?关闭窗口还要 ...

  8. PE里在计算机本地磁盘大小,我用U盘装系统,在PE模式下,打开分区工具就显示U盘的容量,不显示硬盘的大小,要怎么处理这个问题?...

    我用U盘装系统,在PE模式下,打开分区工具就显示U盘的容量,不显示硬盘的大小,要怎么处理这个问题?以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让 ...

  9. TP6.0 调试模式下关闭Trace调试

    1. 在 TP6.0 当前最新版 (v6.0.7) 中 默认安装的时候会自动安装 topthink/think-trace 扩展 在调试模式下浏览器右下角会出现trace信息, 此时无法手动关闭 Tr ...

最新文章

  1. 手游行业洞察:Project Makeover成爆款,中国手游出海如何破局
  2. [原]当你用%查不到记录的时候怎么办?
  3. java有趣的平方数_JAVA小程序之独特的完全平方数问题
  4. 项目Beta冲刺(团队)第七天
  5. SQL Server商业智能中ODS表和Dim表必须有的字段
  6. Redis的两种持久化介绍与对比
  7. Transformer为啥在NER上表现不好
  8. 局域网电脑访问IIS
  9. P3368 【模板】树状数组 2
  10. ubuntu16.04下载opencv3.4
  11. python处理access数据库教程_Python操作Access数据库基本操作步骤分析
  12. Java部署斗鱼直播,iOS斗鱼直播项目
  13. 西门子阀门定位器常见的故障代码以及解决方法
  14. vue项目中如何解决跨域问题
  15. 深圳:由“独角兽”们构建起的硬核科技之城
  16. HTML+CSS美食静态网页设计——简单牛排美食餐饮(9个页面)公司网站模板企业网站实现
  17. git diff提示filemode发生改变(old mode xxxx、new mode xxxx)
  18. 求助:大文件mp4恢复
  19. js、jquery操作复选框checkbox总结(单个/多个获取选中值、初始化设置默认选中值、全选反选)
  20. 已知圆柱体的底面半径c语言,C语言编程题带答案

热门文章

  1. 柯文哲2024竞选的胜算多大?
  2. Javascript共通方法汇总
  3. 固件解包--binwalk分析
  4. 【三万粉丝终极福利】Python、C、Java三大语言学习路线和资源整理
  5. uniapp-动态主题-使用动态scss变量切换主题
  6. 入手iPad Air 3和Apple pencil,能提高学习效率吗?
  7. web自动化笔记十六:日志收集
  8. java迭代器_java 迭代器
  9. PHP保留两位小数显示
  10. Pytorch使用tensorboard监视网络训练过程