我有MP3播放服务,它有自己的类并使用Mediaplayer并与HTTP连接。它必须播放前一个活动中选择的一个URL,并传递给PlayerActivity。将参数传递给Android中正在运行的服务线程
我在PlayerActivity的onCreate创建服务是这样的:
startService(new Intent(this, PlayerService.class));
Intent connectionIntent = new Intent(this, PlayerService.class);
bindService(connectionIntent, mp3PlayerServiceConnection, Context.BIND_AUTO_CREATE);
这是第一个选择的URL启动。我启动媒体播放器调用在新线程不阻塞UI(呼叫在ActivityPlayer本身):
private ServiceConnection mp3PlayerServiceConnection = new ServiceConnection() {
@Override
public void onServiceConnected(ComponentName arg0, IBinder binder) {
mp3Service = ((LocalBinder) binder).getService();
Thread t = new Thread() {
public void run() {
mp3Service.playSong(getApplicationContext(),url);
}
};
t.start();
}
@Override
public void onServiceDisconnected(ComponentName arg0) {
}
};
的问题是如何将一个新的URL传递给该服务的线程,当用户销毁这个活动,去到菜单并选择新的URL。新的流必须在同一个线程中播放,但我有一些情况可以通过后退按钮返回到主页并再次启动应用程序,我同时播放了2个网址。也许是因为新的Thread()声明。因此,当Activity使用URL创建时,如何将其URL传递给Service的线程,因此如果它是旧URL,则什么都不会发生,如果是新的,则播放器切换到新的URL,但不会同时播放2个流?
谢谢。
您是否在bindService或新服务器上返回相同的Binder? –
这里是Service类的代码:'public final IBinder localBinder = new LocalBinder(); @Override public IBinder onBind(Intent intent){ return localBinder; } public class LocalBinder extends Binder {0} {0} PlayerService getService(){ return PlayerService.this; } }' – Tramway11