(个人经验,仅供参考,错误之处,敬请谅解)
音频


示例:
public class MusicAty extends Activity {
private ListView listView;
private MediaPlayer mediaPlayer;
private TextView textView;
private SeekBar seekBar;
Cursor cursor;
int index=0;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.music_layout);
findViews();
mediaPlayer=new MediaPlayer();
setListeners();
}
private void setListeners() {
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
cursor.moveToPosition(position);
try {
if(mediaPlayer!=null&&mediaPlayer.isPlaying()){
mediaPlayer.stop();
mediaPlayer.reset();
}
mediaPlayer.setDataSource(cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.DATA)));
mediaPlayer.prepare();
mediaPlayer.start();
seekBar.setMax(cursor.getInt(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.DURATION)));
seekBar.setProgress(mediaPlayer.getCurrentPosition());
//启动定时器,改变seekbar的进度
textView.setText("当前正在播放的音乐是:"+cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.TITLE)));
} catch (IOException e) {
e.printStackTrace();
}
}
});
mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
}
});
seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
if(fromUser){
}
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
mediaPlayer.pause();
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
mediaPlayer.seekTo(seekBar.getProgress());
mediaPlayer.start();
}
});
}
private void findViews() {
listView= (ListView) findViewById(R.id.listView);
textView= (TextView) findViewById(R.id.textview);
seekBar= (SeekBar) findViewById(R.id.seekBar);
ContentResolver resolver=getContentResolver();
cursor=resolver.query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,null,null,null,null);
SimpleCursorAdapter adapter=new SimpleCursorAdapter(MusicAty.this,android.R.layout.simple_list_item_1,
cursor,new String[]{MediaStore.Audio.Media.TITLE},new int[]{android.R.id.text1});
listView.setAdapter(adapter);
}
@Override
protected void onDestroy() {
super.onDestroy();
if(mediaPlayer!=null){
if(mediaPlayer.isPlaying()){
mediaPlayer.stop();
}
mediaPlayer.release();
mediaPlayer=null;
}
}
}
设置数据源两种方法:setDataSource(path[context,uri])、create(context,R.raw.music);
音效池
SoundPool使用:




示例:
public class SoudPoolAty extends Activity {
SoundPool soundPool;
int id1,id2;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.soudpool_layout);
soundPool=new SoundPool(2, AudioManager.STREAM_SYSTEM,0);
id1=soundPool.load(this,R.raw.sd1,1);
id2=soundPool.load(this,R.raw.sd2,1);
}
public void playsound1(View v){
soundPool.play(id1,1,1,1,2,2f);
}
public void playsound2(View v){
soundPool.play(id2,1,1,1,1,1f);
}
@Override
protected void onDestroy() {
super.onDestroy();
soundPool.release();
}
}
视频
使用SurfaceView:
public class SurfaceViewAty extends Activity {
SurfaceView surfaceView;
MediaPlayer mediaPlayer;
SurfaceHolder surfaceHolder;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.surfaceview_layout);
surfaceView= (SurfaceView) findViewById(R.id.surfaceView);
mediaPlayer=new MediaPlayer();
String path= Environment.getExternalStorageDirectory()+"/vedio.3gp";
try {
mediaPlayer.setDataSource(path);
mediaPlayer.prepare();
surfaceHolder=surfaceView.getHolder();
surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
surfaceHolder.addCallback(new SurfaceHolder.Callback() {
@Override
public void surfaceCreated(SurfaceHolder holder) {
mediaPlayer.setDisplay(surfaceHolder);
mediaPlayer.start();
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
if(mediaPlayer.isPlaying())
mediaPlayer.stop();
mediaPlayer.release();
mediaPlayer=null;
}
});
} catch (IOException e) {
e.printStackTrace();
}
}
@Override
protected void onDestroy() {
super.onDestroy();
if(mediaPlayer.isPlaying())
mediaPlayer.stop();
mediaPlayer.release();
mediaPlayer=null;
}
}
使用VideoView:
public class VideoViewAty extends Activity {
VideoView videoView;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.videoview_layout);
videoView= (VideoView) findViewById(R.id.videoView);
videoView.setVideoPath(Environment.getExternalStorageDirectory()+"/vedio.3gp");
videoView.setMediaController(new MediaController(this));
videoView.start();
}
}
相机
简单示例:
public class CameraAty extends Activity {
ImageView imageView;
String photopath;
Uri imgUri;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.camera_layout);
imageView= (ImageView) findViewById(R.id.imageView);
}
public void takePhoto(View v){
Intent intent=new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
photopath= Environment.getExternalStorageDirectory()+"/photo.jpg";
imgUri=Uri.fromFile(new File(photopath));
intent.putExtra(MediaStore.EXTRA_OUTPUT,imgUri);
startActivityForResult(intent, 1);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(resultCode==RESULT_OK&&requestCode==1){
try {
Bitmap bmp= BitmapFactory.decodeStream(getContentResolver().openInputStream(imgUri));
imageView.setImageBitmap(bmp);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
}
}
本文详细介绍如何在Android应用中实现音频、视频和相机功能,包括使用MediaPlayer播放音频,SoundPool管理音效,SurfaceView和VideoView播放视频,以及通过相机API拍照。提供了完整的代码示例,帮助开发者快速上手。

被折叠的 条评论
为什么被折叠?



