如何沉默iPhone相机快门声?

时间:2010-11-21 01:56:03

标签: iphone audio camera shutter

我可以通过调用[UIImagePickerController takePicture:]以编程方式用iPhone拍照,但是当我这样做时,iPhone会播放快门点击的大声录音。当我谷歌关于如何关闭点击时,我找到建议重命名iPhone播放的声音文件。在我看来,我的应用程序会这样做会导致它被App Store拒绝访问系统框架。是否有一种程序化的方式来关闭这种声音?我的应用程序的性质要求相机保持沉默。

4 个答案:

答案 0 :(得分:5)

我认为你已经解决了,但你的应用程序应该在Appstore验证失败,因为它不符合iOS Dev License协议。见下文:

  

第3.3.8节:任何形式的用户或设备数据收集或图像,   图片或语音捕获或录制(统称为“录制”),和   任何形式的数据,内容或信息收集,处理,   维护,上传,同步,存储,传输,共享,   通过您,通过或与您相关的披露或使用   申请必须遵守所有适用的隐私法律和   法规以及任何相关的计划要求,包括但是   不限于任何通知或同意要求。特别是,a   必须具有相当显眼的音频,视觉或其他指标   作为Application的一部分显示给用户以指示a   录音正在进行中。

答案 1 :(得分:2)

对于它的价值,我能够通过使用AVCaptureStillImageOutput在AVCapture框架的snapStillImage方法中使用此代码来实现这一点。在iOS 8.3 iPhone 5上它对我来说非常适合。我还确认如果你使用它,Apple不会拒绝你的应用程序:

MPVolumeView* volumeView = [[MPVolumeView alloc] init];
//find the volumeSlider
UISlider* volumeViewSlider = nil;
for (UIView *view in [volumeView subviews]){
    if ([view.class.description isEqualToString:@"MPVolumeSlider"]){
        volumeViewSlider = (UISlider*)view;
        break;
    }
}

[volumeViewSlider setValue:0.0f animated:YES];
[volumeViewSlider sendActionsForControlEvents:UIControlEventTouchUpInside];

Swift 4:

var volumeView = MPVolumeView()
//find the volumeSlider
var volumeViewSlider: UISlider? = nil
for view: UIView in volumeView.subviews {
    if (view.self.description == "MPVolumeSlider") {
        volumeViewSlider = view as? UISlider
        break
    }
}

volumeViewSlider?.setValue(0.0, animated: true)
volumeViewSlider?.sendActions(for: .touchUpInside)

答案 2 :(得分:1)

不确定你是否愿意这样做...... 声音是让某人知道正在拍摄的照片。这个想法是为了确保公众,特别是儿童的隐私和安全,“这是日本已经要求他们快乐公民的事情

日本和韩国已经制定了拍照时需要这种声音的法律。

http://abcnews.go.com/Technology/story?id=6750825&page=1

摘录:

“在日本和韩国,Segan指出,为了回应越来越多的报道”政府已经通过类似于King提出的法律。“

答案 3 :(得分:1)

重命名声音文件不会使用“私有API”;在沙盒中根本不可能(假设你没有以某种方式突破沙箱)。

但是,在4.0+上,您可以使用AVCapture来拍照。我不确定AVCaptureStillImageOutput是否播放快门声;解决方法是使用视频帧。

我不得不怀疑“我的应用程序的本质”是什么意思。如果您正在尝试进行某种实时图像处理,那么视频帧首先应该是更好的方法。如果您试图在用户允许的情况下静静地拍照,那么用户应该能够使快门声静音。如果您在未经用户许可的情况下尝试拍照,则可能违反了与Apple达成的某些协议。