0

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

请建议如何确保不应该调用错误的服务?

这个问题的前传:这里

谢谢你

4

1 回答 1

0

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

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

于 2013-02-16T00:31:44.123 回答