web-dev-qa-db-ja.com

iPhoneのカメラのシャッター音を消す方法は?

[UIImagePickerController takePicture:]を呼び出すことで、プログラムでiPhoneで写真を撮ることができますが、そうすると、iPhoneはシャッタークリックの大音量の録音を再生します。クリックをオフにする方法をグーグルで検索すると、iPhoneが再生するサウンドファイルの名前を変更するアドバイスが見つかります。私のアプリがそうすることは、システムフレームワークにアクセスするためにAppStoreから拒否されることにつながるように思われます。その音を遮断するプログラム的な方法はありますか?私のアプリの性質上、カメラは無音である必要があります。

13
Mike Crawford

それ以来、あなたはそれを解決したと思いますが、iOS Dev License契約に準拠していないため、アプリはAppstoreの検証に失敗するはずです。下記参照:

セクション3.3.8:あらゆる形式のユーザーまたはデバイスのデータ収集、または画像、画像、音声のキャプチャまたは録音(総称して「録音」)、およびあらゆる形式のデータ、コンテンツ、または情報の収集、処理、保守、アップロード、同期、保存、送信、共有、開示、またはアプリケーションによって、アプリケーションを通じて、またはアプリケーションに関連して実行される使用は、すべての適用されるプライバシー法および規制、ならびに通知または同意要件を含むがこれらに限定されない関連するプログラム要件に準拠する必要があります。特に、録音が行われていることを示すために、アプリケーションの一部として、適度に目立つオーディオ、ビジュアル、またはその他のインジケーターをユーザーに表示する必要があります。

5
Zoltan Magyar

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)
1
frakman1

あなたがそれをしたいかどうかわからない...誰かに写真が撮られていることを知らせる音があります。国民、特に子どもたちのプライバシーと安全を確保することだ」と語り、日本はすでに「幸せな市民」に求めている。

日本と韓国には、写真を撮るときにこの音を要求する法律がすでにあります。

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

抜粋:

「日本と韓国では、「アンダースカート」の報告が増えていることに応えて、政府は国王が提案しているのと同様の法律を可決したとセガンは指摘した。

1
clyc

サウンドファイルの名前を変更する場合、「プライベートAPI」は使用されません。サンドボックス内からは不可能です(サンドボックスから何らかの方法で抜け出していない場合)。

ただし、4.0以降では、代わりにAVCaptureを使用して写真を撮ることができます。 AVCaptureStillImageOutputがシャッター音を鳴らすかどうかはわかりません。回避策は、ビデオフレームを使用することです。

しかし、「私のアプリの性質」とはどういう意味か疑問に思う必要があります。ある種のライブ画像処理を行おうとしているのであれば、そもそもビデオフレームの方がはるかに優れた方法です。ユーザーの許可を得て静かに写真を撮ろうとしている場合、ユーザーはとにかくシャッター音を消すことができるはずです。ユーザーの許可なしに写真を撮ろうとしている場合は、Appleとの契約に違反している可能性があります。

1
tc.