Android开发基础(十):多媒体

本文详细介绍如何在Android应用中实现音频、视频和相机功能,包括使用MediaPlayer播放音频,SoundPool管理音效,SurfaceView和VideoView播放视频,以及通过相机API拍照。提供了完整的代码示例,帮助开发者快速上手。
摘要由CSDN通过智能技术生成

(个人经验,仅供参考,错误之处,敬请谅解)

音频

在这里插入图片描述
在这里插入图片描述
示例:

public class MusicAty extends Activity {
    private ListView listView;
    private MediaPlayer mediaPlayer;
    private TextView textView;
    private SeekBar seekBar;
    Cursor cursor;
    int index=0;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.music_layout);
        findViews();
        mediaPlayer=new MediaPlayer();
        setListeners();
    }

    private void setListeners() {
        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                cursor.moveToPosition(position);
                try {
                    if(mediaPlayer!=null&&mediaPlayer.isPlaying()){
                        mediaPlayer.stop();
                        mediaPlayer.reset();
                    }
                    mediaPlayer.setDataSource(cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.DATA)));
                    mediaPlayer.prepare();
                    mediaPlayer.start();
                    seekBar.setMax(cursor.getInt(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.DURATION)));
                    seekBar.setProgress(mediaPlayer.getCurrentPosition());
                    //启动定时器,改变seekbar的进度
                    textView.setText("当前正在播放的音乐是:"+cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.TITLE)));

                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        });
        mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
            @Override
            public void onCompletion(MediaPlayer mp) {

            }
        });
        seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
            @Override
            public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
                if(fromUser){

                }
            }

            @Override
            public void onStartTrackingTouch(SeekBar seekBar) {
                mediaPlayer.pause();
            }

            @Override
            public void onStopTrackingTouch(SeekBar seekBar) {
                mediaPlayer.seekTo(seekBar.getProgress());
                mediaPlayer.start();
            }
        });
    }

    private void findViews() {
        listView= (ListView) findViewById(R.id.listView);
        textView= (TextView) findViewById(R.id.textview);
        seekBar= (SeekBar) findViewById(R.id.seekBar);
        ContentResolver resolver=getContentResolver();
        cursor=resolver.query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,null,null,null,null);
        SimpleCursorAdapter adapter=new SimpleCursorAdapter(MusicAty.this,android.R.layout.simple_list_item_1,
                cursor,new String[]{MediaStore.Audio.Media.TITLE},new int[]{android.R.id.text1});
        listView.setAdapter(adapter);
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        if(mediaPlayer!=null){
            if(mediaPlayer.isPlaying()){
                mediaPlayer.stop();
            }
            mediaPlayer.release();
            mediaPlayer=null;
        }
    }
}

    设置数据源两种方法:setDataSource(path[context,uri])、create(context,R.raw.music);

音效池

    SoundPool使用
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
示例:

public class SoudPoolAty extends Activity {
    SoundPool soundPool;
    int id1,id2;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.soudpool_layout);
        soundPool=new SoundPool(2, AudioManager.STREAM_SYSTEM,0);
        id1=soundPool.load(this,R.raw.sd1,1);
        id2=soundPool.load(this,R.raw.sd2,1);
    }

    public void playsound1(View v){
        soundPool.play(id1,1,1,1,2,2f);
    }

    public void playsound2(View v){
        soundPool.play(id2,1,1,1,1,1f);
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        soundPool.release();
    }
}

视频

使用SurfaceView:

public class SurfaceViewAty extends Activity {
    SurfaceView surfaceView;
    MediaPlayer mediaPlayer;
    SurfaceHolder surfaceHolder;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.surfaceview_layout);
        surfaceView= (SurfaceView) findViewById(R.id.surfaceView);
        mediaPlayer=new MediaPlayer();
        String path= Environment.getExternalStorageDirectory()+"/vedio.3gp";
        try {
            mediaPlayer.setDataSource(path);
            mediaPlayer.prepare();
            surfaceHolder=surfaceView.getHolder();
            surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
            surfaceHolder.addCallback(new SurfaceHolder.Callback() {
                @Override
                public void surfaceCreated(SurfaceHolder holder) {
                    mediaPlayer.setDisplay(surfaceHolder);
                    mediaPlayer.start();
                }

                @Override
                public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {

                }

                @Override
                public void surfaceDestroyed(SurfaceHolder holder) {
                    if(mediaPlayer.isPlaying())
                        mediaPlayer.stop();
                    mediaPlayer.release();
                    mediaPlayer=null;
                }
            });


        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        if(mediaPlayer.isPlaying())
            mediaPlayer.stop();
        mediaPlayer.release();
        mediaPlayer=null;
    }
}

使用VideoView:

public class VideoViewAty extends Activity {
    VideoView videoView;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.videoview_layout);
        videoView= (VideoView) findViewById(R.id.videoView);
        videoView.setVideoPath(Environment.getExternalStorageDirectory()+"/vedio.3gp");
        videoView.setMediaController(new MediaController(this));
        videoView.start();
    }
}

相机

简单示例:

public class CameraAty extends Activity {
    ImageView imageView;
    String photopath;
    Uri imgUri;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.camera_layout);
        imageView= (ImageView) findViewById(R.id.imageView);
    }

    public void takePhoto(View v){
        Intent intent=new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
        photopath= Environment.getExternalStorageDirectory()+"/photo.jpg";
        imgUri=Uri.fromFile(new File(photopath));
        intent.putExtra(MediaStore.EXTRA_OUTPUT,imgUri);
        startActivityForResult(intent, 1);
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if(resultCode==RESULT_OK&&requestCode==1){
            try {
                Bitmap bmp= BitmapFactory.decodeStream(getContentResolver().openInputStream(imgUri));
                imageView.setImageBitmap(bmp);
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            }
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值