MediaBrowserCompat队列查找项目

时间:2018-11-27 07:45:51

标签: android android-mediasession

根据Uamp的示例,当调用onPlayFromMediaId时,其mediaId与已经使用queueitems存储的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;
} 

这很好用,除非您的列表中有几千个项目,否则情况会严重滞后,在这种情况下,有什么方法可以使索引排队吗?

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

1 个答案:

答案 0 :(得分:0)

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

我创建了一个MediaId的HashMap作为键,并创建了Index作为其值。这将帮助您更快地获取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++);
}

希望此预处理QueuItem应该能够进行恒定时间的查找/获取。