2012-01-12 4 views
0

사용자가 앱을 닫을 때 음악을 계속 재생하려면 Service을 시작합니다. 나는 많은 검색을 해왔다. 그리고 내가 정말로 찾고있는 것은 사용자가 버튼을 누를 때 서비스와 음악을 시작할 수있는 간단한 예제이다. 사용자가 다른 지점에서 앱으로 돌아와 다른 버튼을 누르면 서비스에 바인딩하고 음악 재생을 중단하고 싶습니다. 나는 많은 검색을 해왔고 누군가가 나에게 이것이 어떻게 작동하는지 그리고 심지어 코드 예제가 어떻게되는지에 대한 명확한 설명을 줄 수 있기를 바랬다.Android MediaPlayer 서비스

+0

나는 이것이 당신이 원하는 생각 : http://stackoverflow.com/questions/6668298/how-do-android-mediaplayers-continuing-playing-songs-whe n-app-is-closed –

답변

0

이 조각 코드를 사용하여 SD 카드에 노래를 재생 :이 음 ì의 cservcie 클래스를 구현 한

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(); 
     } 
    } 

서비스에서 안드로이드 MediaPlayer를 실행에 대한 더 많은 예제 코드, 당신은 할 수 있습니다 참조

0

this tutorial.에를하는 잘 작동

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(); 
    }