步骤一、主界面布局(代码如下)
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context=".MainActivity" android:orientation="vertical"> <Button android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="播放音乐" android:id="@+id/btn1" android:onClick="myclick" /> <Button android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="录音" android:id="@+id/btn2" android:onClick="myclick" /> <Button android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="播放视频" android:id="@+id/btn3" android:onClick="myclick" /> <Button android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="录像" android:id="@+id/btn4" android:onClick="myclick" /> <Button android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="拍照" android:id="@+id/btn5" android:onClick="myclick" /> </LinearLayout>
步骤二、按钮选择判断(代码如下)
package com.example.mediaplayerdemo; import java.io.File; import android.app.Activity; import android.content.Intent; import android.database.Cursor; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.net.Uri; import android.os.Bundle; import android.os.Environment; import android.provider.MediaStore; import android.view.View; public class MainActivity extends Activity { @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if(requestCode==1){ if(resultCode==Activity.RESULT_OK){ //获取视频文件的ContentProvider的URI Uri uri=data.getData(); //查询录制的视频 Cursor cursor=getContentResolver().query(uri,null,null,null,null); if(cursor.moveToNext()){ //获取文件的绝对路径 String path=cursor.getString(cursor.getColumnIndex("_data")); Intent intent=new Intent(this,VideoActivity.class); intent.putExtra("path",path ); startActivity(intent); } } } if(requestCode==2){ if(resultCode==Activity.RESULT_OK){ Intent intent=new Intent(this,CameraImageShowActivity.class); try{ intent.putExtra("imagePath", outFile.getAbsolutePath()); startActivity(intent); }catch(Exception e){ e.printStackTrace(); } } } super.onActivityResult(requestCode, resultCode, data); } private String imageName="camera.jpg"; private File outFile; public void myclick(View view){ Intent intent; switch(view.getId()){ case R.id.btn1: intent=new Intent(this,AudioActivity.class); startActivity(intent); break; case R.id.btn2: intent=new Intent(this,RecorderActivity.class); startActivity(intent); break; case R.id.btn3: intent=new Intent(this,VideoActivity.class); intent.putExtra("path",Environment.getExternalStorageDirectory()+"/饥饿游戏A.mp4" ); startActivity(intent); break; case R.id.btn4: intent=new Intent(MediaStore.ACTION_VIDEO_CAPTURE); startActivityForResult(intent, 1); break; case R.id.btn5: intent=new Intent(MediaStore.ACTION_IMAGE_CAPTURE); outFile = new File(Environment.getExternalStorageDirectory(),imageName); Uri uri = Uri.fromFile(outFile); intent.putExtra(MediaStore.EXTRA_OUTPUT, uri); startActivityForResult(intent,2); break; } } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } }
步骤三、音乐播放(代码如下)
package com.example.mediaplayerdemo; import android.app.Activity; import android.app.Notification; import android.app.NotificationManager; import android.app.PendingIntent; import android.content.Intent; import android.media.MediaPlayer; import android.media.MediaPlayer.OnCompletionListener; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewDebug.FlagToString; import android.widget.Button; public class AudioActivity extends Activity { Notification notification; NotificationManager manager; static MediaPlayer mediaPlayer; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.audio_layout); try { if(mediaPlayer!=null){ mediaPlayer.stop(); mediaPlayer.release(); } //创建MediaPlayer对象并指定播放的音乐 //这种形式是播放资源中的音乐(必须放在raw下) mediaPlayer = MediaPlayer.create(this, R.raw.power_of_love); //如果播放的是SD卡中的音乐 //mediaPlayer=new MediaPlayer(); //mediaPlayer.setDataSource() //在播放前必须要执行stop和prepare这2个方法 mediaPlayer.stop(); mediaPlayer.prepare(); //start方法表示开始播放 mediaPlayer.start(); notification = new Notification(R.drawable.ic_launcher, "正在播放", System.currentTimeMillis()); PendingIntent contentIntent = PendingIntent.getActivity(this, 1, new Intent(this, AudioActivity.class), 0); notification.setLatestEventInfo(this, "正在播放", "Power Of Love.mp3", contentIntent); manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE); manager.notify(1, notification); //OnCompletionListener方法在播放结束后触发 mediaPlayer.setOnCompletionListener(new OnCompletionListener() { @Override public void onCompletion(MediaPlayer mp) { //释放播放的资源,避免其他程序使用不到 mediaPlayer.release(); manager.cancel(1); } }); Button stop_btn = (Button) findViewById(R.id.stop_btn); stop_btn.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { //在释放之前先停止播放 mediaPlayer.stop(); mediaPlayer.release(); manager.cancel(1); } }); } catch (Exception e) { e.printStackTrace(); } } }
步骤四、录音(代码如下)
package com.example.mediaplayerdemo; import java.io.File; import android.app.Activity; import android.media.MediaPlayer; import android.media.MediaPlayer.OnCompletionListener; import android.media.MediaRecorder; import android.os.Bundle; import android.view.MotionEvent; import android.view.View; import android.view.View.OnLongClickListener; import android.view.View.OnTouchListener; import android.widget.Button; public class RecorderActivity extends Activity{ File recordAudioFile; MediaRecorder mediaRecorder; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.recorder_layout); final Button recorder_btn=(Button)findViewById(R.id.recorder_btn); recorder_btn.setOnLongClickListener(new OnLongClickListener() { @Override public boolean onLongClick(View v) { try{ recordAudioFile=File.createTempFile("record", ".mp3"); mediaRecorder=new MediaRecorder(); //指定来源 mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC); //输出格式(MPGE4) mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4); //指定编码 mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT); //制定录制的路径 mediaRecorder.setOutputFile(recordAudioFile.getAbsolutePath()); mediaRecorder.prepare(); recorder_btn.setText("请大声说话"); //开始录音 mediaRecorder.start(); }catch(Exception e){ e.printStackTrace(); } return false; } }); recorder_btn.setOnTouchListener(new OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { if(event.getAction()==MotionEvent.ACTION_UP){ final MediaPlayer mediaPlayer=new MediaPlayer(); try{ mediaRecorder.stop(); mediaRecorder.release(); mediaPlayer.setDataSource(recordAudioFile.getAbsolutePath()); mediaPlayer.prepare(); mediaPlayer.start(); mediaPlayer.setOnCompletionListener(new OnCompletionListener() { @Override public void onCompletion(MediaPlayer mp) { mediaPlayer.stop(); mediaPlayer.release(); recordAudioFile.delete(); recorder_btn.setText("按下说话"); } }); }catch(Exception e){ e.printStackTrace(); } } return false; } }); } }
步骤五、播放视频(代码如下)
package com.example.mediaplayerdemo; import android.app.Activity; import android.media.MediaPlayer; import android.os.Bundle; import android.os.Environment; import android.util.Log; import android.view.KeyEvent; import android.view.SurfaceHolder; import android.view.SurfaceView; import android.view.View; import android.view.Window; import android.view.WindowManager; import android.widget.ImageButton; public class VideoActivity extends Activity implements SurfaceHolder.Callback{ private SurfaceView surfaceView; private SurfaceHolder surfaceHolder; private MediaPlayer mediaPlayer; private String path; @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if(keyCode==event.KEYCODE_BACK){ mediaPlayer.stop(); finish(); return super.onKeyDown(keyCode, event); } return false; } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); setContentView(R.layout.video_layout); surfaceView=(SurfaceView)findViewById(R.id.surfaceView); surfaceHolder=surfaceView.getHolder(); surfaceHolder.addCallback(this); surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); surfaceHolder.setKeepScreenOn(true); path=getIntent().getStringExtra("path"); mediaPlayer=new MediaPlayer(); ImageButton play_btn=(ImageButton)findViewById(R.id.play_btn); ImageButton stop_btn=(ImageButton)findViewById(R.id.stop_btn); ImageButton pause_btn=(ImageButton)findViewById(R.id.pause_btn); ImageButton reset_btn=(ImageButton)findViewById(R.id.reset_btn); } private int position=0; public void onControl(View v) { switch(v.getId()){ case R.id.play_btn: if(mediaPlayer.isPlaying()){ return; } play(); break; case R.id.pause_btn: position=mediaPlayer.getCurrentPosition(); mediaPlayer.pause(); break; case R.id.reset_btn: position=0; play(); break; case R.id.stop_btn: position=0; mediaPlayer.stop(); break; } } @Override protected void onDestroy() { mediaPlayer.release(); super.onDestroy(); } private void play(){ try{ mediaPlayer.reset(); mediaPlayer.setDataSource(path); mediaPlayer.setDisplay(surfaceHolder); mediaPlayer.prepare(); Log.v("s_position", position+""); mediaPlayer.seekTo(position); mediaPlayer.start(); position=0; }catch(Exception e){ Log.e(getClass().getName(), e.toString()); } } @Override protected void onPause() { position=mediaPlayer.getCurrentPosition(); mediaPlayer.stop(); super.onPause(); } @Override protected void onRestoreInstanceState(Bundle savedInstanceState) { position=savedInstanceState.getInt("position"); super.onRestoreInstanceState(savedInstanceState); } @Override protected void onSaveInstanceState(Bundle outState) { outState.putInt("position", mediaPlayer.getCurrentPosition()); super.onSaveInstanceState(outState); } @Override public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { } @Override public void surfaceCreated(SurfaceHolder holder) { play(); } @Override public void surfaceDestroyed(SurfaceHolder holder) { } }
步骤六、拍照(代码如下)
package com.example.mediaplayerdemo; import android.app.Activity; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.os.Bundle; import android.view.Display; import android.widget.ImageView; public class CameraImageShowActivity extends Activity{ @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); setContentView(R.layout.camera_image_show_layout); Display display = this.getWindowManager().getDefaultDisplay(); int dw = display.getWidth(); int dh = display.getHeight(); BitmapFactory.Options op = new BitmapFactory.Options(); //必须设置为true,才能更改Options的属性 op.inJustDecodeBounds = true; Bitmap cameraBitmap=BitmapFactory.decodeFile(getIntent().getStringExtra("imagePath"),op); int wRatio = (int) Math.ceil(op.outWidth / (float) dw); int hRatio = (int) Math.ceil(op.outHeight / (float) dh); if (wRatio > 1 && hRatio > 1) { if (wRatio > hRatio) { op.inSampleSize = wRatio; } else { op.inSampleSize = hRatio; } } // 修改完毕后再设置为false op.inJustDecodeBounds = false; cameraBitmap=BitmapFactory.decodeFile(getIntent().getStringExtra("imagePath"),op); ImageView show_full=(ImageView)findViewById(R.id.show_full); show_full.setImageBitmap(cameraBitmap); } }
步骤七、Activity的注册+权限添加(代码如下)
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.mediaplayerdemo" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="17" /> <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name="com.example.mediaplayerdemo.MainActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name=".AudioActivity"/> <activity android:name=".RecorderActivity"/> <activity android:name=".VideoActivity"/> <activity android:name=".CameraImageShowActivity"/> </application> <uses-permission android:name="android.permission.RECORD_AUDIO"/> <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> </manifest>
源码下载请点击这里(将音乐文件复制到raw文件夹):