首页 > 解决方案 > 无法使用 VideoView 播放视频

问题描述

我想播放 4 个不同的视频(当按下 4 个不同的按钮时),它们在我手机的内部存储中。所有按钮都在DashBoardActivity。当按下 a时,我通过为每个视频创建并放置一个唯一的整数来Button开始一个新的按钮单击。这是我的代码VideoActivityIntentDashBoardActivty

 Button b1= findViewById(R.id.education_button);
  b1.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent i = new Intent(DashboardActivity.this,VideoActivity.class);
            i.putExtra(sBUTTON_,1);
            startActivity(i);
        }
    });

这是我的代码VideoActivity

public class VideoActivity extends AppCompatActivity {
int j;
VideoView vid;
Uri uri;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_video);
    Intent i = getIntent();
     j = i.getIntExtra(DashboardActivity.sBUTTON_,1);
    vid=(VideoView) findViewById(R.id.video);

    if(j==1)
        uri=Uri.parse(Environment.getExternalStorageDirectory().getAbsolutePath()+"/Movies/MoShow/Educations.mp4");

runOnUiThread(new Runnable() {
        @Override
        public void run() {

            vid.setVideoURI(uri);
            vid.start();


        }
    });
  }
  }//end of class

当我在物理设备上安装应用程序时。我收到一个错误

无法播放此视频

但是,当我看到logcat它显示的错误是

? E/ViewRootImpl:非 UI 线程上的可访问性内容更改。未来的 Android 版本将引发异常。android.view.ViewRootImpl$CalledFromWrongThreadException:只有创建视图层次结构的原始线程才能接触其视图。

我很困惑这是否是视频格式(编解码器)问题(我在手机屏幕上看到“无法播放此视频”)。我试着按照这篇 文章来解决

CalledFromWrongThreadException

但我得到了同样的错误。下面是我的 XML 文件VideoActivity

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
            xmlns:app="http://schemas.android.com/apk/res-auto"
            xmlns:tools="http://schemas.android.com/tools"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:background="#000000"
            tools:context="com.example.srini.animtest.VideoActivity">


<VideoView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/video"/>

</RelativeLayout>

标签: androidandroid-videoview

解决方案


尝试这个:

vid.setVideoURI(uri);

vid.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
        @Override
        public void onPrepared(MediaPlayer mp) {

        vid.start();

        }
    });

推荐阅读