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