【发布时间】: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