2010-11-21 40 views
13

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

+3

+1 to counter -1。 – 2010-11-21 04:50:20

+0

我想这样做 - 我试图快速录制大量静止图像(通过AVCaptureStillImageOutput),并且在这方面不停的快门声音非常不受欢迎。 – 2012-06-25 17:26:35

+1

正如其他人所说,这使得你在几个国家的法律错误的一面。 – 2013-07-30 03:04:47

回答

1

不知道你是否想要这样做... 声音在那里让别人知道照片正在拍摄。这样做是为了确保公众,特别是儿童,”日本已经要求他们爱拍公民

日本和韩国已经有拍照时需要这种健全的法律什么的私密性和安全性。

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

摘录:“政府已经通过了一个类似国王的法律提出了‘

’在日本和韩国,Segan指出,为应对安装报告” underskirting,

+0

如果用户愿意,可以静音。我保持沉默的手机;相机不发声。它是日本手机的专用外壳。 – 2010-11-21 04:48:44

+0

另请注意:摄像机不会发出稳定的声音,是吗?所以任何人都可以很容易地避免被视频录制带来的注意 - 特别是因为iPhone摄像头没有显示我们通常在专用摄像机上看到的红色录制灯。 – 2012-06-25 17:25:05

+0

这不是一个答案,而只是一个意见。 – 2013-04-21 07:07:17

1

重命名声音文件不会使用“私有API”;从沙箱内无法完成(假设您没有以某种方式打破沙箱)。

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

我不得不去想你的意思是“我的应用程序的性质”。如果您正在尝试进行某种实时图像处理,则视频帧首先是一种更好的方式。如果您尝试在用户许可的情况下默默拍摄照片,则用户应该能够静音快门声音。如果您在未经用户许可的情况下尝试拍照,您可能违反了与Apple的某些协议。

+8

AVCaptureStillImageOutput播放声音 – ohho 2010-12-13 11:04:21

5

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

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

+1

“必须向用户显示合理显眼的音频,视觉或其他指示符” - 只要OP提供视频指示记录正在进行,只要声音仍然可以关闭与当地的隐私法律没有冲突,在这种情况下,应用程序可能会将声音留给某些市场。 – 2012-06-06 03:53:07

+0

你可以用几种方式解释它。但在这种情况下,只有苹果公司的解释才算是因为他们会拒绝你的应用程序(如他们所做的那样),如果相机默默地拍照。 – 2012-06-26 13:29:47

+0

我有3个应用程序生活在AppStore中,因为这个问题没有被拒绝,但是在我们通知用户相机已启用的所有3个应用程序中。 – 2012-10-11 21:04:58

1

对于什么是值得的,我可以通过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];