2013-03-28 110 views
10

請幫幫忙, 如何在Android設備從離線模式原始文件夾播放視頻?如何使用Android設備從原始文件夾播放視頻?

成功例1:我可以播放視頻從SD卡中使用下面的代碼。

Intent intent = new Intent(Intent.ACTION_VIEW); 
String type = "video/mp4"; 
Uri uri = Uri.parse("file:///sdcard/test.mp4"); 
intent.setDataAndType(uri, type); 
startActivity(intent); 

失敗例2: 問:我可以把test.mp4水庫/原始文件夾?

Intent intent = new Intent(Intent.ACTION_VIEW); 
String type = "video/mp4"; 
Uri uri = Uri.parse("android.resource://" + getPackageName() + "/" + R.raw.taipei); 
intent.setDataAndType(uri, type); 
startActivity(intent); 

有沒有人可以幫助我?請。

回答

3

檢查該解決方案How to play videos in android from assets folder or raw folder?

VideoView videoHolder = new VideoView(this); 
//if you want the controls to appear 
videoHolder.setMediaController(new MediaController(this)); 
Uri video = Uri.parse("android.resource://" + getPackageName() + "/" 
+ R.raw.your_raw_file); //do not add any extension 
//if your file is named sherif.mp4 and placed in /raw 
//use R.raw.sherif 
37

複製視頻到你的項目的res /原始文件夾中。在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(); 

在您的xml文件中創建videoView。

+0

嗨,我用你的代碼獲得以下問題: MediaPlayer的:無法創建媒體播放器 的setDataSource IOException異常happend: – 2015-12-01 13:10:30

+0

非常感謝您! * getPackageName()*救了我! – Pontios 2016-04-13 14:51:49

+1

我已經有'res/raw'下的文件夾,但是如果我有不同分辨率的視頻?即320x240,640x480,1280x720等。我如何爲每個文件夾製作不同的文件夾? – Johny 2017-04-25 12:15:55

2
// To get files from any resource folder (eg: raw, drawable, etc.) 
// Use the resource id 
int rawId = getResources().getIdentifier(file_name_without_extension, "raw", getPackageName()); 

// URI formation 
String path = "android.resource://" + getPackageName() + "/" + rawId; 

// Set the URI to play video file 
videoView.setVideoURI(Uri.parse(path)); 
+0

你應該對你的代碼提供一些解釋,因爲只有代碼的答案傾向於皺眉,除非有足夠的註釋以便不言自明。 – 2014-07-23 12:23:08

0

我爲這個動態視頻名稱而苦苦掙扎。爲我工作的解決方案是:

//Somewhere set the video name variable 
String video+name="myvideo"; 
//setup up and play video 

VideoView videoView=(VideoView)findViewById(R.id.video); 
videoView.setVisibility(View.VISIBLE); 
String uriPath = "android.resource://"+getPackageName()+"/raw/"+ video_name; 
Uri UrlPath=Uri.parse(uriPath); 
MediaController mediaController = new MediaController(this); 
mediaController.setAnchorView(videoView); 
videoView.setMediaController(mediaController); 
videoView.setVideoURI(UrlPath); 

videoView.setOnPreparedListener(new OnPreparedListener() { 
     public void onPrepared(MediaPlayer mediaPlayer) { 
      if (position == 0) { 
       try{ 
        videoView.requestFocus(); 
        videoView.start(); 
       }catch (Exception e){ 
        System.out.printf("Error playing video %s\n", e); 
       } 
      }else{ 
       videoView.pause(); 
      } 

     } 
}); 

而且在XML

<VideoView android:layout_width="300dp" 
    android:id="@+id/video" 
    android:layout_height="300dp" 
    android:orientation="horizontal" 
    android:layout_gravity="center" 
    android:keepScreenOn="true" 
    /> 
1

我想,每個人都作出了回答,但沒有解釋的情況。這裏的主要問題是,如果我不是錯,Android的假設,從你的SD卡來的視頻是動態的,在那裏它可能是可能的,該格式不支持或不支持,從而使/請你選擇或打開用於其他第三方媒體軟件。

在任何你玩RAW文件夾下,需要處理如videoview或內置導致結論是什麼,你把你的RAW文件夾應該支持/由Android操作系統可讀的媒體播放器。

然而,這裏的線程啓動希望他的RAW文件,使用第三方媒體播放器上播放。

0

該解決方案將有助於正是你,你想要什麼。

VideoView myVideo; 
private MediaController media_control; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    myVideo = (VideoView) findViewById(R.id.playVideo); 

    Uri uri = Uri.parse("android.resource://" + getPackageName() + "/" + R.raw.bootanimation_nexus); 

    media_control = new MediaController(this); 

    myVideo.setMediaController(media_control); 

    myVideo.setVideoURI(uri); 

    myVideo.start(); 

} 
+0

bootanimationnexus是我的原始文件夾中的視頻名稱 – 2016-10-19 05:10:59

相關問題