更改曲目媒体播放器android
我目前正在使用MediaPlayer播放一首歌曲,播放效果很好。当用户选择不同的歌曲时,我会尝试播放。 但是,我得到了MediaPlayer的错误(1,-2147483648)和错误(1,-2147483648)。 这些日志在调用prepareASync()后打印; 注意:文件的路径看起来是正确的。但是,如何检查有效的文件路径 顺序如下:更改曲目媒体播放器android,android,android-mediaplayer,mediaplayback,Android,Android Mediaplayer,Mediaplayback,我目前正在使用MediaPlayer播放一首歌曲,播放效果很好。当用户选择不同的歌曲时,我会尝试播放。 但是,我得到了MediaPlayer的错误(1,-2147483648)和错误(1,-2147483648)。 这些日志在调用prepareASync()后打印; 注意:文件的路径看起来是正确的。但是,如何检查有效的文件路径 顺序如下: 参考代码如下:在我的主要活动的onResume()中(返回时,我想开始播放),我正在调用MusicUtils.createPlayer();及 Music
参考代码如下:在我的主要活动的onResume()中(返回时,我想开始播放),我正在调用MusicUtils.createPlayer();及
MusicUtils.playTrack(McCurrentTrack)
public static void playTrack(String track) {
mTrackToBePlayed = track;
try {
mPlayer.reset();
Log.d(TAG,"after reset");
mPlayer.setDataSource(mTrackToBePlayed);
Log.d(TAG,"after setDataSource");
// mPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
mPlayer.setOnPreparedListener(preparedListener);
Log.d(TAG,"after setOnPreparedListener");
mPlayer.setOnErrorListener(errorListener);
Log.d(TAG,"after setting errorListener");
mPlayer.prepareAsync();
Log.d(TAG,"after prepareAsync");
} catch (IOException e) {
} catch(IllegalArgumentException e) {
}
preparedListener = new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
// TODO Auto-generated method stub
mp.start();
Log.d(TAG,"after start");
}
};
errorListener = new MediaPlayer.OnErrorListener() {
public boolean onError(MediaPlayer mp, int what, int extra) {
switch (what) {
case MediaPlayer.MEDIA_ERROR_SERVER_DIED:
Log.d(TAG,"in onError");
// mIsInitialized = false;
mp.release();
// Creating a new MediaPlayer and settings its wakemode does not
// require the media service, so it's OK to do this now, while the
// service is still being restarted
try{
mp = new MediaPlayer();
mp.reset();
mp.setDataSource(mTrackToBePlayed);
// mp.setAudioStreamType(AudioManager.STREAM_MUSIC);
mp.prepareAsync();
mPlayer = mp;
// mPlayer.start();
} catch (Exception e) {
}
//MediaPlayer.create(mContext, mTrackToBePlayed);
// mPlayer.setWakeMode(MediaPlaybackService.this, PowerManager.PARTIAL_WAKE_LOCK);
return true;
default:
Log.d("MusicPlayer", "Error: " + what + "," + extra);
break;
}
return false;
}
};
//mPlayer.start();
}
public static boolean isPlaying() {
return mPlayer.isPlaying();
}
public static void pauseTrack() {
mPlayer.pause();
}
public static void startTrack() {
mPlayer.start();
}
public static void stopTrack() {
mPlayer.stop();
}
public static void releasePlayer() {
mPlayer.release();
}
public static void playTrack(String track) {
mTrackToBePlayed = track;
try {
mPlayer.reset();
Log.d(TAG,"after reset");
mPlayer.setDataSource(mTrackToBePlayed);
Log.d(TAG,"after setDataSource");
// mPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
mPlayer.setOnPreparedListener(preparedListener);
Log.d(TAG,"after setOnPreparedListener");
mPlayer.setOnErrorListener(errorListener);
Log.d(TAG,"after setting errorListener");
mPlayer.prepareAsync();
Log.d(TAG,"after prepareAsync");
} catch (IOException e) {
} catch(IllegalArgumentException e) {
}
preparedListener = new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
// TODO Auto-generated method stub
mp.start();
Log.d(TAG,"after start");
}
};
errorListener = new MediaPlayer.OnErrorListener() {
public boolean onError(MediaPlayer mp, int what, int extra) {
switch (what) {
case MediaPlayer.MEDIA_ERROR_SERVER_DIED:
Log.d(TAG,"in onError");
// mIsInitialized = false;
mp.release();
// Creating a new MediaPlayer and settings its wakemode does not
// require the media service, so it's OK to do this now, while the
// service is still being restarted
try{
mp = new MediaPlayer();
mp.reset();
mp.setDataSource(mTrackToBePlayed);
// mp.setAudioStreamType(AudioManager.STREAM_MUSIC);
mp.prepareAsync();
mPlayer = mp;
// mPlayer.start();
} catch (Exception e) {
}
//MediaPlayer.create(mContext, mTrackToBePlayed);
// mPlayer.setWakeMode(MediaPlaybackService.this, PowerManager.PARTIAL_WAKE_LOCK);
return true;
default:
Log.d("MusicPlayer", "Error: " + what + "," + extra);
break;
}
return false;
}
};
//mPlayer.start();
}
public static boolean isPlaying() {
return mPlayer.isPlaying();
}
public static void pauseTrack() {
mPlayer.pause();
}
public static void startTrack() {
mPlayer.start();
}
public static void stopTrack() {
mPlayer.stop();
}
public static void releasePlayer() {
mPlayer.release();
}
此函数出现在MusicUtils中,用于获取光标返回的第一个轨迹
public static void retrieveDefaultPath() {
String[] STAR = { "*" };
Uri allsongsuri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
String selection = MediaStore.Audio.Media.IS_MUSIC + " != 0";
mCursor = mContentResolver.query(allsongsuri, STAR, selection, null, null);
if (mCursor != null) {
if (mCursor.moveToFirst()) {
//do {
//mSongName = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.DISPLAY_NAME));
//mSongList.add(mSongName);//populate the list of display names
int song_id = mCursor.getInt(mCursor.getColumnIndex(MediaStore.Audio.Media._ID));
//mMusicIDs.put(song_id, counter++);//fill the HashMap with IDs corresponding to the positions
String fullpath = mCursor.getString(mCursor.getColumnIndex(MediaStore.Audio.Media.DATA));
String album_name = mCursor.getString(mCursor.getColumnIndex(MediaStore.Audio.Media.ALBUM));
int album_id = mCursor.getInt(mCursor.getColumnIndex(MediaStore.Audio.Media.ALBUM_ID));
String artist_name = mCursor.getString(mCursor.getColumnIndex(MediaStore.Audio.Media.ARTIST));
int artist_id = mCursor.getInt(mCursor.getColumnIndex(MediaStore.Audio.Media.ARTIST_ID));
//} while (cursor.moveToNext());
mDefaultPath = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI + "/" + song_id;
Slideshow.mCurrentTrack = mDefaultPath;
}
if (mCursor != null) {
mCursor.close();
}
}
}
以下函数用于获取设备上要使用ListActivity显示的所有曲目
public void getAllSongsFromSDCARD() {
String[] STAR = { "*" };
Uri allsongsuri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
String selection = MediaStore.Audio.Media.IS_MUSIC + " != 0";
cursor = managedQuery(allsongsuri, STAR, selection, null, null);
if (cursor != null) {
if (cursor.moveToFirst()) {
do {
mSongName = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.DISPLAY_NAME));
mSongList.add(mSongName);//populate the list of display names
int song_id = cursor.getInt(cursor.getColumnIndex(MediaStore.Audio.Media._ID));
Log.d("Music List","ID: "+song_id+" counter:"+counter);
mMusicIDs.put(counter++, song_id);//fill the HashMap with IDs corresponding to the positions
String fullpath = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.DATA));
String album_name = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.ALBUM));
int album_id = cursor.getInt(cursor.getColumnIndex(MediaStore.Audio.Media.ALBUM_ID));
String artist_name = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.ARTIST));
int artist_id = cursor.getInt(cursor.getColumnIndex(MediaStore.Audio.Media.ARTIST_ID));
} while (cursor.moveToNext());
}
cursor.close();
}
}
我使用用户选择的ID,并通过以下方式获取文件路径:
music_id = (Integer)mMusicIDs.get(position);
mSelectedPath = mSelectedPath + "/" + music_id;
日志:
8-31 18:07:36.348:D/dalvikvm(23090):外部释放2K,46%释放3088K/5703K,外部1461K/1538K,暂停32ms
08-31 18:07:38.860:D/tag(23090):内部oncreate
08-31 18:07:38.860:D/ImageSwitcher(23090):缓存大小:1
08-31 18:07:39.030:D/ImageSwitcher(23090):图像总数:838
08-31 18:07:39.150:I/音频系统(23090):获取音频flinger
08-31 18:07:39.150:I/AudioSystem(23090):返回新的音频会话id
08-31 18:07:39.150:D/IAudioFlinger(23090):新音频会话
08-31 18:07:39.150:D/IAudioFlinger(23090):newAudioSessionId Out,id=175
08-31 18:07:39.150:D/MediaPlayer(23090):在中重置()
08-31 18:07:39.150:D/MediaPlayer(23090):重置()输出
08-31 18:07:39.150:D/音乐素材(23090):重置后
08-31 18:07:39.160:D/音乐素材(23090):在setDataSource之后
08-31 18:07:39.160:D/音乐素材(23090):设置后准备好的听众
08-31 18:07:39.160:D/音乐素材(23090):设置errorListener后
08-31 18:07:39.170:D/音乐素材(23090):准备后同步
08-31 18:07:39.250:D/MediaPlayer(23090):开始()在
08-31 18:07:39.260:D/MediaPlayer(23090):开始
08-31 18:07:39.270:D/MediaPlayer(23090):开始播放
08-31 18:07:39.270:D/MediaPlayer(23090):开始
08-31 18:07:39.270:D/音乐素材(23090):开始后
08-31 18:07:49.340:D/MediaPlayer(23090):暂停()
08-31 18:07:49.340:D/MediaPlayer(23090):暂停()退出
08-31 18:07:49.560:D/dalvikvm(23090):GC_并发释放239K,45%释放3260K/5831K,外部494K/1006K,暂停10ms+7ms
08-31 18:07:50.842:D/音乐列表(23090):在从SD卡获取所有歌曲之前进行一次创建
08-31 18:07:50.922:D/标签(23090):设置适配器
08-31 18:07:50.922:D/标签(23090):设置适配器完成
08-31 18:07:51.953:D/dalvikvm(23090):GC_外部分配释放146K,45%释放3264K/5831K,外部794K/855K,暂停29毫秒
08-31 18:07:53.905:D/音乐列表(23090):设置项检查后
08-31 18:07:54.585:D/设置(23090):内部onActivityResult
08-31 18:07:55.476:W/KeyCharacterMap(23090):无法打开keycharmap文件
08-31 18:07:55.476:W/KeyCharacterMap(23090):加载keycharmap时出错
文件'/system/usr/keychars/cy8c touchscreen.kcm.bin'。hw.键盘.65538.devname='cy8c-touchscreen'
08-31 18:07:55.476:I/KeyCharacterMap(23090):使用默认值
keymap:/system/usr/keychars/qwerty.kcm.bin
08-31 18:07:55.486:D/MediaPlayer(23090):在中重置()
08-31 18:07:55.486:D/MediaPlayer(23090):重置()输出
08-31 18:07:55.486:D/音乐素材(23090):重置后
08-31 18:07:55.486:D/音乐素材(23090):在setDataSource之后
8-31 18:07:55.486:D/音乐素材(23090):设置后准备好的听众
08-31 18:07:55.486:D/音乐素材(23090):设置errorListener后
08-31 18:07:55.486:D/音乐素材(23090):准备后同步
08-31 18:07:55.496:E/MediaPlayer(23090):错误(1,-2147483648)
08-31 18:07:55.506:E/MediaPlayer(23090):错误(1,-2147483648)
08-31 18:07:55.506:D/MusicPlayer(23090):错误:1,-2147483648**与以下类进行检查,它将列出设备中的所有歌曲,并在单击该名称时播放歌曲**
**Check with the following class it will list out all th songs in the device also it play the song when click on that name.**
public class NewMp3PlayerActivity extends Activity {
ListView musiclist;
int music_column_index,music_column_index1;
int count;
MediaPlayer mMediaPlayer;
ImageView play, pause, forward, backward;
int pposition;
ArrayList<String> songs = new ArrayList<String>(); String songName; Cursor musiccursor;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.songpreview);
play = (ImageView)findViewById(R.id.img_play);
pause = (ImageView)findViewById(R.id.img_pause);
forward = (ImageView)findViewById(R.id.img_forward);
backward = (ImageView)findViewById(R.id.img_backward);
play.setOnClickListener(OnClick);
pause.setOnClickListener(OnClick);
forward.setOnClickListener(OnClick);
backward.setOnClickListener(OnClick);
init_phone_music_grid();
}
View.OnClickListener OnClick = new View.OnClickListener() {
@Override public void onClick(View v) { music_column_index = musiccursor.getColumnIndexOrThrow(MediaStore.Audio.Media.DATA);
Log.e("", "musiccursor.getCount()-->"musiccursor.getCount()); switch(v.getId()){ case R.id.img_play:
Log.v("", "list of songs-->"+songs);
if (mMediaPlayer.isPlaying()) {
mMediaPlayer.reset();
}
mMediaPlayer.start();
break; case R.id.img_pause:
if (mMediaPlayer.isPlaying()) {
mMediaPlayer.pause();
}
break; case R.id.img_forward: // musiccursor.moveToPosition(pposition+1);
try {
String filename="";
if (pposition < songs.size()){
pposition = pposition+1;
filename = songs.get(pposition);//musiccursor.getString(music_column_index);
}else{
}
Log.e("", "filename-->"+filename);
mMediaPlayer.reset();
mMediaPlayer.setDataSource(filename);
mMediaPlayer.prepare();
mMediaPlayer.start();
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalStateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch(IndexOutOfBoundsException ie){
pposition = 0;
}
break; case R.id.img_backward:
try {
String filename_n="";
if (pposition <= songs.size()){
pposition = pposition-1;
filename_n = songs.get(pposition);//musiccursor.getString(music_column_index);
}else{
}
mMediaPlayer.reset();
mMediaPlayer.setDataSource(filename_n);
mMediaPlayer.prepare();
mMediaPlayer.start();
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalStateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch(ArrayIndexOutOfBoundsException ar){
pposition = songs.size();
}
break; default:
break; }
} };
private void init_phone_music_grid() {
System.gc();
String[] proj = { MediaStore.Audio.Media._ID,MediaStore.Audio.Media.DATA,MediaStore.Audio.Media.DISPLAY_NAME,MediaStore.Video.Media.SIZE };
musiccursor = managedQuery(MediaStore.Audio.Media.INTERNAL_CONTENT_URI, proj, null, null, null);
Log.e("", "filename-->"musiccursor.getCount());
count = musiccursor.getCount();
musiclist = (ListView) findViewById(R.id.lst_music);
musiclist.setAdapter(new MusicAdapter(getApplicationContext()));
musiclist.setOnItemClickListener(musicgridlistener);
mMediaPlayer = new MediaPlayer();
mMediaPlayer.setOnCompletionListener(new OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
try {
String filename="";
if (pposition < songs.size()){
pposition = pposition+1;
filename = songs.get(pposition);//musiccursor.getString(music_column_index);
}else{
}
Log.e("", "filename-->"+filename);
mMediaPlayer.reset();
mMediaPlayer.setDataSource(filename);
mMediaPlayer.prepare();
mMediaPlayer.start();
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalStateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch(IndexOutOfBoundsException ie){
pposition = 0;
}
} });
}
private OnItemClickListener musicgridlistener = new OnItemClickListener() {
public void onItemClick(AdapterView parent, View v, int position,long id) {
System.gc();
pposition = position;
music_column_index = musiccursor.getColumnIndexOrThrow(MediaStore.Audio.Media.DATA);
musiccursor.moveToPosition(position);
String filename = musiccursor.getString(music_column_index);
String filen = songs.get(pposition);
Log.e("", "index-->"+music_column_index);
try {
mMediaPlayer.reset();
mMediaPlayer.setDataSource(filen);
mMediaPlayer.prepare(); // mMediaPlayer.start();
} catch (Exception e) {
}
}
};
public class MusicAdapter extends BaseAdapter {
private Context mContext;
public MusicAdapter(Context c) {
mContext = c;
}
public int getCount() {
return count;
}
public Object getItem(int position) {
return position;
}
public long getItemId(int position) {
return position;
}
public View getView(int position, View convertView, ViewGroup parent) {
System.gc();
TextView tv = new TextView(mContext.getApplicationContext());
String id = null;
if (convertView == null) {
music_column_index = musiccursor.getColumnIndexOrThrow(MediaStore.Audio.Media.DISPLAY_NAME);
music_column_index1 = musiccursor.getColumnIndexOrThrow(MediaStore.Audio.Media.DATA);
musiccursor.moveToPosition(position);
id = musiccursor.getString(music_column_index);
songName = musiccursor.getString(music_column_index);
songs.add( musiccursor.getString(music_column_index1) );
music_column_index = musiccursor.getColumnIndexOrThrow(MediaStore.Audio.Media.SIZE);
musiccursor.moveToPosition(position);
id += " Size(KB):" + musiccursor.getString(music_column_index);
tv.setText(id);
} else
tv = (TextView) convertView;
return tv;
}
} }
公共类NewMP3PlayerPractivity扩展活动{
列表视图音乐列表;
int music_column_index,music_column_index1;
整数计数;
媒体播放器;
ImageView播放、暂停、向前、向后;
对立;
ArrayList songs=new ArrayList();字符串songName;光标musiccursor;
/**在首次创建活动时调用*/
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.songpreview);
play=(ImageView)findViewById(R.id.img_play);
pause=(ImageView)findViewById(R.id.img\u pause);
正向=(ImageView)findViewById(R.id.img_正向);
向后=(ImageView)findViewById(R.id.img_向后);
play.setOnClickListener(OnClick);
pause.setOnClickListener(OnClick);
forward.setOnClickListener(OnClick);
backward.setOnClickListener(OnClick);
init_phone_music_grid();
}
View.OnClickListener OnClick=new View.OnClickListener(){
@重写public void onClick(View v){music\u column\u index=musiccursor.getColumnIndexOrThrow(MediaStore.Audio.Media.DATA);
Log.e(“,”musiccursor.getCount()-->”musiccursor.getCount());开关(v.getId()){case R.id.img\u播放:
Log.v(“,”歌曲列表-->“+歌曲);
if(mmediplayer.isPlaying()){
mmediplayer.reset();
}
mmediplayer.start();