iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 24
0
Mobile Development

Android 音樂播放器自己來系列 第 24

播放介面實作(9) - ShortCut 頁面(功能)

  • 分享至 

  • xImage
  •  

昨天介紹了 Shortcut 的用法,今天就來串接 Shortcut 的功能,加入一個 Play song 的選項,點擊後開啟頁面並開始播歌。

設定相關字串,並設定開啟的 Package 名稱和目標的 Activity,並加入自訂的 categories 名稱,等下在 activity 內就可以接收對應的 intent 。

<shortcuts xmlns:android="http://schemas.android.com/apk/res/android">
    <shortcut
        android:enabled="true"
        android:icon="@drawable/ic_default_cover_icon"
        android:shortcutDisabledMessage="@string/shortcut_play_error"
        android:shortcutId="compose"
        android:shortcutLongLabel="@string/shortcut_play_long_label"
        android:shortcutShortLabel="@string/shortcut_play_short_label">
        <intent
            android:action="android.intent.action.VIEW"
            android:targetClass="com.fantasyfang.fancy.MainActivity"
            android:targetPackage="com.fantasyfang.fancy">
            <categories android:name="android.shortcut.play.song" />
        </intent>
    </shortcut>

</shortcuts>

在 MainActivity 內收 intent 判斷是否為設定的名稱,確認後,找到對應的 fragment 頁面,並且呼叫播歌的功能

override fun onStart() {
        super.onStart()
        if (intent?.categories?.contains("android.shortcut.play.song") == true) {
            val navHostFragment =
                supportFragmentManager.findFragmentById(R.id.nav_host_fragment) as NavHostFragment
            val songListFragment =
                navHostFragment.childFragmentManager.fragments[0] as? SongListFragment
            songListFragment?.playSongDirectly()
        }
    }

在 SongListFragment 內就可以執行播歌功能了,這邊簡化寫法,目標是等拿到歌的清單後,再開始播放,就先播清單內的第一首歌。

fun playSongDirectly() {
        Handler().postDelayed({
            clickSong(songListViewModel.songs.value?.getOrNull(0) ?: return@postDelayed)
        }, 2000)
    }

一般來說比較好的體驗會是,紀錄上次使用者最後播的歌,再從上次播的歌開始播,之後看有沒有機會來實作這塊 XD

成果圖:

https://i.imgur.com/A4wNV7B.gif

程式碼在這,分支名稱(day24_shortcuts): Fancy/day24_shortcuts


上一篇
播放介面實作(8) - Shortcut 基礎
下一篇
播放模式功能(1) - 介紹
系列文
Android 音樂播放器自己來30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言