播放音乐

2018-08-11  本文已影响0人  dev晴天
1 
E/MediaPlayer: start called in state 2
E/MediaPlayer: error (-38, 0)
E/MediaPlayer: Error (-38,0)

播放音乐 不进行mediaPlayer.prepare();会报如上错误。


2

下面正确代码:


 MediaPlayer mediaPlayer = new MediaPlayer();
        Log.d("TAG", "doClick: "+"测试1");
        try {
            mediaPlayer.setDataSource("mnt/sdcard/1.mp3");
            Log.d("TAG", "doClick: "+"测试2");
            mediaPlayer.prepare();
            mediaPlayer.start();
            Log.d("TAG", "doClick: "+"测试3");
        } catch (IOException e) {
            e.printStackTrace();
        }
 
3
   音乐常用api:

   setDataSource(String) 要播放歌曲的路径(网络地址 本地文件路径都可以 )

   开始播放 start()播放前必须做准备(mediaPlayer.prepare()播放本地使用同步 播放异地 网络的使用异步prepareasync())

    暂停   mediaPlayer.pause();

    重新播放   mediaPlayer.start();// 再次调用 重新播放

    播放总时间 mediaPlayer.getDuration();
 
   当前播放位置:int currentPosition = mediaPlayer.getCurrentPosition();//当前播放位置

一般与定时器连用:

  // 获得对当前的长度(总不能拿一次 必须进行实时更新  使用timer定时器实时更新)
        Timer timer = new Timer();
        TimerTask task = new TimerTask() {
            @Override
            public void run() {
                int currentPosition = mediaPlayer.getCurrentPosition();//当前播放位置
            }
        };
        // 100毫秒后 每个1秒执行run方法
        timer.schedule(task, 100, 1000);
    }

mediaPlayer.reset();//可以防止bug  播放前先设置线


seekTo()// 播放指定位置



4   播放网络歌曲


   public void doclick(View view){
        MediaPlayer mediaPlayer = new MediaPlayer();
        try {
            mediaPlayer.setDataSource("http://192.168.56.1/Demo/1.mp3");
            mediaPlayer.prepare();
            mediaPlayer.start();

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


5 mediaplayer的声明周期:

同步和异步
同步:一般播放本地音乐
异步:播放网络音乐 不用开启子线程


上一篇下一篇

猜你喜欢

热点阅读