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