Android:Activity也调用该应用程序的其他服务,该服务未被调用

时间:2013-02-15 21:11:04

标签: android android-service android-mediaplayer

我创建了一个基本上包含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

谢谢

1 个答案:

答案 0 :(得分:0)

你的清单只显示一个服务,即使你已经定义了两个服务,你为你定义的服务输入的操作也没有意义(它与你在代码中定义的任何操作都不匹配)并且会是因为您发送的两个意图都是明确的,所以会被忽略。

您是否在清单中定义了这两项服务?