2011-09-01 72 views
0
public class PlayAudio extends BroadcastReceiver{ 
     private Context mContext; 
     MediaPlayer mp; 

@Override 
public void onReceive(Context context, Intent intent) { 

    mContext = context; 
    mIntent = intent; 
    playSound("sound.mp3"); 

    } 

     private void playSound(String file){ 
      mp = MediaPlayer.create(mContext, Uri.parse("file://"+file)); 
      if (mp.isPlaying()) 
      { 
       mp.stop(); 
      } 

       mp.setLooping(true); 
       try { 
        mp.prepare(); 
      } catch (IllegalStateException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } catch (IOException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
       mp.start(); 
     } 

} 

我收到一个错误,当我检查mp是否正在播放。我如何检查MediaPlayer(mp)是否在播放,以便我可以阻止它?Android MediaPlayer问题

+0

你得到了什么错误,请显示logcat。 –

+0

你检查过变量mp是不是null? – Dayerman

回答

0

在上面的代码中首先有点混淆 在上面的代码中,每次调用playound()时都会创建一个媒体播放器的新实例,只需在playaudio类的oncreate()中实例化mp一次并反复使用它。

另外,如果你使用create来实例化mediaplayer,你准备在内部调用你不应该再次调用它.http://developer.android.com/reference/android/media/MediaPlayer.html#create(android.content。 Context,android.net.Uri)

确认mediaplayer实例是否成功创建后,检查mp是否为空。

+0

我做了你劝我做的事情。我检查mp是否为空。如果不是,那么我检查mp.isPlaying()是否为真。但我总是得到那个mp.isPlaying()是错误的。 – Nicos

+0

如果您还没有将媒体播放器创建部分移动到该类的创建部分,那么您总是会因为您每次创建尚未播放的媒体播放器的新实例而将mp.isplaying()设置为false。 – potter

+0

我为解决此问题所做的工作是创建一个由我的广播接收器调用的服务。在服务中,我启动和停止MediaPlayer – Nicos