根据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的分支具有相同的概念。
答案 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应该能够进行恒定时间的查找/获取。