【问题标题】:Android Mediaplayer won't loadAndroid 媒体播放器无法加载
【发布时间】:2011-11-26 07:05:31
【问题描述】:

我有一个类调用这个服务类来播放媒体播放器

 class MusicService extends Service implements OnCompletionListener {
 MediaPlayer mediaPlayer;

   @Override
  public IBinder onBind(Intent intent) {
 return null;
  }

  @Override
  public void onCreate() {
  mediaPlayer = MediaPlayer.create(this, R.raw.s);// raw/s.mp3
  mediaPlayer.setOnCompletionListener(this);
  }

 @Override
public int onStartCommand(Intent intent, int flags, int startId) {
  if (!mediaPlayer.isPlaying()) {
  mediaPlayer.start();
  }
return START_STICKY;
 }

public void onDestroy() {
   if (mediaPlayer.isPlaying()) {
   mediaPlayer.stop();
   }
   mediaPlayer.release();
 }

   public void onCompletion(MediaPlayer _mediaPlayer) {
 stopSelf();
 }

}

我不希望它加载原始文件,我希望它加载一个路径,该路径是调用此服务的类中的一个字符串。

 String path = "path is here"

 private void playAudio(String url) throws Exception{
 Intent music = new Intent(this,MusicService.class);
 intent.putExtra("paths",path)
 startService(music);

我该怎么做呢……

音乐文件来自 sd 卡

【问题讨论】:

  • 您的音乐文件存储在哪里?
  • 那么你的问题是什么,音乐没有播放或出现任何异常?

标签: android service path media-player


【解决方案1】:

只需使用这个---------

MediaPlayer md=new MediaPlayer();
        md.prepare();
        md.setDataSource(path);

【讨论】:

  • 是的,除非当他们退出该屏幕时选择一首新歌曲并再次加载屏幕,现在两个音乐播放器正在相互播放
【解决方案2】:

我不知道您在活动中在做什么,但是,如果您只是在服务中传递音乐文件路径,然后想在服务中启动媒体播放器,那么我认为您必须尝试这样的事情,

    MediaPlayer mediaPlayer; 
     String musicFile;

    @Override        
    public void onCreate() {        
       mediaPlayer = new MediaPlayer();
       mediaPlayer.setOnCompletionListener(this);        
     }   
    @Override   
    onStartCommand(Intent intent, int flags, int startId)        {          
      musicFile=intent.getExtra("paths"); 
    try {

            mediaPlayer.reset();
            mediaPlayer.setDataSource(musicFile);
            mediaPlayer.prepare();

        } catch (IllegalArgumentException e) {
         // TODO Auto-generated catch block
          e.printStackTrace();
       }
     if (!mediaPlayer.isPlaying()) 
       {             
        mediaPlayer.start();             
        } 
      return START_STICKY;     
     } 

【讨论】:

  • 在setDatacource之后你必须放prepare方法。当你要玩的时候,检查播放器是否已经设置路径设置并播放。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多