2013-03-28 6 views
10

Proszę o pomoc, Jak odtwarzać filmy na urządzeniu z systemem Android z folderu z plikami w trybie offline?Jak odtwarzać wideo z surowego folderu na urządzeniu z systemem Android?

Udany przykład1: Mogę odtworzyć wideo z karty SD, używając poniższego kodu.

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

Failed przyklad2: Pytanie: Czy mogę umieścić test.mp4 do folderu res/surowego?

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

Czy ktoś może mi pomóc? Proszę.

Odpowiedz

3

Sprawdź to rozwiązanie 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

skopiować film do folderu res/raw Twojego projektu. Utwórz surowy folder w folderze res. Musi być w obsługiwanym formacie (3gp, wmv, mp4) i nazwany małymi literami, cyframi, podkreśleniami i kropkami w nazwie pliku podobnie: 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(); 

Utwórz wideo Wyświetl w pliku xml.

+0

Witam, mam następujący problem się za pomocą kodu: MediaPlayer: Nie można tworzyć media player setDataSource IOException wydarzyło: –

+0

Dziękuję bardzo !!! * getPackageName() * mnie uratował !!! – Pontios

+1

Mam już folder pod 'res/raw', ale co jeśli mam wideo w różnych rozdzielczościach? tj. 320 x 240, 640 x 480, 1280 x 720 itd. Jak utworzyć inny folder dla każdego? – 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

Powinieneś podać kilka wyjaśnień swoim kodem, ponieważ odpowiedzi tylko na kod wydają się być niezadowolone, chyba że są wystarczająco komentowane, aby być zrozumiałym. –

0

Walczyłem z tym o dynamiczne nazwy wideo. Rozwiązanie że pracował dla mnie było:

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

     } 
}); 

I w 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

myślę, każdy dał odpowiedź, ale nie wyjaśnia scenariusz. Główny problem polega na tym, że jeśli się nie mylę, Android zakłada, że ​​wideo pochodzące z karty SD jest dynamiczne, gdzie w danym przypadku może być możliwe, że format nie jest obsługiwany lub obsługiwany, w związku z tym umożliwia/prosi o wybranie lub otwarcie dla innych programów multimedialnych stron trzecich.

Podczas gdy wszystko, co gra w folderze POD RAW, wymaga obsługi, takiej jak wideo lub wbudowany odtwarzacz multimedialny, co prowadzi do wniosku, że wszystko, co umieścisz w folderze RAW, powinno być obsługiwane/czytane przez system operacyjny Android.

Jednak tutaj starter nici chce, aby jego pliki RAW były odtwarzane za pomocą zewnętrznego odtwarzacza multimedialnego.

0

To rozwiązanie dokładnie pomoże Ci to, co chcesz.

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 to nazwa wideo wewnątrz mojego surowego folderu –