1

我正在开发视频播放器应用程序。我希望这个应用程序显示为从 sdcard、相册或手机的任何文件夹中选择视频的选项。当我选择我的视频播放器播放视频时,它需要应用程序但视频没有播放。我已授予在清单中读取和写入外部存储的权限。以下是我的代码:

 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

编辑:测试手机:具有 32Gb 内置内存且没有 SD 卡的 Android 4.1。

4

5 回答 5

2

答案在这里

 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);
}
于 2013-10-21T10:43:29.410 回答
2

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

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

我之前尝试过:

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

....有时更简单更好

于 2014-07-01T18:58:04.693 回答
0

/external/video/media/24363不正确,请检查。本地路径必须是访问..eg /sdcard/video/media/..

于 2013-10-19T05:35:51.333 回答
0
videoView.setVideoPath("http://www.ebookfrenzy.com/android_book/movie.mp4");        MediaController mediaController = new MediaController(this);
mediaController.setAnchorView(videoView);
videoView.setMediaController(mediaController);
videoView.start();
于 2013-10-19T05:35:54.803 回答
0

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

于 2013-10-19T06:46:52.227 回答