1

我的应用程序中有 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>

第一次尝试是创建一个只是一个骨架的服务类,并使用与上述类似的方法启动它。

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;
    }
}

播放播客方法:

    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.

4

1 回答 1

0

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

于 2012-06-14T20:32:04.223 回答