2012-01-12 75 views
0

我正在寻找开始Service以保持用户关闭它时从我的应用播放音乐。我已经做了大量的搜索工作,我真正想要的只是一个简单的例子,当用户按下按钮时,我可以启动服务和音乐。当用户在其他位置回到应用程序并按下另一个按钮时,我想绑定到服务并停止音乐播放。我进行了大量的搜索,我希望有人能够给我一个清楚的解释,说明这一切如何工作,甚至可能是一个代码示例。Android MediaPlayer服务

+0

我想这是你想要什么:http://stackoverflow.com/questions/6668298/how-do-android-mediaplayers-continuing-playing-songs-whe正APP-被封闭 – 2014-09-23 17:50:16

回答

0

使用此代码段SD卡播放歌曲:

public void playSong(int songIndex) { 
     // Play song 
     try { 
      mp.reset(); 
      mp.setDataSource(songsListingSD.get(songIndex).get("songPath")); 
      mp.prepare(); 
      mp.start(); 
      // Displaying Song title 
      String songTitle = songsListingSD.get(songIndex).get("songTitle"); 
      songTitleLabel.get().setText(songTitle); 
      // Changing Button Image to pause image 
      btnPlay.get().setImageResource(R.drawable.ic_media_pause); 
      // set Progress bar values 
      songProgressBar.get().setProgress(0); 
      songProgressBar.get().setMax(100); 
      // Updating progress bar 
      updateProgressBar(); 
     } catch (IllegalArgumentException e) { 
      e.printStackTrace(); 
     } catch (IllegalStateException e) { 
      e.printStackTrace(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 

在服务机器人媒体播放器的运行更加的示例代码,你可以参考this tutorial.

0

我已经实现了这个穆西cservcie类做工精致

public class MusicSrvice extends Service implements MediaPlayer.OnErrorListener,MediaPlayer.OnCompletionListener, MediaPlayer.OnInfoListener{ 
     public static final String ACTION_STOP="com.example.music4u.ACTION_STOP"; 
     public static final String ACTION_PLAY="com.example.music4u.ACTION_PLAY"; 
     public static final String ACTION_PAUSE="com.example.music4u.ACTION_PAUSE"; 
    private final IBinder mBinder = new ServiceBinder(); 
    MediaPlayer mPlayer; 
    String path=""; 
    private int length = 0; 
    private boolean isPlaying = false; 
    private static final int NOTIFICATION_ID = 1; 

    public MusicSrvice() { } 

    public class ServiceBinder extends Binder { 
     MusicSrvice getService() 
     { 
      return MusicSrvice.this; 
     } 
    } 

    @Override 
    public IBinder onBind(Intent arg0){return mBinder;} 

    @Override 
    public void onCreate(){ 
     super.onCreate(); 
     AudioManager amanager = (AudioManager) this.getSystemService(Context.AUDIO_SERVICE); 
     int maxVolume = amanager.getStreamMaxVolume(AudioManager.STREAM_MUSIC); 
     amanager.setStreamVolume(AudioManager.STREAM_MUSIC, maxVolume, 0); 
     mPlayer=new MediaPlayer(); 
     mPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); 
     // mPlayer = MediaPlayer.create(this, R.raw.jingle); 
     mPlayer.setOnErrorListener(this); 

     if(mPlayer!= null) 
     { 
      mPlayer.setLooping(true); 
      //mPlayer.setVolume(100,100); 
     } 


     /* mPlayer.setOnErrorListener(new OnErrorListener() { 

     public boolean onError(MediaPlayer mp, int what, int 
      extra){ 

      onError(mPlayer, what, extra); 
      return true; 
     } 
      });*/ 
    } 

    @Override 
    public int onStartCommand (Intent intent, int flags, int startId) 
    { 

     if(intent.getExtras()!=null){ 
     path =intent.getExtras().getString("path"); 

     } 
     Context c = getApplicationContext(); 


     if (intent != null) { 
      String action = intent.getAction(); 
      if(action!=null){ 
      // if (!TextUtils.isEmpty(action)) { 
       if (action.equals(ACTION_STOP)) { 
        pauseMusic(path); 
        }} 
      } 
       //} 
     /// path = intent.getStringExtra(EXTRA_FILENAME); 
    if (path == null) { 
      Log.w("logtag", "PlayService::onStart recording == null, returning"); 
      //return; 
     } 

     Log.i("", "PlayService will play " + path); 
     try { 
      if(mPlayer!=null){ 
      mPlayer.reset(); 
      mPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); 
      mPlayer.setDataSource(path); 
      mPlayer.setLooping(false); 
      mPlayer.prepare(); 
      Log.d("logtag", "PlayService player.prepare() returned");    
      mPlayer.start(); 
      CustomNotification(); 


      isPlaying = true; 
      Log.i("logtag", "player.start() returned");} 
      else 
      { 
       Log.i("logtag", "mediaplayer null"); 
      } 
      //updateNotification(true); 
     } catch (java.io.IOException e) { 
      Log.e("", "PlayService::onStart() IOException attempting player.prepare()\n"); 
      Toast t = Toast.makeText(getApplicationContext(), "PlayService was unable to start playing recording: " + e, Toast.LENGTH_LONG); 
      t.show(); 
      // return; 
     } catch (java.lang.Exception e) { 
      Toast t = Toast.makeText(getApplicationContext(), "MusicPlayer was unable to start playing recording: " + e, Toast.LENGTH_LONG); 
      t.show(); 

      Log.e("", "PlayService::onStart caught unexpected exception", e); 
     } 

       return START_STICKY; 
    } 

    public void pauseMusic(String path) 
    { 
     if(mPlayer.isPlaying()) 
     { 
      mPlayer.pause(); 
      length=mPlayer.getCurrentPosition(); 

     } 
     else{ 
      mPlayer.reset(); 
      mPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); 
      try { 
       mPlayer.setDataSource(path); 
      } catch (IllegalArgumentException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } catch (SecurityException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } catch (IllegalStateException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } catch (IOException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
      mPlayer.setLooping(false); 
      try { 
       mPlayer.prepare(); 
      } catch (IllegalStateException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } catch (IOException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
      Log.d("logtag", "PlayService player.prepare() returned");    
      mPlayer.start();  } 
    } 

    public void playNextSong(String path) 
    { 
      mPlayer.stop(); 
      mPlayer.reset(); 
      mPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); 
      try { 
       mPlayer.setDataSource(path); 
      } catch (IllegalArgumentException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } catch (SecurityException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } catch (IllegalStateException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } catch (IOException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
      mPlayer.setLooping(false); 
      try { 
       mPlayer.prepare(); 
      } catch (IllegalStateException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } catch (IOException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
      Log.d("logtag", "PlayService player.prepare() returned");    
      mPlayer.start();   
    } 
    public boolean isplaying(){ 
     if(mPlayer!= null) 
      { 
     return mPlayer.isPlaying();} 
     return false; 
    } 
    public void seekto(int duration){ 
     if(mPlayer!= null) 
     { 
     mPlayer.seekTo(duration);} 
    } 
    public int getCurrentPosition(){ 
     if(mPlayer!= null) 
     { 
     return mPlayer.getCurrentPosition();} 
     return 0; 

    } 
    public int getDuration(){ 
     if(mPlayer!= null) 
     { 
     return mPlayer.getDuration();} 
     return 0; 

    } 
    public void resumeMusic() 
    { 
     if(mPlayer.isPlaying()==false) 
     { 
      mPlayer.seekTo(length); 
      mPlayer.start(); 
     } 
    } 

    public void stopMusic() 
    { 
     mPlayer.stop(); 
     mPlayer.release(); 
     mPlayer = null; 
    } 

    @Override 
    public void onDestroy() 
    { 
     super.onDestroy(); 
     if(mPlayer != null) 
     { 
     try{ 
     mPlayer.stop(); 
     mPlayer.release(); 
      }finally { 
       mPlayer = null; 
      } 
     } 
    } 
@Override 
public void onLowMemory() { 
    // TODO Auto-generated method stub 
    super.onLowMemory(); 
    NotificationManager notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE); 
    String message = "Sorry your system has low memory"; 
    Notification notification = new Notification(android.R.drawable.ic_dialog_alert, message, System.currentTimeMillis()); 
    notificationManager.notify(1, notification); 
    stopSelf(); 
} 

    public boolean onError(MediaPlayer mp, int what, int extra) { 

     Toast.makeText(this, "music player failed", Toast.LENGTH_SHORT).show(); 
     if(mPlayer != null) 
     { 
      try{ 
       mPlayer.stop(); 
       mPlayer.release(); 
      }finally { 
       mPlayer = null; 
      } 
     } 
     return false; 
    } 

    @Override 
    public boolean onInfo(MediaPlayer arg0, int arg1, int arg2) { 
     // TODO Auto-generated method stub 
     return false; 
    } 

    @Override 
    public void onCompletion(MediaPlayer arg0) { 
     // TODO Auto-generated method stub 

    } 
    public void release(){ 
     mPlayer.release(); 
    }