読者です 読者をやめる 読者になる 読者になる

daisuke_nomura の日記

Android プログラマーな鉄道ファンのブログ

Windows Phone 8アプリの視聴履歴をMusic + Videosハブのhistoryに保存する

はじめに
 メディアを再生するWindows Phone 8のアプリは、Music + Videosハブのhistoryに視聴履歴を保存する必要があります。


音楽・動画アプリはMusic + Videosのhistoryに視聴履歴を保存する必要がある
 Windows Phoneアプリの審査基準は当然読んだことありませんが、以前Windows Phone 8アプリがリジェクトされた際、リジェクト理由に以下のようにありました。
Requirements
The application must update the History list of the Music + Videos Hub when the application plays media.
f:id:daisuke_nomula:20130114205329p:plain

 また、Metrotube(Windows 8アプリTweetroと開発元が一緒)の設定画面を見てみると、Music + Videosハブのhistoryに視聴履歴を保存する機能が備わっており、ON/OFFができるようです。デフォルトはON。
f:id:daisuke_nomula:20130114205953p:plain


視聴履歴をMusic + Videosハブのhistoryに保存する
 方法は非常に簡単です。MediaHistoryItemクラスをインスタンスし、コンテンツのタイトルとサムネイル、その他アプリ側で必要な情報を付加。最後にMediaHistory.Instance.WriteRecentPlayにインスタンスを渡すだけです。その他アプリ側で必要な情報とは、動画アプリであれば動画を特定するためのIDなどです。後で使います。

    MediaHistoryItem mediaHistoryItem = new MediaHistoryItem();
    mediaHistoryItem.ImageStream = hogehoge;//コンテンツのサムネイル画像のストリーム
    mediaHistoryItem.Title = "新・豪血寺一族 -煩悩解放 - レッツゴー!陰陽師";//コンテンツのタイトル
    mediaHistoryItem.PlayerContext.Add("id", "sm9");//付加したい情報
    MediaHistory.Instance.WriteRecentPlay(mediaHistoryItem);//保存

f:id:daisuke_nomula:20130203203300p:plain


Music + Videosハブから起動される
 視聴履歴をhistoryに保存する方法は説明しましたが、historyに保存された動画は選択でき、選択されると履歴をhistoryに保存したアプリが起動されます。先ほど、その他アプリ側で必要な情報

    mediaHistoryItem.PlayerContext.Add("id", "sm9");付加したい情報

を追加して保存しました。この値を利用し、どの動画が選択されたのかを特定しましょう。
 まずは、UriMapperBase継承クラスを作りましょう。この辺りは、Windows Phone 8でアプリ間連携を実現する - .@daisuke_nomuraの日記と同じ手順です。

class CustomURIMapper : UriMapperBase
{
    string str = null;

    public override Uri MapUri(Uri uri)
    {
        str = HttpUtility.UrlDecode(uri.ToString());
        if (str.Contains("id"))
        {
            Match m = Regex.Match(str, @"sm(\d+)");

            if (m.Success)
                uri = new Uri(string.Format("/VideoPlayer.xaml?id={0}" m.Value), UriKind.Relative);
        }

        return uri;
    }
 }

 加えて、App.xaml.csのInitializePhoneApplicationメソッドへ、RootFrame.UriMapperにUriMapper継承クラスをインスタンスするように記述します。

        RootFrame.UriMapper = new CustomURIMapper();

 ユーザーはhistoryから動画を選択したので、起動後は通常のメニューが表示されるのではなく、動画プレイヤーが表示されることを期待します。そのため、起動後は動画プレイヤーを表示するようにNavigate先を変えましょう。


Music + Videosハブに保存した視聴履歴は削除できない
 削除するメソッドがないので、アプリから削除することができません。
 また、端末の設定を探しても見つかりませんでした。見つかったら教えて下さい。


おわりに
 この方法はWindows Phone 7アプリでも同様です。


参考
方法 Windows Phone の Music + Videos ハブと統合する
http://msdn.microsoft.com/ja-jp/library/ff769558(v=vs.92).aspx