SORU
20 Kasım 2013, ÇARŞAMBA


Altyazı denetleyicisi zaten * hata Android takımı olmalı

Bir medya oynarken DDMS bir uyarı gösterir Should have subtitle controller already set

BENİM KOD

private void start() {
    // TODO Auto-generated method stub
    mp1.start();

        mp1.setOnCompletionListener(new OnCompletionListener() {
        @Override
        public void onCompletion(MediaPlayer mp) {
            // TODO Auto-generated method stub
            mp1.stop();
            mp1.release();
        }
    });
}

DDMS GÜNLÜK

Gereken altyazı denetleyicisi, önceden ayarlamış

/uyarı (2, 0) bilgi

Ben Google'da arama bile tek bir iş parçacığı ile ilgili ne zaman, Nasıl veya Bu kurtulmak devre dışı bırakmak alabilir miyim ?

CEVAP
22 Kasım 2013, Cuma


Bir geliştirici, son zamanlarda added subtitle support to VideoView.

MediaPlayer başlar bir müzik (veya başka bir kaynak) oynarken, eğer bir SubtitleController olup olmadığını kontrol eder ve eğer ayarlanmışsa, bu mesaj gösterilir. Eğer oynamak istediğiniz kaynağı müzik veya bir video ise umursuyor gibi görünmüyor. Bunu neden yaptığını bilmiyorum.

Kısa cevap:Bu umurumda değil"". İstisnası


Düzenleme :

Hala Lollipop, mevcut

MediaPlayer yalnızca ses dosyalarını çalmak için kullanılan ve gerçekten logcat bu hataları kaldırmak isterseniz, kodu MediaPlayer empty SubtitleController bir set feryat.

Üretim ortamında kullanılmamalıdır ve bazı yan etkileri olabilir.

static MediaPlayer getMediaPlayer(Context context){

    MediaPlayer mediaplayer = new MediaPlayer();

    if (android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.KITKAT) {
        return mediaplayer;
    }

    try {
        Class<?> cMediaTimeProvider = Class.forName( "android.media.MediaTimeProvider" );
        Class<?> cSubtitleController = Class.forName( "android.media.SubtitleController" );
        Class<?> iSubtitleControllerAnchor = Class.forName( "android.media.SubtitleController$Anchor" );
        Class<?> iSubtitleControllerListener = Class.forName( "android.media.SubtitleController$Listener" );

        Constructor constructor = cSubtitleController.getConstructor(new Class[]{Context.class, cMediaTimeProvider, iSubtitleControllerListener});

        Object subtitleInstance = constructor.newInstance(context, null, null);

        Field f = cSubtitleController.getDeclaredField("mHandler");

        f.setAccessible(true);
        try {
            f.set(subtitleInstance, new Handler());
        }
        catch (IllegalAccessException e) {return mediaplayer;}
        finally {
            f.setAccessible(false);
        }

        Method setsubtitleanchor = mediaplayer.getClass().getMethod("setSubtitleAnchor", cSubtitleController, iSubtitleControllerAnchor);

        setsubtitleanchor.invoke(mediaplayer, subtitleInstance, null);
        //Log.e("", "subtitle is setted :p");
    } catch (Exception e) {}

    return mediaplayer;
}

Bu gizli kod, API, aşağıdaki işlemleri yapmak için çalışıyor

SubtitleController sc = new SubtitleController(context, null, null);
sc.mHandler = new Handler();
mediaplayer.setSubtitleAnchor(sc, null)

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Krumme1996

    Krumme1996

    21 EYLÜL 2009
  • ParryGripp

    ParryGripp

    12 AĞUSTOS 2006
  • Strata1000

    Strata1000

    28 EYLÜL 2009