Фоновая музыка в игре

И так начнем с самого простого, открываем нашу игру в которой хотим добавить музыку, добавляем в папку res/raw/ наш *.mp3 файл, именно mp3, так как на wav и wma выдает ошибку, и создаем файлMyService.java который будет сервисом для нашего проигрывания музыки. Код он будет содержать в себе следующий:

MyService.java
import android.app.Service;
import android.content.Intent;
import android.media.MediaPlayer;
import android.os.IBinder;
import android.util.Log;
import android.widget.Toast;
public class MyService extends Service {
        private static final String TAG = "MyService";
        MediaPlayer player;
       
        @Override
        public IBinder onBind(Intent intent) {
                return null;
        }
       
        @Override
        public void onCreate() {
         Toast.makeText(this, "My Service Created", Toast.LENGTH_LONG).show();
               
         player = MediaPlayer.create(this, R.raw.bg);
         player.setLooping(true); // зацикливаем
        }

        @Override
        public void onDestroy() {
        Toast.makeText(this, "My Service Stopped", Toast.LENGTH_LONG).show();
        player.stop();
        }
       
        @Override
        public void onStart(Intent intent, int startid) {
         Toast.makeText(this, "My Service Started", Toast.LENGTH_LONG).show();
         player.start();
        }
}
      Что мы тут имеем? Ну сперва как видно мы унаследовали наш класс от класса Service для того что бы наш класс мог работать в фоне и ничего нам не мешало только для этого его и юзать. Дальше нам открывается методonCreate() который запускает медиаплеер с файлом который будет проигрываться. После этого идет класс уничтожения (выключения) музыки, когда нам понадобится, например выйти из игры или выключить музыку мы будем обращаться к этому методу для выключения музыки. Ну и onStart() метод который запускает наш сервис что бы музыка начала проигрываться.

        Дальше нам нужно сказать еклипсу что этот класс юзается в фоне, и никак не сметь его запускать в виде активности или другой какой-то байды (: Для этого открываем AndroidManifest и вставляем перед закрывающимся :

<service android:enabled="true" android:name=".MyService" />

             Ну и конечно же нам нужно вызывать этот класс и наши методы для запуска музыки, если вы хотите что бы музыка начиналась запускаться сразу при входе в игру, то есть сразу из меню, то вам нужно в главной активитиStartActivity.java который запускает наше меню написать в onCreate() вот такое:

StartActivity.java
//import...
public class StartActivity extends Activity implements OnClickListener {          
    public void onCreate(Bundle savedInstanceState) {
        //...
       
        //-----------------------------------------------------------------
startService(new Intent(this, MyService.class)); //вот єто вам нужно написать!
        //-------------------------------------------------------------------
    }

    /** Обработка нажатия кнопок */
    public void onClick(View v) {
                //...
        }
}

            Ну а что бы выключить при выходе из игры или по желанию юзера тогда добавляем метод onBackPressed() и в нем пишем вот такое:

StartActivity.java



private void onBackPressed() {
     stopService(new Intent(this, MyService.class));
}
 

И тогда у нас сервис остановится, музыка замолчит, и если вы пропишите в этом методе finish() то приложения закроется.

1 комментарий:

  1. Как можно на паузу поставить ? Не хочу в startActivity в методе onPoause или onDestroy прописывать stopService() так как при переходе на другую активити, музыка выключается

    ОтветитьУдалить