如何忽略Android手机上的相机快门声(How to mute camera shutter so

2019-06-24 01:39发布

有什么办法静音Android中(不根植电话)的相机快门声?

我使用此代码拍照时,我的静音音频声音:

  AudioManager mgr = (AudioManager)getSystemService(Context.AUDIO_SERVICE);
    int streamType = AudioManager.STREAM_SYSTEM;
    mgr.setStreamSolo(streamType, true);
    mgr.setRingerMode(AudioManager.RINGER_MODE_SILENT);
    mgr.setStreamMute(streamType, true);

我静音无声的电话。

mCamera.takePicture(null, null, photoCallback); 

然后拍摄照片

它的工作在HTC HERO, HTC Desire, Motorola ME860, MotoA953 。 但是,当我测试了Samsung Tab p1000Sony Experia R800i ,它不工作。 有没有其他解决办法?

Answer 1:

试试这个代码:

AudioManager manager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
if(TextUtils.equals(muteMode, "mute")){
    manager.setStreamVolume(AudioManager.STREAM_SYSTEM, 0 , AudioManager.FLAG_REMOVE_SOUND_AND_VIBRATE);
}else{
    manager.setStreamVolume(AudioManager.STREAM_SYSTEM, manager.getStreamMaxVolume(AudioManager.STREAM_SYSTEM) , AudioManager.FLAG_ALLOW_RINGER_MODES);
}
//here continue to take picture...

因为有下面2.3版本的Android的已知问题不使用AudioManager.setStreamMute()方法..



Answer 2:

由于API 17级(4.2)有一个适当的,可靠的方式来做到这一点,如果手机制造商支持它。

首先,检测是否可以通过编程关闭快门声,然后将其禁用

Camera.CameraInfo info = new Camera.CameraInfo();
Camera.getCameraInfo(id, info);
if (info.canDisableShutterSound) {
    mCamera.enableShutterSound(false)
}

你需要在调用设置ID为适当的相机ID Camera.getCameraInfo ,或者从0禁用它们都在一个循环中Camera.getNumberOfCameras() - 1。

该开发者文档建议您在地方快门声音的播放另一种声音,但你并非必须。



Answer 3:

你已经发布的方法其实是最好的,我可以找到/想到的。 它不工作的原因是因为它不应该。 事实上,在很多地方(欧洲大部分地区,日本,美国的部分地区等)这是非法的可关闭快门声音。 这是这样,你不能拍照,你不应该来的地方,这样你就不会拍照的人未经其许可,等等。 这只是在黑暗中拍摄,制造商也特意尝试,以确保你不能做到这一点无论是什么(虽然在技术上总有一种方式),但是当你想想看,在逻辑上没有理由你的代码不应该工作的权利? 这很简单,基本的,是有道理的。 不管怎么说,有许多无声相机应用程式在那里,摄像机+ ICS实际上是建立默认ICS相机上,但有一个静音快门选项,所以它必须是可行的。



Answer 4:

有一个手机在那里它响起快门声音自己。 在这种情况下,这似乎是不可能的可关闭快门声音。



Answer 5:

一个疯狂的方式,我能想到的是去静音电话的权限。



文章来源: How to mute camera shutter sound on android phone