Oynatma görünümünde benzersiz özellikleri desteklemek için özel oynatma işlemleri'ni kullandığınız gibi, göz atma görünümlerinde benzersiz özellikleri desteklemek için özel göz atma işlemleri kullanabilirsiniz. Örneğin, kullanıcıların oynatma listelerini indirmesini veya bir öğeyi sıraya eklemesini sağlamak için özel göz atma işlemleri kullanabilirsiniz.
Orijinal Ekipman Üreticisi (OEM) tarafından gösterilenden daha fazla özel işlem olduğunda kullanıcıya taşma menüsü gösterilir. Her özel göz atma işlemi aşağıdakilerle tanımlanır:
- İşlem kimliği: Benzersiz dize tanımlayıcısı
- İşlem etiketi: Kullanıcıya gösterilen metin
- İşlem simgesi tekdüzen kaynak tanımlayıcısı (URI): Renklendirilebilen vektör çizilebilir öğe

1.şekil Özel göz atma işlemi taşması.
BrowseRoot kapsamında genel olarak özel göz atma işlemleri listesi tanımlarsınız. Ardından, bu işlemlerin bir alt kümesini tek tek MediaItem öğelerine ekleyin.
Kullanıcı özel bir göz atma işlemiyle etkileşimde bulunduğunda uygulamanız onCustomAction içinde bir geri çağırma alır. Ardından işlemi gerçekleştirir ve gerekirse MediaItem için işlem listesini güncellersiniz. Bu, Favori ve İndir gibi durum bilgisi içeren işlemler için kullanışlıdır. Radyo Çal gibi güncelleme gerektirmeyen işlemler için işlem listesini güncellemeniz gerekmez.

Şekil 2. Özel göz atma işlemi araç çubuğu.
Ayrıca bir göz atma düğümü köküne özel göz atma işlemleri de ekleyebilirsiniz. Bu işlemler, birincil araç çubuğunun altındaki ikincil araç çubuğunda gösterilir.
Uygulamanıza özel göz atma işlemleri eklemek için:
MediaBrowserServiceCompatuygulamanızda iki yöntemi geçersiz kılın:Çalışma zamanında işlem sınırlarını ayrıştırın:
onGetRootiçinde,rootHintsBundlebölümündekiBROWSER_ROOT_HINTS_KEY_CUSTOM_BROWSER_ACTION_LIMITanahtarını kullanarak herMediaItemiçin izin verilen maksimum işlem sayısını alın. 0 sınırı, özelliğin sistem tarafından desteklenmediğini gösterir.Özel göz atma işlemlerinin genel listesini oluşturun. Her işlem için aşağıdaki anahtarlara sahip bir
Bundlenesnesi oluşturun:- İşlem kimliği
EXTRAS_KEY_CUSTOM_BROWSER_ACTION_ID - İşlem etiketi
EXTRAS_KEY_CUSTOM_BROWSER_ACTION_LABEL - İşlem simgesi URI'si
EXTRAS_KEY_CUSTOM_BROWSER_ACTION_ICON_URI
- İşlem kimliği
Tüm işlem
Bundlenesnelerini bir listeye ekleyin.Global listeyi
BrowseRootöğenize ekleyin.BrowseRootekstralarındaBundle,BROWSER_SERVICE_EXTRAS_KEY_CUSTOM_BROWSER_ACTION_ROOT_LISTtuşunu kullanarak işlem listesiniParcelableArrayListolarak ekleyin.MediaItemnesnelerinize işlem ekleyin. İşlem kimlikleri listesiniDESCRIPTION_EXTRAS_KEY_CUSTOM_BROWSER_ACTION_ID_LISTanahtarını kullanarakMediaDescriptionCompateklerine dahil ederek işlemleri tek tekMediaItemnesnelerine ekleyebilirsiniz. Bu liste,BrowseRootiçinde tanımladığınız genel işlem listesinin bir alt kümesi olmalıdır.İşlemleri gerçekleştirme ve ilerleme durumunu veya sonuçları döndürme:
onCustomActioniçinde, işlemi işlem kimliğine ve ihtiyaç duyduğunuz diğer verilere göre ele alın.EXTRAS_KEY_CUSTOM_BROWSER_ACTION_MEDIA_ITEM_IDanahtarını kullanarak ekstralardan işlemi tetikleyenMediaItemöğesinin kimliğini alabilirsiniz.İlerleme veya sonuç paketine
EXTRAS_KEY_CUSTOM_BROWSER_ACTION_RESULT_REFRESH_ITEManahtarını ekleyerekMediaItemiçin işlem listesini güncelleyebilirsiniz.
İşlem durumunu güncelleme
MediaBrowserServiceCompat'da bu yöntemleri geçersiz kılmak için:
public void onLoadItem(String itemId, @NonNull Result<MediaBrowserCompat.MediaItem> result)
ve
public void onCustomAction(@NonNull String action, Bundle extras, @NonNull Result<Bundle> result)
Ayrıştırma işlemleri sınırı
Kaç özel göz atma işleminin desteklendiğini kontrol edin:
public BrowserRoot onGetRoot(@NonNull String clientPackageName, int clientUid, Bundle rootHints) {
rootHints.getInt(
MediaConstants.BROWSER_ROOT_HINTS_KEY_CUSTOM_BROWSER_ACTION_LIMIT, 0)
}
Özel göz atma işlemi oluşturma
Her işlem ayrı bir Bundle içine yerleştirilmelidir.
İşlem kimliği:
bundle.putString(MediaConstants.EXTRAS_KEY_CUSTOM_BROWSER_ACTION_ID, "<ACTION_ID>")İşlem etiketi:
bundle.putString(MediaConstants.EXTRAS_KEY_CUSTOM_BROWSER_ACTION_LABEL, "<ACTION_LABEL>")İşlem simgesi URI'si:
bundle.putString(MediaConstants.EXTRAS_KEY_CUSTOM_BROWSER_ACTION_ICON_URI, "<ACTION_ICON_URI>")
Parcelable ArrayList'e özel göz atma işlemleri ekleme
Tüm özel göz atma işlemi Bundle nesnelerini bir ArrayList içine ekleyin:
private ArrayList<Bundle> createCustomActionsList(
CustomBrowseAction browseActions) {
ArrayList<Bundle> browseActionsBundle = new ArrayList<>();
for (CustomBrowseAction browseAction : browseActions) {
Bundle action = new Bundle();
action.putString(EXTRAS_KEY_CUSTOM_BROWSER_ACTION_ID,
browseAction.mId);
action.putString(EXTRAS_KEY_CUSTOM_BROWSER_ACTION_LABEL,
getString(browseAction.mLabelResId));
action.putString(EXTRAS_KEY_CUSTOM_BROWSER_ACTION_ICON_URI,
browseAction.mIcon);
browseActionsBundle.add(action);
}
return browseActionsBundle;
}
Göz atma köküne özel göz atma işlemi listesi ekleme
public BrowserRoot onGetRoot(@NonNull String clientPackageName, int clientUid,
Bundle rootHints) {
Bundle browserRootExtras = new Bundle();
browserRootExtras.putParcelableArrayList(
BROWSER_SERVICE_EXTRAS_KEY_CUSTOM_BROWSER_ACTION_ROOT_LIST,
createCustomActionsList()));
mRoot = new BrowserRoot(ROOT_ID, browserRootExtras);
return mRoot;
}
MediaItem'a işlem ekleme
MediaItem içindeki göz atma işlemi kimlikleri, onGetRoot üzerinde verilen genel göz atma işlemi listesinin bir alt kümesi olmalıdır. Genel listede olmayan işlemler yoksayılır.
MediaDescriptionCompat buildDescription (long id, String title, String subtitle,
String description, Uri iconUri, Uri mediaUri,
ArrayList<String> browseActionIds) {
MediaDescriptionCompat.Builder bob = new MediaDescriptionCompat.Builder();
bob.setMediaId(id);
bob.setTitle(title);
bob.setSubtitle(subtitle);
bob.setDescription(description);
bob.setIconUri(iconUri);
bob.setMediaUri(mediaUri);
Bundle extras = new Bundle();
extras.putStringArrayList(
DESCRIPTION_EXTRAS_KEY_CUSTOM_BROWSER_ACTION_ID_LIST,
browseActionIds);
bob.setExtras(extras);
return bob.build();
}
MediaItem mediaItem = new MediaItem(buildDescription(...), flags);
Build onCustomAction sonucu
Sonucu oluşturmak için:
Bundle extrasuygulamasındanmediaIdöğesini ayrıştır@Override public void onCustomAction( @NonNull String action, Bundle extras, @NonNull Result<Bundle> result){ String mediaId = extras.getString(MediaConstans.EXTRAS_KEY_CUSTOM_BROWSER_ACTION_MEDIA_ITEM_ID); }Eşzamansız sonuçlar için sonucu ayırın
result.detach.Sonuç paketini oluşturun:
Kullanıcıya bir mesaj gösterin:
mResultBundle.putString(EXTRAS_KEY_CUSTOM_BROWSER_ACTION_RESULT_MESSAGE, mContext.getString(stringRes))Öğeyi güncelleme (bir öğedeki işlemleri güncellemek için kullanılır):
mResultBundle.putString(EXTRAS_KEY_CUSTOM_BROWSER_ACTION_RESULT_REFRESH_ITEM, mediaId);Oynatma görünümünü açın:
//Shows user the PBV without changing the playback state mResultBundle.putString(EXTRAS_KEY_CUSTOM_BROWSER_ACTION_RESULT_SHOW_PLAYING_ITEM, null);Göz atma düğümünü güncelleyin:
//Change current browse node to mediaId mResultBundle.putString(EXTRAS_KEY_CUSTOM_BROWSER_ACTION_RESULT_BROWSE_NODE, mediaId);
Sonucu kontrol edin:
- Hata:
result.sendError(resultBundle)numaralı telefonu arama - İlerleme durumu güncellemesi:
result.sendProgressUpdate(resultBundle)görüşmesi - Bitir: Telefon etme
result.sendResult(resultBundle)
- Hata:
İşlem durumunu güncelleme
result.sendProgressUpdate(resultBundle) yöntemini EXTRAS_KEY_CUSTOM_BROWSER_ACTION_RESULT_REFRESH_ITEM anahtarıyla kullanarak MediaItem değerini işlemin yeni durumunu yansıtacak şekilde güncelleyebilirsiniz. Bu sayede, kullanıcılara işlemlerinin ilerleme durumu ve sonucu hakkında anlık geri bildirim sağlayabilirsiniz.
Örnek indirme işlemi
Bu örnekte, bu özelliği kullanarak üç durumlu bir indirme işlemi nasıl uygulayabileceğiniz açıklanmaktadır:
İndirme, işlemin ilk durumudur. Kullanıcı bu işlemi seçtiğinde, bunu indirme işlemiyle değiştirebilir ve kullanıcı arayüzünü (UI) güncellemek için
sendProgressUpdateişlevini çağırabilirsiniz.İndiriliyor durumu, indirme işleminin devam ettiğini gösterir. Bu durumu, kullanıcıya bir ilerleme çubuğu veya başka bir gösterge göstermek için kullanabilirsiniz.
İndirildi durumu, indirme işleminin tamamlandığını gösterir. İndirme işlemi tamamlandığında, İndiriliyor'u İndirildi olarak değiştirebilir ve öğenin yenilenmesi gerektiğini belirtmek için
sendResultişleviniEXTRAS_KEY_CUSTOM_BROWSER_ACTION_RESULT_REFRESH_ITEManahtarıyla çağırabilirsiniz. Ayrıca, kullanıcıya başarı mesajı göstermek içinEXTRAS_KEY_CUSTOM_BROWSER_ACTION_RESULT_MESSAGEanahtarını da kullanabilirsiniz.
Bu yaklaşım, indirme süreci ve mevcut durumu hakkında kullanıcıya net geri bildirim vermenizi sağlar. %25, %50 ve% 75 indirme durumlarını göstermek için simgelerle daha fazla ayrıntı ekleyebilirsiniz.
Örnek favori işlemi
Bir başka örnek de iki durumu olan favori bir işlem:
Kullanıcının favoriler listesinde olmayan öğeler için Favori gösterilir. Kullanıcı bu işlemi seçtiğinde, işlemi Favorited ile değiştirin ve kullanıcı arayüzünü güncellemek için
sendResultişleviniEXTRAS_KEY_CUSTOM_BROWSER_ACTION_RESULT_REFRESH_ITEManahtarıyla çağırın.Kullanıcının favoriler listesindeki öğeler için Favorilere eklendi gösterilir. Kullanıcı bu işlemi seçtiğinde Favori ile değiştirin ve kullanıcı arayüzünü güncellemek için
sendResult'ıEXTRAS_KEY_CUSTOM_BROWSER_ACTION_RESULT_REFRESH_ITEManahtarıyla çağırın.
Bu yaklaşım, kullanıcıların favori öğelerini yönetmesi için net ve tutarlı bir yol sunar. Bu örnekler, özel göz atma işlemlerinin esnekliğini ve arabanın Medya uygulamasında gelişmiş bir kullanıcı deneyimi için gerçek zamanlı geri bildirimle çeşitli işlevleri uygulamak üzere bu işlemleri nasıl kullanabileceğinizi gösterir.
Bu özelliğin kapsamlı bir örnek uygulamasını TestMediaApp projesinde görebilirsiniz.