我可以通过调用 [UIImagePickerController takePicture:] 以编程方式使用 iPhone 拍摄照片,但是当我这样做时,iPhone 会播放快门点击的响亮录音。当我在谷歌上搜索如何关闭点击时,我找到了重命名 iPhone 播放的声音文件的建议。在我看来,我的应用程序这样做会导致它被 App Store 拒绝访问系统框架。有没有一种程序化的方式来关闭那个声音?我的应用程序的性质要求相机保持静音。
4 回答
我假设您已经解决了它,但是您的应用程序应该在 Appstore 验证中失败,因为它不符合 iOS 开发许可协议。见下文:
第 3.3.8 节:任何形式的用户或设备数据收集,或图像、图片或语音捕获或记录(统称为“记录”),以及任何形式的数据、内容或信息收集、处理、维护、上传、同步、存储、由您的应用程序执行、通过或与您的应用程序相关的传输、共享、披露或使用必须遵守所有适用的隐私法律和法规以及任何相关的计划要求,包括但不限于任何通知或同意要求。特别是,作为应用程序的一部分,必须向用户显示合理显眼的音频、视觉或其他指示符,以表明正在录制。
不知道你是否愿意这样做......声音在那里让某人知道正在拍照。这个想法是为了确保公众,尤其是儿童的隐私和安全,”日本已经要求他们的活泼快乐的公民做到这一点
日本和韩国已经有法律要求在拍照时使用这种声音。
http://abcnews.go.com/Technology/story?id=6750825&page=1
摘抄:
“在日本和韩国,Segan 指出,为了回应越来越多关于‘underskirting’的报道,政府已经通过了类似于国王提议的法律。”
重命名声音文件不会使用“私有 API”;在沙箱中根本不可能(假设您没有以某种方式突破沙箱)。
但是,在 4.0+ 上,您可以改用 AVCapture 来拍照。我不确定 AVCaptureStillImageOutput 是否播放快门声;一种解决方法是使用视频帧。
不过,我不得不想知道您所说的“我的应用程序的性质”是什么意思。如果您正在尝试进行某种实时图像处理,那么视频帧首先是一种更好的方法。如果您尝试在获得用户许可的情况下静默拍照,那么用户无论如何都应该能够使快门声音静音。如果您在未经用户许可的情况下尝试拍照,则可能违反了与 Apple 的某些协议。
对于它的价值,我能够通过在使用 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];
斯威夫特 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)