你能在后台启动默认音乐播放器吗?

时间:2012-06-14 20:00:11

标签: android android-intent media-player android-service

我的应用中有2个区域可以在设备上启动默认媒体播放器并播放音频文件(播客)。一个人在下载后从文件系统获取它,另一个从网站上的文件中传输它。

现在工作正常,问题是如果我回击或回家试图在启动媒体播放器后回到我的应用程序,播放器关闭并且播放停止。

有没有办法在后台或作为服务启动它,这样当我回到应用程序时,音乐会继续在播放器中播放。我希望它的功能就像你从音乐播放器开始播放一首歌。因此,用户可以正常使用设备,播放将继续。

这是我启动流媒体音乐播放器的代码。

private void playPodcast( Podcast podcast ) {
    Intent intent = new Intent( Intent.ACTION_VIEW );
    intent.setDataAndType( Uri.parse( podcast.getContentLink() ), "audio/*" );
    startActivity( intent );
}

提前致谢。


编辑!收到以下建议后,我尝试将其作为服务启动。我用两种方式试过这个 两种方式都将此作为清单条目:

<service android:name=".DefaultMusicPlayerLaunchService">
</service>

第一次尝试是创建一个仅仅是骨架的Service类,并使用与上面类似的方法启动它。

DefaultMusicPlayerLaunchService V1:

public class DefaultMusicPlayerLaunchService extends Service {

    @Override
    public IBinder onBind( Intent intent ) {
        // TODO Auto-generated method stub
        return null;
    }

    public int onStartCommand( Intent intent, int flags, int startId ) {
        return START_STICKY;
    }
}

playPodcast方法:

    private void playPodcast( Podcast podcast ) {
        Intent intent = new Intent( getApplicationContext(), 
                                    DefaultMusicPlayerLaunchService.class );
        intent.setDataAndType( Uri.parse( podcast.getContentLink() ), "audio/*" );
        startService( intent );
    }

我的想法就是这样,它会像我以前的Activity一样启动音乐播放器,但是在不离开屏幕的情况下启动音乐播放器。我没有看到LogCat中发生任何事情。我觉得这应该有用,但我错过了一些东西。

我尝试的另一种方法是将播客对象序列化为额外的,并将其放在我为Intent创建的DefaultMusicPlayerLaunchService上。然后,在onStartCommand方法中,我抓住了对象,创建了一个新的Intent,然后调用startActivity,类似于顶部的原始playPodcast方法。正如预期的那样,它确实是最顶级的......发布了播放器,但一旦我回击或回家,它就会关闭。

如果我遗漏了一些明显的东西,我道歉。我是Android新手,到目前为止我使用的所有内容都使用了Activity。这是我第一次尝试开始Service

1 个答案:

答案 0 :(得分:0)

是的,您可以将其作为服务启动。您需要创建一个扩展android.app.Service的类。并从Activity调用startService(intent),向其传递将启动服务的intent。重写onStartCommand方法并让它返回START_STICKY,这将使服务运行直到它明确停止。您可以通过代码或Android操作系统来节省资源。您还可以覆盖onBind以将服务绑定到Activity,这将使服务与前台Activity具有相同的重要性,从而使Android不太可能终止服务以节省资源。