Я использую класс MediaPlayer в своем приложении, и я хочу, чтобы музыка воспроизводилась на фоне, поэтому я использовал Сервис вместо Activity или BroadcastReciever. Теперь проблема в том, что если пользователь существует или приостанавливает приложение, воспроизведение музыки происходит без остановки. Я добавил методы onStop и onPause, но проблема сохраняется. И я не могу вызвать метод super.onPause(), как в классе Activity.Android Сервис для воспроизведения музыки и остановки при паузе и при остановке
После некоторого исследования выяснилось, что служба продолжает активно даже приостанавливать приложение или останавливается. (Я не знаю, что это правда), но с моим опытом я думаю, что это правда. Что мне делать? Я искал google и stackoverflow для ответа, но не смог получить ответ.
Вот код.
package in.isuru.animation;
import android.app.Service;
import android.content.Intent;
import android.media.MediaPlayer;
import android.os.IBinder;
import android.util.Log;
public class PlayMusic extends Service{
private static final String TAG = null;
MediaPlayer player;
public void onCreate(){
super.onCreate();
Log.d(TAG, "Music service started onCreate()");
player = MediaPlayer.create(this, R.raw.oh_holy_night);
player.setLooping(true);
//player.setVolume(100, 100);
}
public int onStartCommand(Intent intent, int flags, int startId){
player.start();
Log.d(TAG, "Player started!");
if(player.isLooping() != true){
Log.d(TAG, "Player not playing any file.");
}
return 1;
}
public void onStart(Intent intent, int startId){
}
public IBinder onUnBinder(Intent arg0){
return null;
}
public void onStop(){
player.stop();
player.release();
}
public void onPause(){
player.stop();
player.release();
}
public void onDestroy(){
player.stop();
player.release();
Log.d(TAG, "Player destroyed");
}
public void onLowMemory(){
player.release();
}
@Override
public IBinder onBind(Intent arg0) {
return null;
}
}
Ну, моя основная деятельность - это анимация, будет ли она работать с потоком пользовательского интерфейса, если я буду играть музыку на этом мероприятии? –
Ну почти. По умолчанию Служба также работает в потоке пользовательского интерфейса. Служба сама по себе не выходит из своей собственной нити. Поскольку вы используете интенсивное воспроизведение в формате MP3, вам нужно создать новую тему, в которой вы запускаете эту услугу. Этот новый класс должен будет использовать контекст, чтобы он мог запускать и контролировать действие. Я бы предложил, чтобы ваша Activity выполняла Runnable (вместо продолжения Thread). Это должно позволить вам еще большую гибкость и повторное использование ваших переменных. –
Хорошо, спасибо. Я буду использовать Activity вместо Service. Спасибо за объяснение! –