2010-11-21 37 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];