android-studio - Android 媒体播放器 - “无法创建媒体播放器”
问题描述
我正在尝试制作一个具有 2 setForResults,Image 1的主要活动的程序,首先它去搜索图库中的视频,然后返回主要活动,在 VideoView 中按顺序播放,Image 2。之后去到可以放字幕的其他活动,然后再次回到主要活动。但此时出现警告无法播放此视频,如图3所示。
在放置字幕并转到包含其他 VideoView 的最后一个活动后,会出现一个新警告Image 4。
这是我在主要活动中的代码。我试图制作全局变量只是为了测试。
我想修复图像 3 和图像 4 的视频视图。因为我正在测试,此时我唯一的问题是 VideoView 和 MediaPlayer,在第一个之后无法再次打开视频。
public class TelaHome extends Activity {
VideoView video;
int num = 0;
ImageView videocheck;
ImageView legcheck;
Button butvideo;
Button butleg;
Button butstart;
TextView textovideo;
String nomedovideo;
String urivideo;
Uri Uridovideo;
int cont = 0;
int stop = 0;
Boolean simvid = false;
Boolean simleg = false;
Intent videointent;
Intent letraintent;
Bundle pacotemain;
Bundle letra;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.tela_home);
butstart = (Button) findViewById(R.id.butstart);
butvideo = (Button) findViewById(R.id.butvideo);
butleg = (Button) findViewById(R.id.butleg);
videocheck = (ImageView) findViewById(R.id.imgvideocheck);
legcheck = (ImageView) findViewById(R.id.imglegcheck);
textovideo = (TextView) findViewById(R.id.textovideo);
textovideo.setMovementMethod(new ScrollingMovementMethod());
video = (VideoView) findViewById(R.id.videoView);
butstart.setVisibility(View.INVISIBLE);
videocheck.setImageResource(R.mipmap.ic_not_checked);
textovideo.setText("");
MediaController mc = new MediaController(this);
mc.setAnchorView(video);
video.setMediaController(mc);
butvideo.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
launchMainActivity();
}
});
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == 1) {
if(resultCode == Activity.RESULT_OK){
videointent = data;
pacotemain = videointent.getExtras();
if (pacotemain != null) {
nomedovideo = pacotemain.getString("arquivo");
urivideo = pacotemain.getString("curPF");
if (urivideo != null) {
Uridovideo = Uri.parse(urivideo);
video.setVideoURI(Uridovideo);
video.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer arg0) {
video.start();
}
});
}
String formato = "";
char[] lala;
if (nomedovideo != null) {
lala = (nomedovideo.toCharArray());
int x = nomedovideo.length();
for (int i = x - 3; i < x; i++) {
formato = (formato + lala[i]);
}
textovideo.setText(nomedovideo);
}
}
final Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
if (video.isPlaying()) {
cont++;
videocheck.setImageResource(R.mipmap.ic_checked);
simvid = true;
}
}
}, 1000);
}
}
if (requestCode == 7) {
if(resultCode == Activity.RESULT_OK){
letraintent = data;
letra = letraintent.getExtras();
if (letra != null){
legcheck.setImageResource(R.mipmap.ic_checked);
simleg = true;
}
}
}
final Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
abrirplay(simvid,simleg, pacotemain, letra);
}
}, 1500);
}//onActivityResult
我尝试了几次,例如:我在“requestCode == 1”和“requestCode == 7”的“if(resultCode == Activity.CANCELED)”中在受保护的 void OnCreate 中重复了这段代码
if (pacotemain != null) {
nomedovideo = pacotemain.getString("arquivo");
urivideo = pacotemain.getString("curPF");
if (urivideo != null) {
Uridovideo = Uri.parse(urivideo);
video.setVideoURI(Uridovideo);
video.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer arg0) {
video.start();
}
});
解决方案
推荐阅读
- reactjs - React:nextProps 和 state 总是相同的;因此组件不会重新渲染
- python - 如何获取内存使用情况和交换空间使用情况?
- java - java - 将堆空间增加到最大限制
- r - 通过用逗号分隔值打破列来创建唯一行
- c++ - 在 Linux 上终止以提升的权限运行的进程时,套接字锁定
- javascript - 未捕获的 ReferenceError:未定义 firebase(在 p5js 编辑器上)
- ssl - 配置了代理的 get_server_certificate() 的替代方案
- java - 我的程序运行不正常,为什么不能正确读取用户名和密码?
- node.js - 排序可能包含整数和小数的mongodb字段?
- angular - 使用 routerLink 重新打开父组件后,Angular 不应用更改