2012-03-22 103 views
1

我從RAW文件夾播放視頻文件的VideoActivity,的Android,自定義內容供應商

我想也可以從資產文件夾播放文件和它的子文件夾

可以說,資產/媒體/ file01.mp4

我明白我需要實現自定義的內容提供商這樣做..

誰能告訴我如何做到這一點的呢?

感謝

我VideoActivity:

package com.qualcomm.QCARSamples.ImageTargets; 

import java.io.IOException; 

import com.vstory.R; 
import com.vstory.util.ResourcesLoader; 
import com.vstory.util.MediaManager; 

import android.app.Activity; 
import android.app.ProgressDialog; 
import android.content.DialogInterface; 
import android.content.DialogInterface.OnKeyListener; 
import android.content.res.AssetFileDescriptor; 
import android.media.MediaPlayer; 
import android.media.MediaPlayer.OnCompletionListener; 
import android.media.MediaPlayer.OnErrorListener; 
import android.media.MediaPlayer.OnPreparedListener; 
import android.net.Uri; 
import android.os.Bundle; 
import android.util.Log; 
import android.view.KeyEvent; 
import android.view.SurfaceHolder; 
import android.view.View; 
import android.widget.MediaController; 
import android.widget.VideoView; 

public class VideoActivity extends Activity { 



    private VideoView _videoView; 
    private String value; 
    ProgressDialog _dialog; 

    private String titleFolder; 
    private SurfaceHolder holder; 
    protected void onCreate(Bundle savedInstanceState) 
    { 
     Log.d("VideoActivity::onCreate","Started"); 
     super.onCreate(savedInstanceState); 

     View myPreview = new View(this); 

     // Create Loading Box 
     try 
     { 
      myPreview.setBackgroundColor(android.R.color.black); 
      _dialog = ProgressDialog.show(this, "", 
        "Loading. Please wait...", true); 
      setContentView(myPreview); 
     } 
     catch(Exception e) 
     { 
      Log.e("VideoActivity::onCreate",e.getMessage()); 
     } 

     // Add Back Button Event While Loading 
     _dialog.setOnKeyListener(new OnKeyListener() { 

      public boolean onKey(DialogInterface dialog, int keyCode, KeyEvent event) { 

       if (keyCode == KeyEvent.KEYCODE_BACK) 
        finish(); 
       // TODO Auto-generated method stub 

       return false; 
      } 
     }); 

     // Add Video layout 
     setContentView(R.layout.video); 
     Log.d("VideoActivity::onCreate","Created"); 

     _videoView = (VideoView)findViewById(R.id.video_view); 


     // Init Player 
     InitializeVideoPlayer(); 
     final Bundle extras = getIntent().getExtras(); 
     if (extras == null) 
     { 
      Log.e("VideoActivity","extras == null"); 
      super.finish(); 
      return; 
     } 

     titleFolder = extras.getString("titleFolder"); 



     value = extras.getString("value"); 

     if (value == null) 
     { 
      Log.e("VideoActivity","value == null"); 
      super.finish(); 
      return; 
     } 

     if (value.contains("http")) 
     { 
       Log.d("VideoActivity::onCreate","Url Video"); 
       Uri uri = Uri.parse(value); 
       _videoView.setVideoURI(uri); 
       Play(); 
     } 
     else 
     { 
      // Local Resource 
      Log.d("VideoActivity::onCreate","Local Video"); 

      if (titleFolder == null) 
      { 
       Log.e("VideoActivity","titleFolder == null"); 
       super.finish(); 
       return; 
      } 


      // ---------------------- 
      /* 
      this.setContentView(R.layout.video);   
      // mVideoView = (VideoView) this.findViewById(R.id.surface_view);   
      holder = _videoView.getHolder(); 

      holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); 
      MediaPlayer player = new MediaPlayer(); 
      //player.setDisplay(holder);   
      AssetFileDescriptor afd; 
      try { 
       afd = getAssets().openFd(titleFolder+"/"+value);   
       player.setDataSource(afd.getFileDescriptor(),afd.getStartOffset(), afd.getLength()); 
       player.prepareAsync(); 
       player.setOnPreparedListener(new OnPreparedListener() { 

       public void onPrepared(MediaPlayer mp) { 
        _dialog.cancel(); 
        mp.start(); 
       } 
       }); 

      } catch (Exception e) { e.printStackTrace();} 
      */ 
      // ---------------------- 
      //player = new MediaPlayer(); 
      //player.setDataSource(afd.getFileDescriptor()); 
      //player.prepare(); 
      //player.start(); 

      String path; 

      value = value.substring(0, value.lastIndexOf('.')); 
      int id = getResources().getIdentifier(getPackageName()+":raw/"+value.toLowerCase(), null, null); 
      path = "android.resource://" + getPackageName() + "/" + id ; 
      //path = loader.LoadFile(value, true); 
      _videoView.setVideoPath(path); 
      Play(); 
     } 



    } 

    private void InitializeVideoPlayer() { 
     _videoView.setOnCompletionListener(new OnCompletionListener() { 

       public void onCompletion(MediaPlayer mp) { 
        finish(); 

       } 
      }); 

     _videoView.setOnPreparedListener(new OnPreparedListener() { 

       public void onPrepared(MediaPlayer mp) { 

        _dialog.cancel(); 


       } 
      }); 


     _videoView.setOnErrorListener(new OnErrorListener() { 

       public boolean onError(MediaPlayer mp, int what, int extra) { 

        Log.e("VideoActivity::onError","Error in loading movie looking for another source"); 

        return false; 
       } 
      }); 



    } 

    public void Play(){ 

     try{ 
      _videoView.setMediaController(new MediaController(this)); 
      _videoView.requestFocus();    
      _videoView.postInvalidateDelayed(100); 
      _videoView.start(); 
     } 
     catch(Exception e){ 
      Log.e("Video::Play",e.getMessage()); 
     } 
    } 


    @Override 
    protected void onPause() { 
     // TODO Auto-generated method stub 
     Log.d("VideoActivitiy","onPause"); 
     super.onPause(); 
     finish(); 
    } 

    @Override 
    protected void onStop() { 
     // TODO Auto-generated method stub 
     Log.d("VideoActivitiy","onStop"); 
     super.onStop(); 
     finish(); 
    } 

    @Override 
    public boolean onKeyDown(int keyCode, KeyEvent event) { 

     if (keyCode == KeyEvent.KEYCODE_BACK){ 

      if (_videoView.isPlaying()) 
       _videoView.stopPlayback(); 
     } 

     this.finish(); 
     return false; 


    } 
} 

回答