2012-03-01 5 views
26

私はMPNowPlayingInfoCenterを更新しようとしており、少し問題があります。私はかなり苦労して、私が敗北しているところまで挑戦しました。それはiPodのアプリから既存の情報を削除するために取得しようとする試みでMPNowPlayingInfoCenter defaultCenterは情報を更新または取得しません。

[[MPNowPlayingInfoCenter defaultCenter] setNowPlayingInfo:nil]; 

(または任意:これは動作しない

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]; 


    } 

、私も試してみた:以下は私のコードですそこに情報があるかもしれない)。また、私は問題を見つけることができるかどうかを確認するために、私は、アプリの起動時に現在の情報検索しようとしました:私はこれを研究してきた

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's Docs

Change lock screen background audio controls

Now playing info ignored

+1

は、メディア再生されていますか? – Ravin

+0

私は(MPMoviePlayer経由で)オーディオを再生しようとしましたが、同じ結果ではありません。 –

+0

[MPNowPlayingInfoCenter defaultCenter]はnslogを使用しています。ドキュメンテーションでは以下のように述べています:現在インフォメーションセンターを再生しているデフォルトでは、リモート制御イベントの受信者として指定されているアプリの現在再生中の情報が保持されます。一部のリモートデバイスでメディアを再生していますか?メディアが一部のリモートデバイスで再生されていることを確認してください。 docsは次のように述べています。リモートコントロールイベントを使用すると、ユーザーはシステムトランスポートコントロールまたは外部アクセサリを通じてアプリケーションのマルチメディアを制御できます。 – Ravin

答えて

52

私は最終的に問題を考え出した、私は、リモートコントロールイベントを受け取るために私のアプリを促すていなかっただけで、この行を追加すると、問題を修正:このコードを実行するとき

[[UIApplication sharedApplication] beginReceivingRemoteControlEvents]; 
+0

素敵な仕事をしました。 – tounaobun

+0

私も同様の問題に直面しています。私は上記のすべてのメソッドを実装していますが、コントロールイベントを受け取っていません。 http://stackoverflow.com/questions/43973602/unable-to-receive-remotecontrolreceivedwithevent-objective-cios –

2

。私もあなたのように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; 

} 
+0

ええ、私はそれがYESを返すことを確認した、私はまた、plistのアプリを再生することを設定しました... –

+3

待ってください。デバイスやシミュレータでこれを試しましたか?私が気づいたシミュレータでは決して動作しません。 – deleterOfWorlds

+0

私はデバイスで試してみました...再生/一時停止ボタンから通知を受け取るために登録する必要がありますか? –

関連する問題