9

ヘッドフォンの再生/一時停止ボタン イベントをフォアグラウンドで処理する必要があります。以下のコードを使用して、バックグラウンドで同じシナリオをどのように処理できるか

if ([[UIApplication sharedApplication] respondsToSelector:@selector(beginReceivingRemoteControlEvents)]){
    [[UIApplication sharedApplication] beginReceivingRemoteControlEvents];
    [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:NULL];
    [self becomeFirstResponder];
    NSLog(@"Responds!");
}

可能であれば、説明またはサンプルコードを手伝ってください。私は多くの調査を行いましたが、助けにはなりません。

4

3 に答える 3

13

ヘッドフォンからプレーヤー コントロールを実装する別の方法があります。MPRemoteCommandCentertooglePlayPauseCommand を使用します。アップルのドキュメント

[[MPRemoteCommandCenter sharedCommandCenter].togglePlayPauseCommand addTarget:self action:@selector(onTooglePlayPause)];
于 2015-07-27T09:37:31.870 に答える
12

次の基準を確認する必要があります。

  1. info.plist を編集して、フォアグラウンドだけでなくバックグラウンドでもオーディオ (UIBackgroundModes) を行うことを規定します。
  2. この関数を実装します。

    - (void)remoteControlReceivedWithEvent:(UIEvent *)theEvent 
    {
      if (theEvent.type == UIEventTypeRemoteControl)
      {
        switch(theEvent.subtype) {
        case UIEventSubtypeRemoteControlTogglePlayPause:
                //Insert code
                break;
            case UIEventSubtypeRemoteControlPlay:
                //Insert code
                break;
            case UIEventSubtypeRemoteControlPause:
                // Insert code
                break;
            case UIEventSubtypeRemoteControlStop:
                //Insert code.
                break;
            default:
                return;
        }
      }
    }
    

...明らかに、「//insert code」をアプリに関連する機能に置き換えてください。

3>最後に、上記の関数を呼び出すために、これを viewDidAppear イベントに挿入します。

[[UIApplication sharedApplication] beginReceivingRemoteControlEvents];
    if ([self canBecomeFirstResponder]) {
        [self becomeFirstResponder];
    }

このリンクも参照してください: http://www.sagorin.org/2011/11/29/ios-playing-audio-in-background-audio/

于 2013-03-15T05:22:22.967 に答える
4

slobodan ソリューションの迅速な 2 バージョン:

MPRemoteCommandCenter.sharedCommandCenter().togglePlayPauseCommand.addTarget(self, action: #selector(togglePlayStop(_:)));
于 2016-06-17T07:04:20.927 に答える