在我的应用程序中,我正在尝试与搜索栏一起播放媒体播放器。当我试图从我的应用程序中存储的文件夹中播放歌曲时,它工作正常并且搜索栏被移动。
当我尝试从SD卡播放连续歌曲时,它会崩溃并在logcat中显示以下错误。
ERROR/sdcard play(2500): 02 - bird flu.mp3
ERROR/MediaPlayer(2500): Command PLAYER_SET_DATA_SOURCE completed with an error or info PVMFErrNotSupported
ERROR/MediaPlayer(2500): error (1, -4)
ERROR/MediaPlayer(2500): Attempt to call getDuration without a valid mediaplayer
ERROR/MediaPlayer(2500): error (-38, 0)
ERROR/sdcard play(2500): 03 Un Mela Aasadhaan.mp3
ERROR/MediaPlayer(2500): setDataSource called in state 0
ERROR/MediaPlayer(2500): prepareAsync called in state 0
ERROR/MediaPlayer(2500): Attempt to call getDuration without a valid mediaplayer
ERROR/MediaPlayer(2500): error (-38, 0)
以下是我的代码
sv = (SurfaceView)findViewById(R.id.surfaceView1);
// mediaPlayer =MediaPlayer.create(this, R.raw.b);
init_mediaPlayer();
// sv.postDelayed(runnable,200);
seek = (SeekBar)findViewById(R.id.seekBar1);
seek.setMax(mediaPlayer.getDuration());
System.out.println("**** MEDIA PLAYER DURATION "+ mediaPlayer.getDuration());
play.setOnClickListener(new View.OnClickListener()
{
public void onClick(View v)
{
mediaPlayer.start();
myHandler.post(runn);
isPlaying = true;
}
});
pause.setOnClickListener(new View.OnClickListener()
{
public void onClick(View v)
{
mediaPlayer.pause();
mediaPlayer.prepare();
}
});
seek.setProgress(mediaPlayer.getCurrentPosition());
System.out.println("**** MEDIA PLAYER CURRENT DURATION "+ mediaPlayer.getCurrentPosition());
}
private void init_mediaPlayer()
{
System.gc();
final String[] proj = { MediaStore.Audio.Media._ID,MediaStore.Audio.Media.DATA,MediaStore.Audio.Media.DISPLAY_NAME,MediaStore.Audio.Media.SIZE };
Log.e("media",""+proj);
musiccursor = managedQuery(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,proj, null, null, null);
Log.e("media1",""+musiccursor);
count = musiccursor.getCount();
Log.e("media2",""+count);
if(musiccursor!=null)
{
musiccursor.moveToFirst();
MediaPlayer mediaPlayer = new MediaPlayer();
do{
filename=musiccursor.getString(2);
Log.e("sdcard play",filename);
mediaPlayer.setDataSource(filename);
mediaPlayer.prepare();
if(mediaPlayer.getCurrentPosition()==mediaPlayer.getDuration())
{
end=musiccursor.moveToNext();
}
}
while(end);
}
答案 0 :(得分:2)
看看这个
在PVMFErrNotSupported上搜索更多信息
答案 1 :(得分:-1)
以下是我的代码,我可以用搜索条移动来播放这首歌......
//搜索栏 MediaPlayer mediaPlayer; boolean isPlaying = false; SurfaceView sv; //媒体播放器 光标musiccursor; int music_column_index; int count; String filename; boolean end = true;
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.start);
sv = (SurfaceView)findViewById(R.id.surfaceView1);
mediaPlayer =MediaPlayer.create(this, R.raw.blue);
seekbar = (SeekBar)findViewById(R.id.seekBar1);
seekbar.setMax(mediaPlayer.getDuration());
System.out.println("**** MEDIA PLAYER DURATION "+ mediaPlayer.getDuration());
Start = (Button)findViewById(R.id.widget306);
Start.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v)
{
mediaPlayer.start(); //--> Start Media Palyer
myHandler.post(runn); //--> SeekBar Progress
isPlaying = true;
}
});
seekbar.setProgress(mediaPlayer.getCurrentPosition());
seekbar = (SeekBar)findViewById(R.id.seekBar1);
}
//SeekBar thread
private Handler myHandler = new Handler();
final Runnable runn = new Runnable()
{
public void run()
{
if (mediaPlayer != null)
{
if (isPlaying )
{
try
{
int currentPosition = mediaPlayer.getCurrentPosition();
seekbar.setProgress(currentPosition);
}
catch (Exception e)
{
e.printStackTrace();
}
sv.postDelayed(runn, 150);
}
}
}
};