首页 文章

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

提问于
浏览
0

我创建一个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 回答

  • 0

    您的清单只显示一个服务,即使您已经定义了两个服务,并且您为您定义的服务添加的操作没有意义(它与您在代码中定义的任何操作都不匹配)并且将被忽略您发送的意图是明确的 .

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

相关问题