我创建了一个基本上包含 2 的 android 应用程序media players
。一种播放手机内存中的音乐,另一种播放来自互联网(URL)的流。
每个媒体播放器都在其单独的activity
. 我是Service
用来播放的。(即当用户按下播放按钮时,服务启动并播放媒体)。
MusicPlayer 是应用程序的默认活动,位于包中com.example.musicplayer
。而流播放器位于不同的包com.example.streamplayer
中。
问题:当应用程序启动时,我选择流播放器并按下播放按钮,虽然 URL 流被播放,但我也注意到onStartCommand
其他媒体播放器,即音乐播放器也被调用。
这意味着活动 B 正在调用服务 A,即使两者都在不同的包中。
音乐播放器活动和服务代码
package com.example.musicplayer;
public class MusicPlayerActivity extends Activity {
public void onCreate(Bundle savedInstanceState) {
....
Intent service = new Intent(this, MusicService.class);
startService(service);
....
}
}
package com.example.musicplayer;
public class MusicService extends Service {
....
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
super.onStartCommand(intent, flags, startId);
Toast.makeText(this, "Music Service onStartCommand()", Toast.LENGTH_LONG).show(); // This gets displayed even in the Stream Activty
return START_STICKY;
}
....
}
流活动和服务的代码:
package com.example.streamplayer;
public class StreamPlayer extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
....
Intent service = new Intent(this, StreamService.class);
service.putExtra("URL", url);
startService(service);
....
}
}
package com.example.streamplayer;
public class StreamService extends Service {
protected void startStream() {
MediaPlayer mPlayer = new MediaPlayer();
mPlayer.reset();
mPlayer.setDataSource(url);
mPlayer.prepareAsync();
mPlayer.setOnPreparedListener(new OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
mp.start();
}
});
}
}
清单.xml
注意:在清单文件中,我还尝试添加以指定哪个服务用于哪个意图。(不确定它是否只这样工作)
<service
android:name=".MusicService"
android:enabled="true" >
<intent-filter>
<action android:name="com.example.musicplayer.MusicPlayerActivity" />
</intent-filter>
</service>
<service
android:name="com.example.streamplayer.StreamService"
android:enabled="true" >
<intent-filter>
<action android:name="com.example.streamplayer.StreamService" />
</intent-filter>
</service>
请建议如何确保不应该调用错误的服务?
这个问题的前传:这里
谢谢你