web-dev-qa-db-ja.com

MPNowPlayingInfoCenter defaultCenterは、情報を更新または取得しません

MPNowPlayingInfoCenterの更新に取り組んでおり、少し問題があります。私は途方に暮れるところまでかなり努力しました。以下は私のコードです:

_    self.audioPlayer.allowsAirPlay = NO;

    Class playingInfoCenter = NSClassFromString(@"MPNowPlayingInfoCenter");

    if (playingInfoCenter) {

        NSMutableDictionary *songInfo = [[NSMutableDictionary alloc] init];

        MPMediaItemArtwork *albumArt = [[MPMediaItemArtwork alloc] initWithImage:[UIImage imageNamed:@"series_placeholder"]];

        [songInfo setObject:thePodcast.title forKey:MPMediaItemPropertyTitle];
        [songInfo setObject:thePodcast.author forKey:MPMediaItemPropertyArtist];
        [songInfo setObject:@"NCC" forKey:MPMediaItemPropertyAlbumTitle];
        [songInfo setObject:albumArt forKey:MPMediaItemPropertyArtwork];

        [[MPNowPlayingInfoCenter defaultCenter] setNowPlayingInfo:songInfo];


    }
_

これは機能していません、私も試しました:

_   [[MPNowPlayingInfoCenter defaultCenter] setNowPlayingInfo:nil];
_

IPodアプリ(またはそこに情報があるかもしれないもの)から既存の情報を削除するためにそれを取得しようとしています。さらに、問題を見つけることができるかどうかを確認するために、アプリの起動時に現在の情報を取得しようとしました。

_  NSDictionary *info = [[MPNowPlayingInfoCenter defaultCenter] nowPlayingInfo];
  NSString *title = [info valueForKey:MPMediaItemPropertyTitle];
  NSString *author = [info valueForKey:MPMediaItemPropertyArtist];

  NSLog(@"Currently playing: %@ // %@", title, author);
_

そして私はCurrently playing: (null) // (null)を取得します

私はこれをかなり研究しました、そして以下の記事はそれをかなり徹底的に説明します、しかし私はまだこれをきちんと働かせることができません。私は何かが足りないのですか?これを妨げるものはありますか?これは、アプリがアクセスするために登録する必要があるサービスですか(これはどのドキュメントにも表示されていません)?

Appleのドキュメント

ロック画面の背景のオーディオコントロールを変更する

再生情報は無視されます

28
Jayson Lane

私はついに問題を理解しました。リモートコントロールイベントを受信するようにアプリにプロンプ​​トを表示するのではなく、次の行を追加するだけで問題が修正されました。

 [[UIApplication sharedApplication] beginReceivingRemoteControlEvents];
55
Jayson Lane

私は以下のコードを使用し、それは常に機能します。私もあなたのようにMPMoviePlayerを使っています。 NSClassFromString(@"MPNowPlayingInfoCenter")が実際にYESを返すかどうかを確認しましたか? plistのバックグラウンドキーでアプリの再生オーディオを設定しましたか?

- (void) loadMPInformation
{
    NSDictionary *mpInfo;

    if([savedTrack.belongingAlbum.hasAlbumArt boolValue] == NO){
        mpInfo = [NSDictionary dictionaryWithObjectsAndKeys:savedTrack.belongingAlbum.album, MPMediaItemPropertyAlbumTitle, 
                  savedTrack.belongingArtist.artist, MPMediaItemPropertyArtist, savedTrack.name, MPMediaItemPropertyTitle, nil];   
    } else {
        UIImage *artImage = [UIImage imageWithData:savedTrack.belongingAlbum.art];
        MPMediaItemArtwork *artwork = [[MPMediaItemArtwork alloc] initWithImage:artImage];
        mpInfo = [NSDictionary dictionaryWithObjectsAndKeys:savedTrack.belongingAlbum.album, MPMediaItemPropertyAlbumTitle, 
                  savedTrack.belongingArtist.artist, MPMediaItemPropertyArtist, savedTrack.name, MPMediaItemPropertyTitle, artwork, MPMediaItemPropertyArtwork, nil];
    }
    [MPNowPlayingInfoCenter defaultCenter].nowPlayingInfo = mpInfo;

}
2
deleterOfWorlds