7
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

[iOS11] AirPlay有効のままScreenRecordingを禁止する

Posted at

iOS11から追加されたScreenRecording、端末だけで録画ができて非常に便利ですが、音楽や映像を扱うアプリケーションにおいては大人の事情で禁止しなければならない場合がありますよね。
そんな時にScreenRecordingを禁止する方法です。

前提

ScreenRecording自体を操作するAPIは提供されていません。
よって、ScreenRecording中かどうかを検知しScreenRecording中の場合の処理をアプリケーションに実装する必要があります。
(ex.再生を停止する、アラートを表示する)

ScreenRecordingを検知

UIScreenのisCapturedにより検知します。

スクリーンレコーディング中はisCapturedの値がtrueとなります。

NSNotificationのUIScreenCapturedDidChangeを使うことでisCapturedの値が変更された時に通知を受け取ることもできます。

isCapturedはAirPlayが有効の時にもtrueとなってしまうため、
AirPlayを区別したい場合は別途AirPlay中かどうかの検知が必要となります。

AirPlayを検知

AVPlayerを使用している場合

AVPlayerを使用している場合、AirPlay中はisExternalPlaybackActiveがtrueになります。

AVPlayerを使用していない場合

AVPlayerを使用していない場合、多少強引ですがAVAudioSessionを用いて音の外部出力を調べることでAirPlay中かどうかの検知が可能です。

AVAudioSessionRouteDescription *audioRouteDesc = [[AVAudioSession sharedInstance] currentRoute];
NSArray *outputs = audioRouteDesc.outputs;
[outputs enumerateObjectsUsingBlock:^(AVAudioSessionPortDescription *audioDesc, NSUInteger idx, BOOL *stop) {
    if([audioDesc.portType isEqualToString:AVAudioSessionPortAirPlay]){
        // AirPlay中
    } 
    else {
        // その他
    }
}];

参考

7
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?