Android背景音乐服务
我正在开发一个在android的娱乐应用程序。 我想播放背景音乐,我想用这个服务。 应用程序有3个活动,音乐必须在所有活动中播放。 而且,当活动暂停时,音乐必须暂停并在被销毁时停止。 谁能告诉我如何做到这一点? 任何链接或例子?
谢谢。
做没有服务
http://www.rbgrn.net/content/307-light-racer-20-days-61-64-completion
如果你认真对待使用mediaplayer的服务
Intent svc=new Intent(this, BackgroundSoundService.class); startService(svc);
public class BackgroundSoundService extends Service { private static final String TAG = null; MediaPlayer player; public IBinder onBind(Intent arg0) { return null; } @Override public void onCreate() { super.onCreate(); player = MediaPlayer.create(this, R.raw.idil); player.setLooping(true); // Set looping player.setVolume(100,100); } public int onStartCommand(Intent intent, int flags, int startId) { player.start(); return 1; } public void onStart(Intent intent, int startId) { // TO DO } public IBinder onUnBind(Intent arg0) { // TO DO Auto-generated method return null; } public void onStop() { } public void onPause() { } @Override public void onDestroy() { player.stop(); player.release(); } @Override public void onLowMemory() { } }
请在清单中调用此服务
<service android:enabled="true" android:name=".BackgroundSoundService " />
在HelloAndroid上,关于这个主题的一个很好的教程。 事实上,这是我在谷歌上的第一个打。 在问这里之前,你应该尝试使用谷歌search,因为这是个好习惯。
@ Synxmax的答案在使用Service
和MediaPlayer
类的时候是正确的,但是你也需要在Manifest中声明这个Service
,就像这样:
<service android:enabled="true" android:name="com.package.name.BackgroundSoundService" />
对于这里的派对来说太晚了,但是我仍然会加上0.02美元,谷歌已经发布了一个名为“通用音乐播放器”的免费示例,通过它,您可以学习跨所有Android平台(汽车,手表,手机,电视等)服务在后台播放音乐,做检查出来非常有帮助。 这里是项目的链接
https://github.com/googlesamples/android-UniversalMusicPlayer
我有运行它的问题,我做了一些改变,以MP3源运行它。 这里是BackfrounSoundService.java文件。 考虑我的mp3文件是在我的手机上的SD卡。
public class BackgroundSoundService extends Service { private static final String TAG = null; MediaPlayer player; public IBinder onBind(Intent arg0) { return null; } @Override public void onCreate() { super.onCreate(); Log.d("service", "onCreate"); player = new MediaPlayer(); try { player.setDataSource(Environment.getExternalStorageDirectory().getAbsolutePath() + "/your file.mp3"); } catch (IOException e) { e.printStackTrace(); } player.setLooping(true); // Set looping player.setVolume(100, 100); } public int onStartCommand(Intent intent, int flags, int startId) { Log.d("service", "onStartCommand"); try { player.prepare(); player.start(); } catch (IOException e) { e.printStackTrace(); } return 1; } public void onStart(Intent intent, int startId) { // TO DO } public IBinder onUnBind(Intent arg0) { // TO DO Auto-generated method return null; } public void onStop() { } public void onPause() { } @Override public void onDestroy() { player.stop(); player.release(); } @Override public void onLowMemory() { } }
使用START_STICKY
标志创build一个前台服务。
@Override public int onStartCommand(Intent startIntent, int flags, int startId) { if (startIntent != null) { String action = startIntent.getAction(); String command = startIntent.getStringExtra(CMD_NAME); if (ACTION_CMD.equals(action)) { if (CMD_PAUSE.equals(command)) { if (mPlayback != null && mPlayback.isPlaying()) { handlePauseRequest(); } } else if (CMD_PLAY.equals(command)) { ArrayList<Track> queue = new ArrayList<>(); for (Parcelable input : startIntent.getParcelableArrayListExtra(ARG_QUEUE)) { queue.add((Track) Parcels.unwrap(input)); } int index = startIntent.getIntExtra(ARG_INDEX, 0); playWithQueue(queue, index); } } } return START_STICKY; }
这可以从任何活动中调用来播放音乐
Intent intent = new Intent(MusicService.ACTION_CMD, fileUrlToPlay, activity, MusicService::class.java) intent.putParcelableArrayListExtra(MusicService.ARG_QUEUE, tracks) intent.putExtra(MusicService.ARG_INDEX, position) intent.putExtra(MusicService.CMD_NAME, MusicService.CMD_PLAY) activity.startService(intent)
您可以使用bindService绑定到服务,并使服务从相应的活动生命周期方法暂停/停止。
这里有一个关于在Android的背景下播放音乐的好教程