此为历史版本和 IPFS 入口查阅区,回到作品页
窩在艾爾
IPFS 指纹 这是什么

作品指纹

[Android教學] 如何在Android TV主畫面新增喜歡的頻道?

窩在艾爾
·
·
[Android TV教學]自定義主畫面顯示的頻道

Android TV的使用者,

一定有看過以下畫面。

顯示在Android TV的推薦影片

當看完Youtube影片後,回到主畫面後,

突然發現怎麼多了一列Youtube的顯示!?

其實這是Google將您最近觀看過的影片

顯示在主畫面,

對於使用者來說,是很體貼的設計,

不用再重新收尋之前的頻道或節目。


但是,Android TV只能推薦Google想推薦的影片而已嗎?

如果想在主畫面推薦自家的APP的話,

又該怎麼做呢?


關於這個問題,

Google有推出Tvprovider類別,

讓開發者只要將資料存到Tvprovider中,

Android就會自動幫您的資料顯示在主畫面中。


如何將資料存到Tvprovider呢?

這就需要用到另外一個實作ContentProvider類別

ContentResovler,並且使用以下的query、insert、delete、update進行資料的處理。

以下範例是在主畫面上推薦自己做的APP,

新增自己的APP到主畫面

首先,我們先要有推薦Channel和Program的認知

以下範例,黃色框為Channel,綠色框是包含在Channel裡面的PreviewProgram,

這個一定要清楚,不然資料會塞錯。

Reommen Channel and PreviewProgram

了解之後,我們就開始教學囉~

首先,我們要先創建Channel,設定好Channel資料後

在用insert的方法建立Channel

Channel channel = new Channel.Builder()
        .setDisplayName("Ailefrom")
        .setDescription("Ailefrom")
        .setDisplayNumber("Ailefrom_NUMBER")
        .setType(TvContractCompat.Channels.TYPE_PREVIEW)
        .setInputId("Ailefrom_123")
        .setOriginalNetworkId(1)
        .build();

Uri channelUri = getContentResolver().insert(TvContractCompat.Channels.CONTENT_URI, channel.toContentValues());


insert之後會有Uri回傳,此Uri就像Channel的身分一樣,若有需要,要自行存起來。

Channel建立好之後,接下來就是創建PreviewProgram內容了。

(提醒:若創建Channel,沒有PreviewProgram的內容的話,是沒辦法顯示的)


PreviewProgram的創建方法和Channel大同小異,

要注意的地方是setChannelId,

setChannelId(ContentUris.parseId(channelUri))

ChannelId是指要將目前的PreviewProgram新增到哪一個Channel中,

例如現在有A、B、C、D、E,五個Channel,但是PreviewProgram我現在只想塞到D Channel中,此時就需要將D Channel的Uri設給PreviewProgram。

Uri logoUri = Uri.parse("android.resource://" + PACKAGE_NAME + "/" + R.drawable.lb_ic_loop);
PreviewProgram content = new PreviewProgram.Builder()
        .setChannelId(ContentUris.parseId(channelUri))
        .setType(TvContractCompat.PreviewPrograms.TYPE_TV_SERIES)
        .setTitle("Ailefrom Program_"+ContentNum)
        .setDescription("Ailefrom Program_Descripton_"+ContentNum)
        .setAuthor("Ailefrom")
        .setIntent(SetIntent())
        .setPosterArtUri(logoUri)
        .build();
ContentNum++;
Uri contentUri = getContentResolver().insert(TvContractCompat.PreviewPrograms.CONTENT_URI, content.toContentValues());

資料完成後,在用Insert的方式將資料存到Tvprovider就完成了

最後完成的畫面

推薦App完成

是不是很簡單呢~


============================================

有興趣的讀者

可以到以下的GitHub網站下載Source Code,歡迎留言交流~

GitHub:

https://github.com/Ailefrom/AddRecommandChannel.git

Youtube影片 :

https://www.youtube.com/watch?v=0oNXi0qubgI

============================================


CC BY-NC-ND 2.0 授权