【问题标题】:Can you start the default music player in the background?可以在后台启动默认音乐播放器吗?
【发布时间】:2012-06-14 20:00:10
【问题描述】:

我的应用中有 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 中发生任何事情。我觉得这应该可行,但我错过了一些东西。

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

如果我遗漏了一些明显的东西,我深表歉意。我是 Android 新手,到目前为止我使用过的所有东西都使用过Activity。这是我第一次尝试创建Service

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

    • 感谢您的意见。抱歉,我花了这么长时间才尝试这个。我不确定我这样做是否正确。我已经尝试了两种不同的方式,但都没有奏效。我将用更多信息更新主题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多