2013-03-29 100 views
0

我有播放音樂。在我這個代碼主要活動啓動的機器人服務:開始活動停止機器人服務

Intent service = new Intent(MainMenu.this, musicservice.class); 
MainMenu.this.startService(service); 

,這是我的服務:

public class musicservice extends Service { 
@Override 
public IBinder onBind(Intent arg0) { 
    return null; 
} 

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

    MediaPlayer mp; 
    mp = MediaPlayer.create(musicservice.this, R.raw.music); 
    mp.setOnCompletionListener(new OnCompletionListener() { 
     public void onCompletion(MediaPlayer mp) { 
      mp.release(); 
     } 
    }); 
    mp.start(); 

    return Service.START_STICKY; 
} 

@Override 
public void onDestroy() { 
    super.onDestroy(); 
} 

}

它stsrts工作正常,但是當我開始另一項活動,我的音樂熄滅,似乎我的服務破壞!但不想要這個,我希望我的服務只在我的應用程序結束時停止。僅當用戶使用應用程序時音樂纔會播放。即使在背景中的應用程序,我希望我的音樂不玩!我怎麼能實現這個?

+0

只是爲了澄清,你想在音樂停止,你開始另一個馬上播放活動?或者當你開始另一項活動時,是否希望它繼續玩?我正在問這個問題是因爲你給TGMCians的回覆。起初,我以爲TGMCians誤解了你的問題,但根據你對他的回覆 - 我不再那麼確定了。 –

回答

0

當您的活動通過活動啓動服務時,服務會破壞您的活動。

使用AlarmManager重複計劃服務。

+0

然後我必須從哪裏開始我的服務? – Fcoder

+0

Farhad,假設你真的希望你的音樂在另一個活動開始時繼續播放(這是TGMCians走向我認爲的方向)。您需要從您的活動中啓動一個單獨的線程,然後從該線程啓動音樂服務。但是,爲了方便用戶在您的活動不再可見時停止該音樂,通常允許用戶停止狀態欄/操作欄下方通知區域的音樂,和/或停止音樂服務當用戶拔下他的耳機。 –

1

如果您希望應用程序在您的活動開啓時播放音樂,請嘗試bind it

它應該是這個樣子:

服務:

package com.example.service; 

import android.app.Service; 
import android.content.Intent; 
import android.media.MediaPlayer; 
import android.media.MediaPlayer.OnCompletionListener; 
import android.os.Binder; 
import android.os.IBinder; 

import com.example.playmusic.R; 

public class PlayMusicService extends Service { 

    private final IBinder binder = new LocalBinder(); 

    private MediaPlayer player; 

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

    public class LocalBinder extends Binder { 

     public PlayMusicService getService() { 
      return PlayMusicService.this; 
     } 
    } 

    public void play() { 
     player = MediaPlayer.create(this, R.raw.music); 
     player.setOnCompletionListener(new OnCompletionListener() { 
      @Override 
      public void onCompletion(MediaPlayer mp) { 
       mp.release(); 
      } 
     }); 
     player.start(); 

    } 

    public void pause() { 
     player.pause(); 
    } 
} 

活動:

package com.example.playmusic; 

import android.app.Activity; 
import android.content.ComponentName; 
import android.content.Context; 
import android.content.Intent; 
import android.content.ServiceConnection; 
import android.os.Bundle; 
import android.os.IBinder; 

import com.example.service.PlayMusicService; 
import com.example.service.PlayMusicService.LocalBinder; 

public class MainActivity extends Activity { 

private PlayMusicService service; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
} 

@Override 
protected void onPause() { 
    super.onPause(); 
    service.pause(); 
} 

@Override 
protected void onStart() { 
    super.onStart(); 
    if (service != null) { 
     service.play(); 
    } else { 
     bindService(); 
    } 
} 

    private void bindService() { 
     bindService(new Intent(this, PlayMusicService.class), new ServiceConnection() { 

      @Override 
      public void onServiceDisconnected(ComponentName name) { 
       service = null; 

      } 

      @Override 
      public void onServiceConnected(ComponentName name, IBinder binder) { 
       LocalBinder localBinder = (LocalBinder) binder; 
       service = localBinder.getService(); 
       service.play(); 

      } 
     }, Context.BIND_AUTO_CREATE); 
    } 

}