有什么办法静音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 p1000
和Sony Experia R800i
,它不工作。 有没有其他解决办法?
试试这个代码:
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()方法..
由于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。
该开发者文档建议您在地方快门声音的播放另一种声音,但你并非必须。
你已经发布的方法其实是最好的,我可以找到/想到的。 它不工作的原因是因为它不应该。 事实上,在很多地方(欧洲大部分地区,日本,美国的部分地区等)这是非法的可关闭快门声音。 这是这样,你不能拍照,你不应该来的地方,这样你就不会拍照的人未经其许可,等等。 这只是在黑暗中拍摄,制造商也特意尝试,以确保你不能做到这一点无论是什么(虽然在技术上总有一种方式),但是当你想想看,在逻辑上没有理由你的代码不应该工作的权利? 这很简单,基本的,是有道理的。 不管怎么说,有许多无声相机应用程式在那里,摄像机+ ICS实际上是建立默认ICS相机上,但有一个静音快门选项,所以它必须是可行的。
有一个手机在那里它响起快门声音自己。 在这种情况下,这似乎是不可能的可关闭快门声音。