Android background music service

匿名 (未验证) 提交于 2019-12-03 02:08:02

问题:

I am developing an entertainment app in android. I want to play background music, and I want to use service for that. App have 3 activities and music must be played across all activities. Also, when activity is paused, music must PAUSE and stopped when destroyed. Can anyone tell me how to do this ? any links or examples ?

Thank you.

回答1:

Do it without service

http://www.rbgrn.net/content/307-light-racer-20-days-61-64-completion

If you are so serious about doing it with services using 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() {      } } 

Please call this service in Manifest Make sure there is no space at the end of the .BackgroundSoundService string



回答2:

way too late for the party here but i will still add my $0.02, Google has released a free sample called universal music player with which you can learn to stream music across all android platforms(auto, watch,mobile,tv..) it uses service to play music in the background, do check it out very helpful. here's the link to the project
https://github.com/googlesamples/android-UniversalMusicPlayer



回答3:

Theres an excellent tutorial on this subject at HelloAndroid regarding this very subject. Infact it was the first hit i got on google. You should try googling before asking here, as it is good practice.



回答4:

@Synxmax's answer is correct when using a Service and the MediaPlayer class, however you also need to declare the Service in the Manifest for this to work, like so:



回答5:

i had problem to run it and i make some changes to run it with mp3 source. here is BackfrounSoundService.java file. consider that my mp3 file is in my sdcard in my phone .

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() {      } } 


回答6:

Create a foreground service with the START_STICKY flag.

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

This can then be called from any activity to play some music

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) 

You can bind to the service using bindService and to make the Service pause/stop from the corresponding activity lifecycle methods.

Here's a good tutorial about Playing music in the background on Android



易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!