Android三种路径的音乐播放,视频播放的两种方式

储存在不同路径中音乐有不同的获取方式,过程大同小异,结果当然是一样。但是它们最重要的不同点是什么呢

一.应用内的音频文件与视频文件

  public void isPlayOrPause(View view){

        final ImageButton imageButton= (ImageButton) view
        if(mediaPlayer==null){
            //实例化MediaPlayer
            //播放应用内
            //mediaPlayer = MediaPlayer.create(this, R.raw.love);
                    mediaPlayer.start();
            //把图标修改为暂停的图标
              imageButton.setImageResource(android.R.drawable.ic_media_pause);
            //获取音乐的总时长
               int duration=mediaPlayer.getDuration();
             //设置进度条的最大值为音乐的总时长
               seekBar.setMax(duration);
               new MyThread().start();
                }
            });
        }else if(mediaPlayer.isPlaying()){
            mediaPlayer.pause();
            //把图标修改为播放的图标
            imageButton.setImageResource(android.R.drawable.ic_media_play);
        }else{
            mediaPlayer.start();
            //把图标修改为暂停的图标
            imageButton.setImageResource(android.R.drawable.ic_media_pause);
        }
    }
 
  
视频播放与音乐播放无甚大异,不过是多一个成像的控件设置,我们给它添加一个SurfaceView控件
 
  
mediaPlayer.setDisplay(sfv_main.getHolder());这是播放应用内的文件,内存内的文件也只是
改一下它的文件路径
 
  
至于另一种播放视频的方式,也比较简单,不过所用布局的控件有所改变,这里用一个VideoView来
装载影像 ,代码如下: 
 
  
    //设置播放源
    vv_video = (VideoView) findViewById(R.id.vv_video);
    vv_video.setVideoPath("填写储存路径即可");

    //实例化媒体控制器
    MediaController mediaController=new MediaController(this);
    vv_video.setMediaController(mediaController);
    mediaController.setMediaPlayer(vv_video);
二.手机内的音频文件
手机内得在清单文件中配置可阅读文件权限
 
  
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE">uses-permission>

 public void isPlayOrPause(View view){
        final ImageButton imageButton= (ImageButton) view;
        if(mediaPlayer==null){
         
            //播放内存卡中音频文件
            mediaPlayer=new MediaPlayer();

            //设置类型
            mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);

            //设置音源
            try {
                  mediaPlayer.setDataSource(this, Uri.parse("file://mnt/sdcard/Music/f.mp3"));
                 //准备一下(内存卡)
                mediaPlayer.prepare();

            } catch (IOException e) {

                e.printStackTrace();
            }
                     mediaPlayer.start();
                    //把图标修改为暂停的图标
                    imageButton.setImageResource(android.R.drawable.ic_media_pause);


                    //获取音乐的总时长
                    int duration=mediaPlayer.getDuration();
                    //设置进度条的最大值为音乐的总时长
                    seekBar.setMax(duration);
                    new MyThread().start();

        }else if(mediaPlayer.isPlaying()){
            mediaPlayer.pause();
            //把图标修改为播放的图标
            imageButton.setImageResource(android.R.drawable.ic_media_play);
        }else{
            mediaPlayer.start();
            //把图标修改为暂停的图标
            imageButton.setImageResource(android.R.drawable.ic_media_pause);
        }

    }

三.网络上的音频文件
网络权限
 
  

<uses-permission android:name="android.permission.INTERNET" />

 public void isPlayOrPause(View view){

        final ImageButton imageButton= (ImageButton) view;
        if(mediaPlayer==null){
            //实例化MediaPlayer
         
            //设置类型
            mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);

            //设置音源
            try {
           //播放网络音乐
                mediaPlayer.setDataSource(this, Uri.parse("http://192.168.43.135/internet.mp3"));

                //准备(网络)
                mediaPlayer.prepareAsync();
            } catch (IOException e) {
                e.printStackTrace();
            }

            //监听:准备完成的监听
            mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
                @Override
                public void onPrepared(MediaPlayer mediaPlayer) {
                    mediaPlayer.start();
                    //把图标修改为暂停的图标
                    imageButton.setImageResource(android.R.drawable.ic_media_pause);
                    //获取音乐的总时长
                    int duration=mediaPlayer.getDuration();
                    //设置进度条的最大值为音乐的总时长
                    seekBar.setMax(duration);
                    new MyThread().start();
                }
            });

        }else if(mediaPlayer.isPlaying()){
            mediaPlayer.pause();
            //把图标修改为播放的图标
            imageButton.setImageResource(android.R.drawable.ic_media_play);
        }else{
            mediaPlayer.start();
            //把图标修改为暂停的图标
            imageButton.setImageResource(android.R.drawable.ic_media_pause);
        }
    }




音乐播放器由一SeekBar作为展示,他的进度随着音乐的播放而前进,当我们对它拖拽时音乐也会相对应
的前进,这时就需要一个线程对它进行操作,同时需要监听到他当前位置
  class MyThread extends Thread{
        @Override
        public void run() {
            super.run();
            while(seekBar.getProgress()<=seekBar.getMax()){


                //获取当前音乐播放的位置
                int currentPosition=mediaPlayer.getCurrentPosition();


                //让进度条动起来
                seekBar.setProgress(currentPosition);
            }
        }
    }
 
  
 
  
 
  
     seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
            @Override
            public void onProgressChanged(SeekBar seekBar, int i, boolean b) {


            }


            @Override
            public void onStartTrackingTouch(SeekBar seekBar) {


            }


            @Override
            public void onStopTrackingTouch(SeekBar seekBar) {
                //获取拖动结束之后的位置
                int progress=seekBar.getProgress();
                //跳转到某个位置播放
                mediaPlayer.seekTo(progress);
            }
        });


 
  
 
  
 
  
 
  
 
  
 

你可能感兴趣的:(安卓四大组件之一)