SoundPool、 VedioView、 MediaRecorder、 SurfaceView、 Camera、

来源:互联网 发布:软件开发 tr4阶段 编辑:程序博客网 时间:2024/06/16 03:08

SoundPool

提示音,适合短促且对反应速度比较高的情况(游戏音效或按键声等),一般文件较小,只有几十K,使用MediaPlayer会浪费内存,所以用SoundPool。

priority —— 流的优先级,值越大优先级高,影响当同时播放数量超出了最大支持数时SoundPool对该流的处理;
loop —— 循环播放的次数,0为值播放一次,-1为无限循环,其他值为播放loop+1次(例如,3为一共播放4次).
rate —— 播放的速率,范围0.5-2.0(0.5为一半速率,1.0为正常速率,2.0为两倍速率)

1.管理多个音频资源,通过load()函数,成功则返回非0的soundID;
2.同时播放多个音频,通过play()函数,成功则返回非0的streamID;
3.pause()、resume()和stop()等操作是针对streamID(播放流)的;
4.当设置为无限循环时,需要手动调用stop()来终止播放;
5.播放流的优先级(play()中的priority参数),只在同时播放数超过设定的最大数时起作用;
6.程序中不用考虑(play触发的)播放流的生命周期,无效的soundID/streamID不会导致程序错误。

package com.example.administrator.mymusicplayer;import android.app.Activity;import android.media.AudioAttributes;import android.media.AudioManager;import android.media.SoundPool;import android.os.Build;import android.os.Bundle;import android.view.View;import android.widget.Button;/** * Created by Administrator on 2015/9/15. */public class SoundPoolActivity extends Activity {    private Button mButtonSoundPool;    private static int voiceID;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_soundpool);        mButtonSoundPool = (Button) findViewById(R.id.button_soundpool);        mButtonSoundPool.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View view) {                playSound();            }        });        voiceID = initSoundPool();    }    private SoundPool pool = null;    public void playSound() {        pool.play(voiceID, 1, 1, 0, 0, 1);    }    private int initSoundPool() {        if (Build.VERSION.SDK_INT >= 21) {            SoundPool.Builder builder = new SoundPool.Builder();            builder.setMaxStreams(2);            AudioAttributes.Builder attrBuilder = new AudioAttributes.Builder();            attrBuilder.setLegacyStreamType(AudioManager.STREAM_MUSIC);            builder.setAudioAttributes(attrBuilder.build());            pool = builder.build();        } else {            pool = new SoundPool(2, AudioManager.STREAM_MUSIC, 0);        }        return pool.load(getApplicationContext(), R.raw.outgoing, 1);    }}

MediaRecorder

录制音视频
录制结束时,调用stop方法,并且调用reset、release方法释放掉资源。
注意加上权限:

package com.example.administrator.mymusicplayer;import android.app.Activity;import android.media.MediaRecorder;import android.os.Environment;import android.support.v7.app.ActionBarActivity;import android.os.Bundle;import android.view.Menu;import android.view.MenuItem;import android.view.View;import android.widget.Button;import java.io.IOException;public class MainActivity extends Activity implements View.OnClickListener {    private Button mButtonStart;    private Button mButtonStop;    private MediaRecorder mediaRecorder;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        mButtonStart = (Button) findViewById(R.id.button_start_recorder);        mButtonStop = (Button) findViewById(R.id.button_stop_recorder);        mButtonStart.setOnClickListener(this);        mButtonStop.setOnClickListener(this);    }    @Override    public void onClick(View view) {        switch (view.getId()){            case R.id.button_start_recorder:                mediaRecorder = new MediaRecorder();                mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);                mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);                mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);                mediaRecorder.setOutputFile(Environment.getExternalStorageDirectory() + "/MyRecorder.mp3");                try {                    mediaRecorder.prepare();                    mediaRecorder.start();                } catch (IOException e) {                    e.printStackTrace();                }                break;            case R.id.button_stop_recorder:                mediaRecorder.stop();                mediaRecorder.reset();                mediaRecorder.release();                break;        }    }}

VedioView

视频播放,仅限于mp4和3gp格式。
注意权限:

package com.example.administrator.mymusicplayer;import android.app.Activity;import android.os.Bundle;import android.os.Environment;import android.view.View;import android.widget.Button;import android.widget.MediaController;import android.widget.VideoView;/** * Created by Administrator on 2015/9/15. */public class VideoViewActivity extends Activity {    private Button mButtonStart;    private VideoView videoView;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_vedioview);        mButtonStart = (Button) findViewById(R.id.button_start);        videoView = (VideoView) findViewById(R.id.videoview);        mButtonStart.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View view) {                videoView.setVideoPath(Environment.getExternalStorageDirectory()+"/VID_20150502_090524.3gp");                videoView.setMediaController(new MediaController(VideoViewActivity.this));                videoView.start();            }        });    }}

SurfaceView

自带绘制线程,SurfaceView是视图(View)的继承类,这个视图里内嵌了一个专门用于绘制的Surface。
注意权限:

package com.example.administrator.mymediasurfaceview;import android.app.Activity;import android.media.AudioManager;import android.media.MediaPlayer;import android.os.Environment;import android.support.v7.app.ActionBarActivity;import android.os.Bundle;import android.view.Menu;import android.view.MenuItem;import android.view.SurfaceView;import android.view.View;import android.widget.Button;import java.io.IOException;public class MainActivity extends Activity {    private Button mButtonStart;    private SurfaceView mSurfaceView;    private MediaPlayer player;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        mButtonStart = (Button) findViewById(R.id.button_start);        mSurfaceView = (SurfaceView) findViewById(R.id.surfaceview);        mButtonStart.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View view) {                if (player == null){                    player = new MediaPlayer();                }                player.reset();                try {                    player.setDataSource(Environment.getExternalStorageDirectory()+"/VID_20150502_090524.3gp");                    player.setAudioStreamType(AudioManager.STREAM_MUSIC);                    player.setDisplay(mSurfaceView.getHolder());                    player.prepare();                    player.setOnPreparedListener(new MediaPlayer.OnPreparedListener(){                        @Override                        public void onPrepared(MediaPlayer mediaPlayer) {                            mediaPlayer.start();                        }                    });                } catch (IOException e) {                    e.printStackTrace();                }            }        });    }}

Camera

这里给一个例子,调用系统的照相机拍摄一张照片并显示。

package com.example.administrator.mymediasurfaceview;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.widget.Button;import android.widget.ImageView;import java.io.File;import java.io.IOException;/** * Created by Administrator on 2015/9/15. */public class CameraActivity extends Activity {    private Button mButtonStartCamera;    private ImageView mImageView;    private File file;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_camera);        mButtonStartCamera = (Button) findViewById(R.id.button_start_camera);        mImageView = (ImageView) findViewById(R.id.imageview);        mButtonStartCamera.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View view) {                Intent intent = new Intent();                intent.setAction(MediaStore.ACTION_IMAGE_CAPTURE);//隐式启动系统相机                file = new File(Environment.getExternalStorageDirectory(),System.currentTimeMillis()+".jpg");                try {                    file.createNewFile();                } catch (IOException e) {                    e.printStackTrace();                }                intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(file));//告诉系统相机将照片保存的位置                startActivityForResult(intent,0x23);//开始启动            }        });    }    @Override    protected void onActivityResult(int requestCode, int resultCode, Intent data) {        super.onActivityResult(requestCode, resultCode, data);        if (requestCode==0x23){            if (resultCode==RESULT_OK){                mImageView.setImageURI(Uri.fromFile(file));//得到图片            }        }    }}
0 0