我创建了一个基本上包含2 media players
的Android应用程序。从手机记忆中播放音乐的人其他从互联网(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();
}
});
}
}
的Manifest.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>
请建议如何确保不应该调用错误的服务?
此问题的前言:here
谢谢
答案 0 :(得分:0)
你的清单只显示一个服务,即使你已经定义了两个服务,你为你定义的服务输入的操作也没有意义(它与你在代码中定义的任何操作都不匹配)并且会是因为您发送的两个意图都是明确的,所以会被忽略。
您是否在清单中定义了这两项服务?