`
梦想家dream
  • 浏览: 61683 次
  • 性别: Icon_minigender_1
  • 来自: 湖南
社区版块
存档分类
最新评论

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文件夹):
0
0
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics