Service de musique de fond Android
je développe une application de divertissement sur android. Je veux jouer de la musique de fond, et je veux utiliser le service. App ont 3 activités et la musique doit être jouée dans toutes les activités. De plus, lorsque l'activité est interrompue, la musique doit S'arrêter et s'arrêter lorsqu'elle est détruite. Quelqu'un peut me dire comment faire cela ? des liens ou des exemples ?
Merci.
6 réponses
Faire sans service
http://www.rbgrn.net/content/307-light-racer-20-days-61-64-completion
Si vous êtes sérieux au sujet de de le faire avec des services utilisation du lecteur multimédia
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() {
}
}
veuillez appeler ce service dans le Manifeste Assurez-vous il n'y a pas d'espace à la fin de le. BackgroundSoundService string
<service android:enabled="true" android:name=".BackgroundSoundService" />
bien trop tard pour la fête ici, mais je vais encore ajouter mon 0,02$, Google a publié un échantillon gratuit appelé universal Music player avec lequel vous pouvez apprendre à diffuser de la musique sur toutes les plateformes android(auto, regarder,mobile,tv..) il utilise le service pour jouer de la musique en arrière-plan, ne Vérifier très utile. voici le lien vers le projet
https://github.com/googlesamples/android-UniversalMusicPlayer
la réponse de @Synxmax est correcte en utilisant un Service
et la classe MediaPlayer
, cependant vous devez également déclarer le Service
dans le Manifeste pour que cela fonctionne, comme cela:
<service
android:enabled="true"
android:name="com.package.name.BackgroundSoundService" />
il y a un excellent tutoriel sur ce sujet à HelloAndroid concernant ce même sujet. En fait, c'est le premier succès que j'ai eu sur google. Vous devriez essayer de googler avant de demander ici, car c'est une bonne pratique.
j'ai eu des problème pour l'exécuter et j'ai apporter quelques modifications à l'exécuter avec la source mp3. voici le fichier BackfrounSoundService.java
. considérer que mon fichier mp3 est dans ma carte sd dans mon télé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() {
}
}
créer un service de premier plan avec le drapeau START_STICKY
.
@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;
}
cela peut être appelé de n'importe quelle activité pour jouer de la musique
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)
vous pouvez vous lier au service en utilisant bindService et de faire le service pause/arrêt des méthodes correspondantes du cycle de vie de l'activité.
voici un bon tutoriel sur jouer de la musique en arrière-plan sur Android