Android之多媒体基础

使用SoundPool播放声音

SoundPool一般用于播放简短的游戏音效,不能用来播放整首声乐。

	private SoundPool sp;	
	private int soundID;	

	sp = new SoundPool(1, AudioManager.STREAM_MUSIC, 0);
	soundID = sp.load(this, R.raw.song, 1);
	sp.play(soundID, 1, 1, 0, 0, 1);

使用MediaPlayer播放音乐

private MediaPlayer mp;
	/**
	 * 播放音乐
	 */
	@Override
	protected void onResume() {
		mp = MediaPlayer.create(this, R.raw.music);
		try {
			mp.prepare();
		} catch (IllegalStateException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		super.onResume();
	}
	/**
	 * 停止音乐
	 */
	@Override
	protected void onPause() {
		if (mp != null) {
			mp.release();
		}
		super.onPause();
	}
	/**
	* 点击开始播放音乐
	*/
	findViewById(R.id.btn_playmusic).setOnClickListener(
			new OnClickListener() {

				@Override
				public void onClick(View v) {
					// TODO Auto-generated method stub
					if (mp != null) {
						mp.start();
					}
				}
			});

使用MediaPlayer播放视频

package com.example.soundplaytest;

import java.io.IOException;

import android.app.Activity;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.view.SurfaceHolder;
import android.view.SurfaceHolder.Callback;
import android.view.SurfaceView;

public class MVActivity extends Activity {
	private SurfaceView surfaceView;
	private SurfaceHolder surfaceHolder;
	private Callback callback=new Callback() {
		private MediaPlayer mp;
		
		@Override
		public void surfaceDestroyed(SurfaceHolder holder) {
			// TODO Auto-generated method stub
			mp.release();
		}
		
		@Override
		public void surfaceCreated(SurfaceHolder holder) {
			mp=MediaPlayer.create(MVActivity.this, R.raw.mv);
			try {
				mp.prepare();
			} catch (IllegalStateException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			mp.setDisplay(surfaceHolder);
			mp.start();
		}
		
		@Override
		public void surfaceChanged(SurfaceHolder holder, int format, int width,
				int height) {
			// TODO Auto-generated method stub
			
		}
	};

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);
		
		surfaceView=new SurfaceView(this);
		setContentView(surfaceView);
				
		surfaceHolder=surfaceView.getHolder();
		surfaceHolder.addCallback(callback);
	}
}

使用VideoView播放视频

VideoView想要自定义大小需要重写。

package com.example.soundplaytest;

import android.app.Activity;
import android.os.Bundle;
import android.widget.MediaController;
import android.widget.VideoView;

public class VideoViewMvActivity extends Activity {
	private VideoView vv;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		
		vv=new VideoView(this);
		setContentView(vv);
		
		vv.setVideoPath("/mnt/sdcard/mv.mp4");
		vv.setMediaController(new MediaController(this));
	}
}

使用Camera进行拍照

	private Camera camera = null;
	private SurfaceView surfaceViewCamera;
	/**
	 * Camera的Callback
	 */
	private Callback cameraHolderCallback = new Callback() {


		@Override
		public void surfaceDestroyed(SurfaceHolder holder) {
			stopPreview();
		}


		@Override
		public void surfaceCreated(SurfaceHolder holder) {
			startPreview();
		}


		@Override
		public void surfaceChanged(SurfaceHolder holder, int format, int width,
				int height) {
			// TODO Auto-generated method stub


		}
	};
	/**
	 * 开始Camera
	 */
	private void startPreview() {
		camera = Camera.open();
		try {
			camera.setPreviewDisplay(surfaceViewCamera.getHolder());
			camera.setDisplayOrientation(90);
			camera.startPreview();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	/**
	 * 停止Camera
	 */
	private void stopPreview() {
		camera.stopPreview();
		camera.release();
	}
/**
 * 使用Camera照相
 */
findViewById(R.id.btn_camera).setOnClickListener(new OnClickListener() {


	@Override
	public void onClick(View v) {
		// TODO Auto-generated method stub
		camera.takePicture(null, null, new PictureCallback() {


			@Override
			public void onPictureTaken(byte[] data, Camera camera) {
				String path;
				if ((path=saveTempFile(data) )!= null) {
					Intent intent=new Intent(MainActivity.this, CameraPreviewActivity.class);
					intent.putExtra("imagePath", path);
					startActivity(intent);
				} else {
					Toast.makeText(MainActivity.this, "保存照片失败",
							Toast.LENGTH_SHORT).show();
				}
			}
		});
	}
});
	surfaceViewCamera = (SurfaceView) findViewById(R.id.survaceview);
	surfaceViewCamera.getHolder().addCallback(cameraHolderCallback);
}
	/**
	* 将照片保存为文件
	* @param bytes
	* @return
	*/
	private String saveTempFile(byte[] bytes) {
	try {
		File f = File.createTempFile("img", "");
		FileOutputStream fos = new FileOutputStream(f);
		fos.write(bytes);
		fos.flush();
		fos.close();
		return f.getAbsolutePath();
	} catch (IOException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}
	return null;
	}


调用系统照相机拍照

package com.example.systemcameratest;

import java.io.File;
import java.io.IOException;

import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.provider.MediaStore;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ImageView;

public class MainActivity extends Activity {
	private static final int REQUEST_CODE_TAKE_PICTURE=1;
	private File ImageFile=null;
	private ImageView iv;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		
		iv=(ImageView) findViewById(R.id.image_camera);
		
		findViewById(R.id.btn_takePicture).setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View v) {
				File dir=new File(Environment.getExternalStorageDirectory(),"picture");
				if(!dir.exists()){
					dir.mkdirs();
				}
				ImageFile=new File(dir,System.currentTimeMillis()+".jpg");
				if(!ImageFile.exists()){
					try {
						ImageFile.createNewFile();
					} catch (IOException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}
				}
				Intent i=new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
				i.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(ImageFile));
				startActivityForResult(i, REQUEST_CODE_TAKE_PICTURE);
			}
		});
	}
	@Override
	protected void onActivityResult(int requestCode, int resultCode, Intent data) {
		switch (requestCode) {
		case REQUEST_CODE_TAKE_PICTURE:
			iv.setImageURI(Uri.fromFile(ImageFile));
			break;

		default:
			break;
		}
		super.onActivityResult(requestCode, resultCode, data);
	}
}

使用MediaRecorder录制声音

	private Button btn_start_record, btn_stop_record;
	private MediaRecorder recorder;

	/**
	 * 开始录制
	 */
	private void startRecord() {
		if (recorder == null) {
			File dir = new File(Environment.getExternalStorageDirectory(),
					"sound");
			if (!dir.exists()) {
				dir.mkdirs();
			}
			File soundFile = new File(dir, System.currentTimeMillis() + ".amr");
			if (!soundFile.exists()) {
				try {
					soundFile.createNewFile();
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
			recorder = new MediaRecorder();
			// 设置输入源
			recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
			// 设置保存格式
			recorder.setOutputFormat(MediaRecorder.OutputFormat.AMR_WB);
			// 设置编码格式
			recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_WB);
			// 设置保存路径
			recorder.setOutputFile(soundFile.getAbsolutePath());
			try {
				recorder.prepare();
				recorder.start();
			} catch (IllegalStateException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}


	/**
	 * 结束录制
	 */
	private void stopRecord() {
		if (recorder != null) {
			recorder.stop();
			recorder.release();
			recorder = null;
			Toast.makeText(this, "录制结束", Toast.LENGTH_SHORT).show();
		}
	}




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值