安卓音乐播放器 错误信息如下

安卓音乐播放器
E/MediaPlayer: Should have subtitle controller already set
这个错误该怎么修改啊

Service 的代码

package com.sunshine.music.easyapp;

import android.app.Service;
import android.content.Intent;
import android.media.MediaPlayer;
import android.os.Binder;
import android.os.IBinder;
import android.support.annotation.Nullable;

import java.io.IOException;
import java.util.List;

/**

  • Created by 95 on 2016/10/27.
    */
    public class ServiceActivity extends Service {

    //1.创建一个全局的MediaPlayer
    private MediaPlayer mediaPlayer;
    private IBinder iBinder = new LocalBinder();
    private List musicInfos;
    @Override
    public void onCreate() {
    super.onCreate();
    //2.初始化MediaPlayer
    mediaPlayer = new MediaPlayer();
    }
    @Override
    public void onDestroy() {
    super.onDestroy();
    mediaPlayer.stop();
    }
    /**

    • 1.创建一个全局的MediaPlayer
    • 2.初始化MediaPlayer
    • 3.在Start方法中播放
    • //音频播放常用方法:
    • player.reset();//重置player
    • player.release();//释放player
    • player.setLooping(true);//设置是否循环播放
    • player.getDuration();//获取音乐播放时长
    • player.getCurrentPosition();//获取当前播放的位置的时间
    • player.seekTo(10);//跳到指定的时间播放
    • player.isLooping();//获取当前播放音乐是否循环播放
    • player.isPlaying();//获取当前播放器是否正在播放
    • setOnCompletionListener() onCompletion(MediaPlayer mp)mp;//音乐播放完毕执行的方法
    • setOnErrorListener() onError() //音乐播放出错所执行的方法 *
    • @param intent
    • @return
      */
      @Nullable
      @Override
      public IBinder onBind(Intent intent) {
      return new LocalBinder();
      }
      public class LocalBinder extends Binder {
      public void Start(String url) {
      if (url != null) {
      mediaPlayer.reset();
      try {
      mediaPlayer.setDataSource(url);
      mediaPlayer.prepare();
      } catch (IOException e) {
      e.printStackTrace();
      }
      mediaPlayer.start();
      }
      }
      public void onPause() {
      mediaPlayer.pause();
      }

      public boolean playStatus() {
      return mediaPlayer.isPlaying();
      }

      public void reStart() {
      mediaPlayer.start();
      }

      public void nextMusic(String nextUrl) {
      try {
      mediaPlayer.reset();
      mediaPlayer.setDataSource(nextUrl);
      mediaPlayer.prepare();
      } catch (IOException e) {
      e.printStackTrace();
      }
      mediaPlayer.start();
      }

      public void beforeMusic() {

      mediaPlayer.reset();
      try {
          //mediaPlayer.setDataSource();
          mediaPlayer.prepare();
      } catch (IOException e) {
          e.printStackTrace();
      }
      mediaPlayer.start();
      

      }
      }
      }

listview代码

package com.sunshine.music.easyapp;

import android.app.Activity;
import android.content.ComponentName;
import android.content.Intent;
import android.content.ServiceConnection;
import android.database.Cursor;
import android.os.Bundle;
import android.os.IBinder;
import android.provider.MediaStore;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ListView;
import android.widget.Toast;

import java.util.ArrayList;
import java.util.List;


/**
 * Created by 95 on 2016/10/27.
 */
public class listView_loaclMusic extends Activity {
    private ListView local_listView;
    private ServiceActivity.LocalBinder localBinder;
    private List<MusicInfo> musicInfos = new ArrayList<>();
    private ServiceConnection serviceConnection = new ServiceConnection() {


        @Override
        public void onServiceConnected(ComponentName name, IBinder service) {
            localBinder = (ServiceActivity.LocalBinder) service;
        }

        @Override
        public void onServiceDisconnected(ComponentName name) {

        }
    };
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.listview_loaclmusic);

        //绑定服务
        bindService(new Intent(listView_loaclMusic.this, ServiceActivity.class), serviceConnection, BIND_AUTO_CREATE);

        local_listView = (ListView) findViewById(R.id.localMusic_listView);

        getMp3();
        OnClickItem();

        Adapter adapter = new Adapter(listView_loaclMusic.this, musicInfos);
        local_listView.setAdapter(adapter);

    }
    //通过系统提供的音乐数据库获取音乐文件信息
    public void getMp3() {
        Cursor mAudioCursor = this.getContentResolver().query(
                MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,
                null,// 字段 没有字段 就是查询所有信息 相当于SQL语句中的 “ * ”
                null, // 查询条件
                null, // 条件的对应?的参数
                MediaStore.Audio.AudioColumns.TITLE);// 排序方式
        // 循环输出歌曲的信息
        for (int i = 0; i < mAudioCursor.getCount(); i++) {
            mAudioCursor.moveToNext();
            // 找到歌曲标题和总时间对应的列索引
            long id = mAudioCursor.getLong(mAudioCursor.getColumnIndex(MediaStore.Audio.Media._ID)); // 音乐id
            String title = mAudioCursor.getString((mAudioCursor.getColumnIndex(MediaStore.Audio.Media.TITLE)));// 音乐标题
            String artist = mAudioCursor.getString(mAudioCursor.getColumnIndex(MediaStore.Audio.Media.ARTIST));// 艺术家
            long duration = mAudioCursor.getLong(mAudioCursor.getColumnIndex(MediaStore.Audio.Media.DURATION));// 时长
            long size = mAudioCursor.getLong(mAudioCursor.getColumnIndex(MediaStore.Audio.Media.SIZE)); // 文件大小
            String url = mAudioCursor.getString(mAudioCursor.getColumnIndex(MediaStore.Audio.Media.DATA)); // 文件路径
            int isMusic = mAudioCursor.getInt(mAudioCursor.getColumnIndex(MediaStore.Audio.Media.IS_MUSIC));// 是否为音乐
            if (isMusic != 0) {//只有当是音乐的时候才保存
                musicInfos.add(new MusicInfo(id, title, artist, duration, size, url));
            }
        }

    }

    //本地音乐列表点击事件
    public void OnClickItem() {
        local_listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                String title = musicInfos.get(position).getTitle();
                //获取被点击的音乐的存储路径
                String url = musicInfos.get(position).getUrl();
                Toast.makeText(listView_loaclMusic.this, "开始播放"+url + title, Toast.LENGTH_SHORT).show();
                //创建Intent并发送url
                Intent urlIntent = new Intent();
                urlIntent.putExtra("url", url);
                urlIntent.setClass(listView_loaclMusic.this, MusicActivity.class);
                //startService(urlIntent);
                startActivity(urlIntent);
                localBinder.Start(url);
            }
        });
    }
    //本地音乐列表长按事件
    public void OnLongLickItem() {
        local_listView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
            @Override
            public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
                return false;
            }
        });
    }
}

Service代码

 package com.sunshine.music.easyapp;

import android.app.Service;
import android.content.Intent;
import android.media.MediaPlayer;
import android.os.Binder;
import android.os.IBinder;
import android.support.annotation.Nullable;

import java.io.IOException;
import java.util.List;

/**
 * Created by 95 on 2016/10/27.
 */
public class ServiceActivity extends Service {

    //1.创建一个全局的MediaPlayer
    private MediaPlayer mediaPlayer;
    private IBinder iBinder = new LocalBinder();
    private List<MusicInfo> musicInfos;
    @Override
    public void onCreate() {
        super.onCreate();
        //2.初始化MediaPlayer
        mediaPlayer = new MediaPlayer();
    }
    @Override
    public void onDestroy() {
        super.onDestroy();
        mediaPlayer.stop();
    }
    /**
     * 1.创建一个全局的MediaPlayer
     * 2.初始化MediaPlayer
     * 3.在Start方法中播放
     * <p/>
     * <span style="white-space:pre">      </span>//音频播放常用方法:
     * player.reset();//重置player
     * player.release();//释放player
     * player.setLooping(true);//设置是否循环播放
     * player.getDuration();//获取音乐播放时长
     * player.getCurrentPosition();//获取当前播放的位置的时间
     * player.seekTo(10);//跳到指定的时间播放
     * player.isLooping();//获取当前播放音乐是否循环播放
     * player.isPlaying();//获取当前播放器是否正在播放
     * <p/>
     * setOnCompletionListener() onCompletion(MediaPlayer mp)mp;//音乐播放完毕执行的方法
     * setOnErrorListener() onError() //音乐播放出错所执行的方法
     *
     * @param intent
     * @return
     */
    @Nullable
    @Override
    public IBinder onBind(Intent intent) {
        return new LocalBinder();
    }
    public class LocalBinder extends Binder {
        public void Start(String url) {
            if (url != null) {
                mediaPlayer.reset();
                try {
                    mediaPlayer.setDataSource(url);
                    mediaPlayer.prepare();
                } catch (IOException e) {
                    e.printStackTrace();
                }
                mediaPlayer.start();
            }
        }
        public void onPause() {
            mediaPlayer.pause();
        }

        public boolean playStatus() {
            return mediaPlayer.isPlaying();
        }

        public void reStart() {
            mediaPlayer.start();
        }

        public void nextMusic(String nextUrl) {
            try {
                mediaPlayer.reset();
                mediaPlayer.setDataSource(nextUrl);
                mediaPlayer.prepare();
            } catch (IOException e) {
                e.printStackTrace();
            }
            mediaPlayer.start();
        }

        public void beforeMusic() {

            mediaPlayer.reset();
            try {
                //mediaPlayer.setDataSource();
                mediaPlayer.prepare();
            } catch (IOException e) {
                e.printStackTrace();
            }
            mediaPlayer.start();
        }
    }
}