videoView Android无法播放视频

时间:2013-10-19 05:23:11

标签: android video android-videoview

我正在开发视频播放器应用。我希望此应用程序在从SD卡,相册或手机的任何文件夹中选择视频时显示为选项。当我选择我的视频播放器播放视频时,它需要应用程序,但视频不播放。我已经允许在manifest中读写外部存储。我的代码是:

 Intent in =getIntent();
 file_path = in.getData().getPath();
 System.out.println("file path from sdcard:"+file_path);
  videoView =(VideoView)findViewById(R.id.video);

   MediaController mediaController= new MediaController(this);
    mediaController.setAnchorView(videoView);        
     Uri uri=Uri.parse(file_path);        
     videoView.setVideoURI(uri);        
     videoView.requestFocus();
         videoView.start();

错误:

 10-19 10:39:40.917: I/System.out(20430): file path from sdcard:/external/video/media/24363
 10-19 10:39:40.987: E/MediaPlayer(20430): Uri is  <URL suppressed>
 10-19 10:39:40.997: E/MediaPlayer(20430): error (1, -2147483648)
 10-19 10:39:41.017: E/MediaPlayer(20430): Error (1,-2147483648)
 10-19 10:39:41.017: D/VideoView(20430): Error: 1,-2147483648
编辑:测试手机:Android 4.1内置32Gb内存,没有SD卡。

5 个答案:

答案 0 :(得分:2)

答案是here

 public String getRealPathFromURI(Uri contentUri) {
    String[] proj = { MediaStore.Video.Media.DATA };
    Cursor cursor = managedQuery(contentUri, proj, null, null, null);
    int column_index = cursor.getColumnIndexOrThrow(MediaStore.Video.Media.DATA);
    cursor.moveToFirst();
    return cursor.getString(column_index);
}

答案 1 :(得分:2)

我遇到了同样的问题,在许多不同的路径上修复它,最终最终工作的是以下代码块:

/* inside onCreate */
VideoView videoView = (VideoView)findViewById(R.id.loginVideoBackground);
videoView.setVideoURI(Uri.parse("android.resource://" + this.getPackageName() + "/raw/lights"));
videoView.start();

我之前尝试过:

  • 扩展SurfaceView
  • 使用@brinda上面给出的答案(导致NullPointerException
  • 以及StackOverflow的各种其他排列答案

....有时候更简单更好

答案 2 :(得分:0)

/external/video/media/24363不正确,请检查。当地的道路必须访问...例如。 / SD卡/视频/媒体/..

答案 3 :(得分:0)

videoView.setVideoPath("http://www.ebookfrenzy.com/android_book/movie.mp4");        MediaController mediaController = new MediaController(this);
mediaController.setAnchorView(videoView);
videoView.setMediaController(mediaController);
videoView.start();

答案 4 :(得分:0)

说实话,我在过去和每个帐户都遇到过类似的问题,我最终发现最好的解决方案是直接扩展SurfaceView。编写的代码数量惊人,并且可以轻松(相对而言)根据您的要求进行有效定制。