آموزش برنامه نویسی اندروید با اندروید استودیو (بخش بیست و هفتم: پخش صوت در اپلیکیشن اندرویدی)

استاندارد

این بخش از آموزش می تواند برای عده ای از شما بسیار جالب باشد. بعضی از مواقع پیش می آید که احتیاج داریم که صوت در پس زمینه اپلیکیشن اندرویدی ما پخش شود. پس به کار با مدیا پلیر در اندروید نیاز داریم.

ولی برخلاف اسمی که دارد کار با صوت در برنامه نویسی اندروید، خیلی سخت نیست و نیاز به کدنویسی زیادی ندارد.

 

super8

یک پروژه جدید به نام Sound-Gsm ایجاد کردم.

حال به قسمت لایه برنامه رفته و از Palette ، یک ویجت از نوع TextView را به درون لایه می کشم.

اسم این تکست ویو (TextView) را “Pakhshe Music” می گذارم.

توجه داشته باشید که در برنامه ما، موزیک به صورت خودکار در پس زمینه اپلیکیشنی که نوشته ایم پخش می شود و ما در این بخش از آموزش، دخالتی برای پخش موسیقی نمی کنیم.

قبلا گفته شد که پوشه Res پوشه منابع ما است و عکس ها و فایل های ما برای استفاده در برنامه در این پوشه قرار می گیرد. پس باید یک پوشه جدید به نام Raw در پوشه Res ایجاد کنیم.

برای این کار طبق عکس، بر روی پوشه Res کلیک راست کرده و سپس از قسمت New، بر روی Android Resource Directory کلیک می کنیم.

android-studio-beginners-gsm-developers_86

با باز شدن پنجره ی جدید طبق عکس، Raw را انتخاب کرده و سپس بر روی Ok کلیک می کنیم.

android-studio-beginners-gsm-developers_87

می بینید که پوشه raw در دایرکتوری Res ایجاد شده است.

android-studio-beginners-gsm-developers_88

حال فایل موسیقی خود را به این پوشه اضافه می کنیم.

من فایل موسیقی خودم را در پوشه raw و از طریق explorer خود ویندوز انجام دادم.  پوشه raw را می توانید در این آدرس پیدا کنید:

AndroidStudioProjects\Sound-Gsm\app\src\main\res\raw

خب همان طور که می بینید اسم آهنگ من Air.mp3 است.

android-studio-beginners-gsm-developers_89

به قسمت کدنویسی جاوا یعنی MainActivity.java رفته و کد زیر را در آن می نویسیم.

MediaPlayer mPlayer = MediaPlayer.create(MainActivity.this, R.raw.Air);

mPlayer.start();

برای نوشتن کد MediaPlayer کلاس زیر را به پروژه خود اضافه نمایید. و یا بر روی MediaPlayer زده و Alt + Enter را بزنید سپس Import Class را بزنید.

import android.media.MediaPlayer;

اولین باری که من کد را به این صورت نوشتم با خطا مواجه شدم. برای همین خواستم در اینجا نیز با همین اشتباه پیش برم تا شما یاد بگیرد.

اگر کد بالا را اجرا کنید با خطا مواجه می شوید. ولی چرا؟

چون که من اولین بار فایل موسیقی خودم را با حروف بزرگ مثل Air که در بالا نوشته بودم، نوشتم. پس در برنامه نویسی اندروید فایل ها در منابع نباید با حروف بزرگ باشند.

در بخش منابع آموزش های اندروید نیز به این نکته اشاره شد.

پس هم نام فایل و نام آن در کدنویسی اندروید را به نام air.mp3 تغییر می دهیم.

کد کامل

import android.media.MediaPlayer;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        MediaPlayer mPlayer = MediaPlayer.create(MainActivity.this, R.raw.air);

        mPlayer.start();

    }
}

اگر برنامه را اجرا نمایید موسیقی با اجرای برنامه پخش می شود. ولی اگر برنامه را ببندید موسیقی همچنان در حال پخش خواهد بود. راه حل چیست؟

در بخش هشتم  و بخش دهم  از آموزش برنامه نویسی اندروید، در مورد چرخه حیات اکتیویتی ها توضیح داده شد. در اینجا چون ما کد پخش موسیقی را در اکتیویتی onCreate نوشته ایم پس موسیقی هیچ گاه تا Stop شدن برنامه قطع نمی شود.

برای حل این مشکل در اکتیویتی onPause و یا onStop باید موسیقی را قطع کنیم تا وقتی از برنامه خارج شدیم موسیقی قطع شود.

کد زیر را به برنامه اضافه می کنیم تا موسیقی ما به حالت Pause برود.

همچنین با نوشتن mPlayer.Stop نیز می توان موسیقی را Stop نمود نه Pause !

protected void onPause() {
        super.onPause();
        mPlayer.pause();
    }

از آنجایی که متغیر mPlayer به صورت سراسری یا Global معرفی نشده است در تابع onPause شناخته نشده است. برای همین باید به صورت سراسری معرفی شود که با نوشتن آن خارج از تابع onCreate این اتفاق می افتد. کد زیر کد پایانی برنامه ما است.

کد کامل و پایانی برنامه ما

import android.media.MediaPlayer;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;

public class MainActivity extends AppCompatActivity {
// تعریف متغیر به صورت سراسری
    public  MediaPlayer mPlayer;
// اکتیویتی onCreate
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
// تعریف متغیر برای موسیقی ما که این نام اضافه کرده بودیم
         mPlayer = MediaPlayer.create(MainActivity.this, R.raw.air);
// استارت موسیقی
         mPlayer.start();

    }
// onPause اکتیویتی
    protected void onPause() {
        super.onPause();
//پایز کردن موسیقی
        mPlayer.pause();
    }

}

می توانید با اضافه کردن اکتیویتی های onResume و یا onStop و .. با پخش موسیقی در این برنامه بازی کنید. همچنین می توانید کاری کنید که با کلیک بر روی دکمه، موسیقی پخش و یا قطع شود.

اگر برنامه را اجرا کنید می بینید که با آغاز شدن برنامه، موسیقی شروع به پخش کرده و سپس با خارج شدن از برنامه، موسیقی قطع می شود.

android-studio-beginners-gsm-developers_90