我有一个列表视图,它是从一个项目名称数组中填充的。它使用List(类)和list_item(布局)进行设置。现在我为listview行设置了click监听器,以在VideoView中播放视频,该视频是使用ClipsActivity(class)activity_clips(布局)设置的。
问题:单击ListView中的下一个活动(ClipsActivity)时加载警告“抱歉,无法播放此视频”。我肯定有资产文件夹中的视频文件。我相信 - 问题可能在于将字符串从ClickListener传递/解析到视频视图的方式。希望有人帮助我。
使用List类的代码
package com.abcdef.list;
//import android.app.Activity;
import android.app.ListActivity;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.view.View;
//import android.widget.AdapterView;
//import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.ListView;
//import android.widget.TextView;
public class List extends ListActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// storing string resources into Array
String[] clips_files = getResources().getStringArray(R.array.clips_files);
// Binding resources Array to ListAdapter
this.setListAdapter(new ArrayAdapter<String>(this, R.layout.list_item, R.id.label, clips_files));
}
@Override
protected void onListItemClick(ListView l, View v, int position, long id) {
super.onListItemClick(l, v, position, id);
change(position);
}
void change(int position){
Intent intent = new Intent(getApplicationContext(), ClipsActivity.class);
switch(position){
case 0 :
intent.setData(Uri.parse("file:///android_asset/A1.mp4"));
break;
case 1 :
intent.setData(Uri.parse("file:///android_asset/A2.mp4"));
break;
case 2 :
intent.setData(Uri.parse("file:///android_asset/A3.mp4"));
break;
case 3 :
intent.setData(Uri.parse("file:///android_asset/A4.mp4"));
break;
}
startActivity(intent);
}
}
这是用于带有VideoView的ClipsActivity类的代码
package com.abcde.list;
import android.app.Activity;
import android.content.Context;
import android.content.pm.ActivityInfo;
import android.media.MediaPlayer;
import android.net.Uri;
import android.os.Bundle;
import android.widget.MediaController;
import android.widget.VideoView;
import java.net.URI;
@SuppressWarnings("unused")
public class ClipsActivity extends Activity {
VideoView mVideoView;
MediaController mc;
// String uriPath;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_clips);
final VideoView mVideoView = (VideoView)findViewById(R.id.videoview);
MediaController mc = new MediaController(this);
mc.setAnchorView(mVideoView);
mVideoView.setMediaController(mc);
mVideoView.setVideoPath((getIntent().getDataString());
mVideoView.start();
mVideoView.setOnCompletionListener(
new MediaPlayer.OnCompletionListener() {
public void onCompletion(MediaPlayer mp) {
mVideoView.start();
}
});
}
}
答案 0 :(得分:0)
您必须将视频复制到项目的res / raw文件夹中,而不是从资源访问。在res文件夹下创建原始文件夹。它必须采用支持的格式(3gp,wmv,mp4),并在文件名中以小写,数字,下划线和点命名:video_file.mp4。
VideoView view = (VideoView)findViewById(R.id.videoView);
String path = "android.resource://" + getPackageName() + "/" + R.raw.video_file;
view.setVideoURI(Uri.parse(path));
view.start();