2013-03-28 2 views
10

Please help, Come riprodurre video nel dispositivo Android dalla cartella raw per la modalità offline?Come riprodurre video da una cartella raw con un dispositivo Android?

Esempio di successo1: Posso riprodurre il video da SDcard utilizzato il seguente codice.

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); 

example2 non riuscita: Domanda: Posso mettere la test.mp4 alla res cartella/raw?

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); 

Qualcuno può aiutarmi? Per favore.

risposta

3

controllare questa soluzione 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

Copiare il video in res cartella/grezzo del progetto. Crea una cartella raw nella cartella res. Deve essere in un formato supportato (3gp, wmv, mp4) e nominato con lettere minuscole, numeri, caratteri di sottolineatura e punti nel suo nome file allo stesso modo: 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(); 

Creare videoVisualizza nel file xml.

+0

Ciao, sto diventando seguente problema utilizzando il tuo codice: MediaPlayer: impossibile creare media player setDataSource IOException happend: –

+0

Grazie mille !!! il * getPackageName() * mi ha salvato !!! – Pontios

+1

Ho già una cartella in 'res/raw' ma cosa succede se ho il mio video in diverse risoluzioni? Ad esempio 320x240, 640x480, 1280x720 ecc. Come faccio a creare una cartella diversa per ciascuna di esse? – Johny

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

Dovresti fornire alcune spiegazioni con il tuo codice in quanto le sole risposte del codice tendono ad essere disapprovate a meno che non siano commentate abbastanza per essere auto-esplicative. –

0

Ho faticato con questo per i nomi di video dinamici. La soluzione che ha funzionato per me è stato:

//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(); 
      } 

     } 
}); 

E in 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

penso, tutti hanno dato una risposta, ma non spiega lo scenario. Il problema principale qui è che, se non sbaglio, Android presume che il video proveniente dalla scheda SD sia dinamico, dove potrebbe essere possibile, che il formato non sia supportato o supportato, quindi abilita/chiede di selezionare o aprire per altri software multimediali di terze parti.

Mentre si suona una cartella UNDER RAW, è necessario un gestore come videoview o lettore multimediale incorporato che porti alla conclusione che tutto ciò che si inserisce nella cartella RAW deve essere supportato/leggibile dal sistema operativo Android.

Tuttavia, l'avviatore di thread qui vuole che i suoi file RAW vengano riprodotti utilizzando un lettore multimediale di terze parti.

0

Questa soluzione ti aiuterà esattamente ciò che desideri.

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 è il nome del video all'interno della mia cartella raw –