我创建一个Android应用程序,基本上包含2 media players
. 一个从手机内存播放音乐,另一个播放来自互联网(URL)的流 .
每个媒体播放器都在其独立的 activity
中定义 . 我正在使用 Service
进行播放 . (即,当用户按下播放按钮时,服务开始并播放媒体) .
MusicPlayer是应用程序的默认活动,位于包 com.example.musicplayer
中 . 然而,流播放器位于不同的包中 com.example.streamplayer
.
Issue: 当应用程序启动时我选择了流播放器并按下播放按钮,虽然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();
}
});
}
}
的Manifest.xml
清单文件中的 Note: 我也尝试添加以指定哪个服务用于哪个意图 . (不确定它是否只能这样工作)
<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>
请建议如何确保不应该调用错误的服务?
这个问题的前传:here
谢谢
1 回答
您的清单只显示一个服务,即使您已经定义了两个服务,并且您为您定义的服务添加的操作没有意义(它与您在代码中定义的任何操作都不匹配)并且将被忽略您发送的意图是明确的 .
您是否在清单中定义了两种服务?