Android开发_多媒体的简单应用

SoundPool类

SoundPool类适合用来播放一些短暂的反应速度要求高的声音。SoundPool载入音乐文件使用了独立的线程,不会阻塞UI主线程的操作。SoundPool类支持同时播放多个音效。 应用实例如下:

public class MainActivity extends Activity {
	private SoundPool sp;
	private int soundID;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		/**
		 * maxStreams : 音源的个数 streamType : 音源的类型 srcQuality : 音源的质量
		 */
		sp = new SoundPool(1, AudioManager.STREAM_MUSIC, 0);

		// 实例化AudioManager对象,控制声音
		AudioManager am = (AudioManager) this
				.getSystemService(MainActivity.AUDIO_SERVICE);
		// 最大音量
		float audioMaxVolumn = am.getStreamMaxVolume(AudioManager.STREAM_MUSIC);
		// 当前音量
		float audioCurrentVolumn = am
				.getStreamVolume(AudioManager.STREAM_MUSIC);

		float volumnRatio = audioCurrentVolumn / audioMaxVolumn;

		// 装载音源,返回相应的id
		soundID = sp.load(this, R.raw.song, 1);

		// 播放声音,priority:优先级,0最低,loop:循环次数,0是不循环,-1是永远循环,rate:回放速度,0.5-2.0之间,1为正常速度
		// sp.play(soundID, leftVolume, rightVolume, priority,loop, rate);
		sp.play(soundID, volumnRatio, volumnRatio, 1, 0, 1);
	}
}

MediaPlayer类

使用MediaPlayer类来播放音频文件

public class Main extends Activity  implements OnClickListener,OnCompletionListener
{
	private MediaPlayer mediaPlayer;
	private Button btnPause;
	@Override
	public void onCreate(Bundle savedInstanceState)
	{
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		
		Button btnStart1 = (Button)findViewById(R.id.btnStart1);
		Button btnStart2 = (Button)findViewById(R.id.btnStart2);
		
		Button btnStop = (Button)findViewById(R.id.btnStop);
		
		btnPause = (Button)findViewById(R.id.btnPause);
		
		btnStart1.setOnClickListener(this);
		btnStart2.setOnClickListener(this);
		btnStop.setOnClickListener(this);
		btnPause.setOnClickListener(this);
	}
	
	// 回掉方法,监听音频文件播放完毕
	public void onCompletion(MediaPlayer mp)
	{
		mp.release();
		setTitle("释放资源");
	}
	public void onClick(View view)
	{
		try
		{
			switch (view.getId()) {
			case R.id.btnStart1:  // 播放工程目录下的文件
				mediaPlayer = MediaPlayer.create(this, R.raw.music);
				mediaPlayer.setOnCompletionListener(this);
				// 不需要调用prepare()方法,因为在create()中已经调用过了
				mediaPlayer.start();	
				break;
			case R.id.btnStart2://  播放SD卡上的音频文件(/sdcard/music.mp3)
				mediaPlayer = new MediaPlayer();
				mediaPlayer.setDataSource("/sdcard/music.mp3");
				
				mediaPlayer.prepare();
				mediaPlayer.start();
				break;
				
			case R.id.btnStop:
				if(mediaPlayer != null)
				{
					if(mediaPlayer.isPlaying())
						mediaPlayer.stop();
				}
				break;	
			case R.id.btnPause:
				if(mediaPlayer != null)
				{
					if("播放".equals(btnPause.getText().toString()))
					{
						mediaPlayer.start();
						btnPause.setText("暂停");
						
					}
					else if("暂停".equals(btnPause.getText().toString()))
					{
						mediaPlayer.pause();
						btnPause.setText("播放");
					}
				}
				break;
			default:
				break;
			}
		}
		catch (Exception e) {
			// TODO: handle exception
		}
	}
}

使用MediaPlayer类来播放视频文件

public class MainActivity extends Activity {
	private SurfaceView sv;
	private SurfaceHolder sh;
	
	private Callback callback = new Callback() {
		MediaPlayer mp = null;

		@Override
		public void surfaceDestroyed(SurfaceHolder arg0) {
			if (mp != null) {
				mp.stop();// 停止播放
				mp.release();// 释放资源
				mp = null;
			}
		}

		@Override
		public void surfaceCreated(SurfaceHolder arg0) {
			mp = MediaPlayer.create(this, R.raw.move);
			try {
				mp.prepare();// 准备播放

			} catch (IllegalStateException e) {
				e.printStackTrace();
			} catch (IOException e) {
				e.printStackTrace();
			}
			mp.setDisplay(sh);
			mp.start();// 播放视频
		}

		@Override
		public void surfaceChanged(SurfaceHolder arg0, int arg1, int arg2,
				int arg3) {

		}
	};

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		sv = new SurfaceView(this);
		sh = sv.getHolder();
		sh.addCallback(callback);
		setContentView(sv);
	}
}

使用VideoView类来播放视频文件

<span style="font-size:14px;">public class MainActivity extends Activity {
	private VideoView vv;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		vv = new VideoView(this);
		setContentView(vv);

		vv.setVideoPath("/mnt/sdcard/movie.mp4");
		vv.setMediaController(new MediaController(this));
	}
}</span>

更详细MediaPlayer类介绍:http://www.eoeandroid.com/thread-176453-1-1.html(引用)


MediaRecorder录音

需要获取的权限:<uses-permission android:name="android.permission.RECORD_AUDIO" />

<span style="font-size:14px;">public class MainActivity extends Activity {

	private MediaRecorder mr;
	private Button btnStart;// 开始录音按钮
	private Button btnStop;// 停止录音按钮

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);

		btnStart = (Button) findViewById(R.id.btnStart);
		btnStop = (Button) findViewById(R.id.btnStop);

		btnStart.setOnClickListener(new View.OnClickListener() {
			@Override
			public void onClick(View arg0) {
				startRecord();// 开始录音
			}
		});

		btnStop.setOnClickListener(new View.OnClickListener() {
			@Override
			public void onClick(View arg0) {
				stopRecord();// 停止录音
			}
		});
	}

	// 停止录音方法
	protected void stopRecord() {
		if (mr != null) {
			mr.stop();
			mr.release();
			mr = null;
		}
	}

	// 开始录音方法
	protected void startRecord() {
		if (mr == null) {
			// 在sdcard卡下创建相应的文件目录
			File dir = new File(Environment.getExternalStorageDirectory(),
					"sounds");

			if (!dir.exists()) {
				dir.mkdir();
			}

			// 创建录音文件
			File file = new File(dir, System.currentTimeMillis() + "amr");

			if (!file.exists()) {
				try {
					file.createNewFile();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}

			mr = new MediaRecorder();// 创建对象
			// 设置录音源
			mr.setAudioSource(MediaRecorder.AudioSource.MIC);
			// 设置输出格式
			mr.setOutputFormat(MediaRecorder.OutputFormat.AMR_WB);
			// 设置音源编码
			mr.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_WB);
			// 设置输出路径
			mr.setOutputFile(file.getAbsolutePath());

			try {
				mr.prepare();// 准备录音
				mr.start();// 开始录音
			} catch (IllegalStateException e) {
				e.printStackTrace();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}
}</span>


通过调用系统的摄像头来进行拍照

public class Main extends Activity implements OnClickListener
{
	private ImageView imageView;
	
	@Override
	public void onCreate(Bundle savedInstanceState)
	{
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		
		Button btnTakePicture = (Button)findViewById(R.id.btnTakePicture);
		btnTakePicture.setOnClickListener(this);
		
		imageView = (ImageView)findViewById(R.id.imageview);
		
	}
	protected void onActivityResult(int requestCode, int resultCode, Intent data)
	{
		if(requestCode == 1)
		{
			if(resultCode == Activity.RESULT_OK)
			{
				Bitmap cameraBitmap = (Bitmap)data.getExtras().get("data");
				imageView.setImageBitmap(cameraBitmap);	
			}
		}
	}
	
    public void onClick(View view)
    {
    	Intent intent =new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    	startActivityForResult(intent, 1);
    }
}

通过调用系统的摄像头来进行录像

public class Main extends Activity implements OnClickListener {
	public VideoView videoView;

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		Button btnTakePicture = (Button) findViewById(R.id.btnTakePicture);
		btnTakePicture.setOnClickListener(this);

		videoView = (VideoView) findViewById(R.id.videoview);

	}

	protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if(requestCode == 1)
        {
        	if(resultCode == Activity.RESULT_OK)
        	{
        		Uri uri = data.getData();
        		Cursor cursor = this.getContentResolver().query(uri,null,null,null,null);
        		
        		if(cursor.moveToFirst())
        		{
        			String videoPath =  cursor.getString(cursor.getColumnIndex("_data"));
        			videoView.setVideoURI(Uri.parse(videoPath));
        			videoView.setMediaController(new MediaController(this));
        			videoView.start();
        		}
        	}
        }
	}

	public void onClick(View view) {
		Intent intent = new Intent(MediaStore.ACTION_VIDEO_CAPTURE);
		startActivityForResult(intent, 1);
	}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值