每当我播放媒体时,它都会在DDMS 应该已经设置了字幕控制器中显示警告

我的代码:

private void start() {
    mediaPlayer.start();

        mediaPlayer.setOnCompletionListener(new OnCompletionListener() {
        @Override
        public void onCompletion(MediaPlayer mp) {
            mp.stop();
            mp.release();
        }
    });
}

DDMS日志(log)

应该已经设置了字幕控制器

信息/警告(2,0)

当我在谷歌上搜索时,甚至没有一个与之相关的主题.我如何摆脱或禁用它?

推荐答案

一位开发商最近added subtitle support to VideoView岁.

MediaPlayer开始播放音乐(或其他来源)时,它会判断是否有字幕控制器,如果没有设置,则会显示此消息.

Short answer:.不要在意这个"例外".


Edit :

Lollipop年后仍然存在,

如果MediaPlayer仅用于播放音频文件,并且您确实希望在logcat中删除这些错误,那么下面的代码将empty SubtitleController设置为MediaPlayer.

It should not be used in production environment and may have some side effects.

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;
}

此代码try 从隐藏的API执行以下操作

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

Android相关问答推荐

道查询注释部分房间表名称

如何使禁用状态下的material 3按钮与启用状态下的 colored颜色 相同?

如何处理谷歌未经证实的应用程序拒绝?

Android应用程序中的背景问题

Android 14上的慢速意图广播交付

无法将项目添加到文件室数据库

Android可绘制边框删除底线

(已解决)从最近的应用程序打开应用程序时出错

未解析的引用:视图模型

Camera2 将图像从 ImageReader 传递到 MediaRecorder

是什么导致调用 Firebase 服务器?

Jetpack Compose Canvas drawText colored颜色 混合?

Android:ActivityCompat.requestPermissions 不显示弹窗(Android 13,targetSdkVersion=33)

从活动共享视图模型以使用 hilt 组合函数

Jetpack Compose - 每次点击按钮都不起作用

无法 HEAD 'https://jcenter.bintray.com/com/facebook/react/react-native/maven-metadata.xml'

将房间中的实体更新为 isCompleted 并使用 Flow 问题获取所有数据

如何使用 ConstraintLayout 链接两个文本

compose FontFamily 错误:必须初始化变量

如何在 Kotlin 的片段中制作图像列表?