Android 调用系统播放器,调用系统Camera,自定义视频播放

1、调用系统音乐播放器

private void playAudio(String audioPath){	
		Intent intent = new Intent();  
        intent.setAction(android.content.Intent.ACTION_VIEW);
        intent.setDataAndType(Uri.parse(audioPath), "audio/mp3");
        intent.setComponent(new ComponentName("com.android.music","com.android.music.MediaPlaybackActivity"));
        startActivity(intent);
		
	}

//或者
Intent it = new Intent(Intent.ACTION_VIEW);
		it.setDataAndType(Uri.parse("/sdcard/111.mp3"), "audio/mp3");
		startActivity(it);

 

2、调用系统视频播放器

private void playVideo(String videoPath){
		   Intent intent = new Intent(Intent.ACTION_VIEW);
		   String strend="";
		   if(videoPath.toLowerCase().endsWith(".mp4")){
			   strend="mp4";
		   }
		   else if(videoPath.toLowerCase().endsWith(".3gp")){
			   strend="3gp";
		   }
		   else if(videoPath.toLowerCase().endsWith(".mov")){
			   strend="mov";
		   }
		   else if(videoPath.toLowerCase().endsWith(".wmv")){
			   strend="wmv";
		   }
		   
		   intent.setDataAndType(Uri.parse(videoPath), "video/"+strend);
		   startActivity(intent);
	   }

//或者
Intent it = new Intent(Intent.ACTION_VIEW);
		it.setDataAndType(Uri.parse("/sdcard/1122.mp4"), "video/mp4");
		startActivity(it);

 自定义视频播放控件

    private View vroot;
    private SurfaceHolder sfh;
    private SurfaceView sfv;
    protected MediaPlayer mPlayer;

private void init(){
        if(null==vroot) {
            vroot = LayoutInflater.from(mCtx).inflate(R.layout.video_container, null);
        }
        this.sfv = (SurfaceView)vroot.findViewById(R.id.video);
        sfh = this.sfv.getHolder();
//        sfh.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
        sfh.setKeepScreenOn(true);
        MonitorState mo = new MonitorState();
        sfh.addCallback(mo);

        mPlayer = new MediaPlayer();
        mPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
//        mPlayer.setWakeMode(mCtx.getApplicationContext(), PowerManager.PARTIAL_WAKE_LOCK);
        mPlayer.setOnPreparedListener(mo);
        mPlayer.setOnCompletionListener(mo);
//        mPlayer.setOnBufferingUpdateListener(mo);
        mPlayer.setOnErrorListener(mo);
    }

    class MonitorState implements SurfaceHolder.Callback ,MediaPlayer.OnPreparedListener ,
            MediaPlayer.OnErrorListener,MediaPlayer.OnCompletionListener{

        @Override
        public void surfaceCreated(SurfaceHolder holder) {
            mPlayer.setScreenOnWhilePlaying(true);
            mPlayer.setDisplay(sfh);
            Logger.d("surfaceCreated");
        }

        @Override
        public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {

        }

        @Override
        public void surfaceDestroyed(SurfaceHolder holder) {
            Logger.d("surfaceDestroyed");
            mPlayer.stop();
//            mPlayer.release();
            mPlayer.reset();
        }

        @Override
        public void onCompletion(MediaPlayer mp) {
            mHandler.sendEmptyMessageDelayed(0,200);
        }

        @Override
        public boolean onError(MediaPlayer mp, int what, int extra) {
            return false;
        }

        @Override
        public void onPrepared(MediaPlayer mp) {
            mp.start();
        }
    }

 布局文件:

<SurfaceView
        android:id="@+id/video"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

 

视频画面比例缩放处理

  private float mVideoAspectRatio = 16/9;
    private int mSurfaceWidth,mSurfaceHeight;
    private int lastSurfaceWidth,lastSurfaceHeight;

    private void changeVideoSize(int layout, float aspectRatio){
        int windowWidth = frameLayout.getWidth(), windowHeight = frameLayout.getHeight();
        if(0==windowWidth || 0==windowHeight)
            return;
        if(0!=lastSurfaceWidth && 0!=lastSurfaceHeight) {
            if (mSurfaceWidth == lastSurfaceWidth && mSurfaceHeight == lastSurfaceHeight)
                return;
        }

        ViewGroup.LayoutParams lp = new ViewGroup.LayoutParams(windowWidth,windowHeight);
        float windowRatio = windowWidth / (float) windowHeight;
        float videoRatio = aspectRatio <= 0.01f ? mVideoAspectRatio : aspectRatio;//1.7

        boolean full = layout == VIDEO_LAYOUT_STRETCH;
        lp.width = (full || windowRatio < videoRatio) ? windowWidth : (int) (videoRatio * windowHeight);
        lp.height = (full || windowRatio > videoRatio) ? windowHeight : (int) (windowWidth / videoRatio);
//        sfv.setLayoutParams(lp);
        sfv.getHolder().setFixedSize(lp.width, lp.height);

        lastSurfaceWidth = lp.width;
        lastSurfaceHeight = lp.height;
    }
public static final int VIDEO_LAYOUT_ORIGIN = 0;
public static final int VIDEO_LAYOUT_SCALE = 1;
public static final int VIDEO_LAYOUT_STRETCH = 2;
public static final int VIDEO_LAYOUT_ZOOM = 3;

 调用画面缩放

 @Override
        public void onPrepared(MediaPlayer mp) {
            mVideoWidth = mp.getVideoWidth();
            mVideoHeight = mp.getVideoHeight();
            mp.start();
            changeVideoSize(VIDEO_LAYOUT_SCALE,(float) mVideoWidth/(float)mVideoHeight);
        }
 @Override
        public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
            Logger.d("surfaceChanged");
            mSurfaceWidth = width;
            mSurfaceHeight = height;
            changeVideoSize(VIDEO_LAYOUT_SCALE,(float) mVideoWidth/(float)mVideoHeight);
        }

 

播放来自网络多媒体文件

String extension = MimeTypeMap.getFileExtensionFromUrl(url);
String mimeType = MimeTypeMap.getSingleton().getMimeTypeFromExtension(extension);
Intent mediaIntent = new Intent(Intent.ACTION_VIEW);
mediaIntent.setDataAndType(Uri.parse(url), mimeType);
startActivity(mediaIntent);

 

调用系统Camera

public class SysCamera extends Activity {

	public static final int MEDIA_TYPE_IMAGE = 1;
	public static final int MEDIA_TYPE_VIDEO = 2;

	private static final int CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE = 100;
	private static final int CAPTURE_VIDEO_ACTIVITY_REQUEST_CODE = 200;

	private Uri fileUri;
	Button btvideo,btphoto;
	
	@Override
	public void onCreate(Bundle savedInstanceState) {
	    super.onCreate(savedInstanceState);
        
	    setContentView(R.layout.syscamera);
	   
	    btphoto=(Button)findViewById(R.id.sysPhoto);
	    btvideo=(Button)findViewById(R.id.sysVideo);
	    btphoto.setOnClickListener(new Monitor());
	    btvideo.setOnClickListener(new Monitor());
	    
	}
	
	private void PhotoIntent(){
		 // create Intent to take a picture 
	    Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);

	    fileUri = getOutputMediaFileUri(MEDIA_TYPE_IMAGE); // create a file to save the image
	    intent.putExtra(MediaStore.EXTRA_OUTPUT, fileUri); // set the image file name
	    // start the image capture Intent
	    startActivityForResult(intent, CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE);
	}
	
	private void VideoIntent(){
		 //create new Intent
	    Intent intent = new Intent(MediaStore.ACTION_VIDEO_CAPTURE);

	    fileUri = getOutputMediaFileUri(MEDIA_TYPE_VIDEO);  // create a file to save the video
	    intent.putExtra(MediaStore.EXTRA_OUTPUT, fileUri);  // set the image file name
	    intent.putExtra(MediaStore.EXTRA_VIDEO_QUALITY, 1); // set the video image quality to high
	    // start the Video Capture Intent
	    startActivityForResult(intent, CAPTURE_VIDEO_ACTIVITY_REQUEST_CODE);
	}
	
	/** Create a file Uri for saving an image or video */
	private static Uri getOutputMediaFileUri(int type){
	      return Uri.fromFile(getOutputMediaFile(type));
	}

	/** Create a File for saving an image or video */
	private static File getOutputMediaFile(int type){
		if (Environment.getExternalStorageState() == null){
			return null;
		} 
	    File mediaStorageDir = new File(Environment.getExternalStoragePublicDirectory(
	              Environment.DIRECTORY_PICTURES), "MyCameraApp");
	   
	    // Create the storage directory if it does not exist
	    if (! mediaStorageDir.exists()){
	        if (! mediaStorageDir.mkdirs()){
	            Log.d("MyCameraApp", "failed to create directory");
	            return null;
	        }
	    }

	    // Create a media file name
	    String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
	    File mediaFile;
	    if (type == MEDIA_TYPE_IMAGE){
	        mediaFile = new File(mediaStorageDir.getPath() + File.separator +
	        "IMG_"+ timeStamp + ".jpg");
	    } else if(type == MEDIA_TYPE_VIDEO) {
	        mediaFile = new File(mediaStorageDir.getPath() + File.separator +
	        "VID_"+ timeStamp + ".mp4");
	    } else {
	        return null;
	    }

	    return mediaFile;
	}
	
	 @Override
	 public void onBackPressed() {
	    	Intent in=new Intent(this, MyRecorderActivity.class);
	    	startActivity(in);
	    	super.onBackPressed();
	    }
	 
	@Override
	protected void onActivityResult(int requestCode, int resultCode, Intent data) {
	    if (requestCode == CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE) {
	        if (resultCode == RESULT_OK) {
	            // Image captured and saved to fileUri specified in the Intent
	            Toast.makeText(this, "Image saved to:\n" +
	                     data.getData(), Toast.LENGTH_LONG).show();
	        } else if (resultCode == RESULT_CANCELED) {
	            // User cancelled the image capture
	        } else {
	            // Image capture failed, advise user
	        }
	    }

	    if (requestCode == CAPTURE_VIDEO_ACTIVITY_REQUEST_CODE) {
	        if (resultCode == RESULT_OK) {
	            // Video captured and saved to fileUri specified in the Intent
	            Toast.makeText(this, "Video saved to:\n" +
	                     data.getData(), Toast.LENGTH_LONG).show();
	        } else if (resultCode == RESULT_CANCELED) {
	            // User cancelled the video capture
	        } else {
	            // Video capture failed, advise user
	        }
	    }
	}
	
	class Monitor implements OnClickListener{

		@Override
		public void onClick(View v) {
			
				switch(v.getId()){
				case R.id.sysPhoto:
					PhotoIntent();
					break;
				case R.id.sysVideo:
					VideoIntent();
					break;
				}
		}
	}
}

 


 

posted @ 2012-07-16 16:49  HappyCode002  阅读(478)  评论(0编辑  收藏  举报