SoundPool、 VedioView、 MediaRecorder、 SurfaceView、 Camera、

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
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值