MediaBrowserCompat队列查找项目

ing*_*abh 6 android android-mediasession

根据Uamp样本onPlayFromMediaId调用时,它mediaIdqueueitems已经存储的列表匹配iterator如下

public static int getMusicIndexOnQueue(Iterable<MediaSessionCompat.QueueItem> queue,
         String mediaId) {
    int index = 0;
    for (MediaSessionCompat.QueueItem item : queue) {
        if (mediaId.equals(item.getDescription().getMediaId())) {
            return index;
        }
        index++;
    }
    return -1;
} 
Run Code Online (Sandbox Code Playgroud)

除非你的列表中有一千个项目,它的滞后程度很严重,否则这种方法很有效,在这种情况下,我有什么方法可以获得队列中的索引吗?

PS-此代码来自v1分支,尽管基于v2 kotlin的分支具有相同的概念.

Roa*_*ock 0

没有可用的 API 可以直接为您提供此信息。因此,您必须构建自己的数据结构。

我创建了一个以 MediaId 作为键、以 Index 作为其值的 HashMap。这将帮助您更快地获取 QueueItem。那么问题就变成了,什么时候创建这个HashMap。当您从设备获取媒体列表(QueueItem)时,我在回调中创建了它。这个想法是在后台创建这张地图。

HashMap<String, Integer> mediaIndexMap = new HashMap<String, Integer>();
int index = 0;
for (MediaSessionCompat.QueueItem item : queue) {
    mediaIndexMap.put(item.getDescription().getMediaId(), index++);
}
Run Code Online (Sandbox Code Playgroud)

希望这个预处理 QueueItem 应该适用于恒定时间查找/获取。