根据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的分支具有相同的概念。
最佳答案
没有可用的API直接为您提供帮助。因此,您必须构建自己的数据结构。
我创建了一个MediaId的HashMap作为键,并创建了Index作为其值。这将帮助您更快地获取QueueItem。然后,问题就变成了何时创建此HashMap。当您从设备中获取媒体列表(QueueItem)时,我在回调中创建了此文件。想法是在后台创建此Map。
HashMap<String, Integer> mediaIndexMap = new HashMap<String, Integer>();
int index = 0;
for (MediaSessionCompat.QueueItem item : queue) {
mediaIndexMap.put(item.getDescription().getMediaId(), index++);
}
希望此预处理QueuItem应该可以进行恒定时间的查找/获取。
关于android - MediaBrowserCompat队列查找项目,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53494927/