Android从零开始—多媒体(二十二)

知识点:音乐播放、录音、播放视频、录像、拍照

步骤一、主界面布局(代码如下)
<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文件夹):
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值