安卓音乐播放器
E/MediaPlayer: Should have subtitle controller already set
这个错误该怎么修改啊
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();
}
/**
@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();
}
}
}
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;
}
});
}
}
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();
}
}
}