MediaBrowserCompat очередь найти элемент - PullRequest
0 голосов
/ 27 ноября 2018

Согласно 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;
} 

это работаетотлично, если в вашем списке нет нескольких тысяч элементов, это сильно отстает, есть ли способ получить индекс очереди в этом сценарии?

PS- Этот код взят из ветви v1, хотя ветка v2 на основе kotlin имеетта же концепция.

1 Ответ

0 голосов
/ 05 декабря 2018

Нет доступных API, которые бы получили это напрямую.Итак, вы должны построить свою собственную структуру данных.

Я создал HashMap из MediaId в качестве ключа и 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 для предварительной обработки должен работать для поиска / выборки с постоянным временем.

...