پخش فایل صوتی با قابلیت SeekBar در اندروید

شنبه 9 آبان 1394

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

پخش فایل صوتی با قابلیت SeekBar  در اندروید

ابتدا در لایه ی  Layout خود یک فایل xml بسازید و قطعه کد زیر را در آن قرار دهید.

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
                android:layout_width="fill_parent"
                android:layout_height="fill_parent" >

    <TextView
            android:id="@+id/text_shown"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerHorizontal="true"
            android:layout_marginTop="120dp"
            android:textSize="42sp" />

    <SeekBar
            android:id="@+id/seek_bar"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_centerInParent="true" />

    <Button
            android:id="@+id/play_button"
            android:layout_width="120dp"
            android:layout_height="60dp"
            android:layout_below="@+id/seek_bar"
            android:layout_marginTop="60dp"
            android:gravity="center"
            android:text="شروع" />

    <Button
            android:id="@+id/pause_button"
            android:layout_width="120dp"
            android:layout_height="60dp"
            android:layout_alignParentRight="true"
            android:layout_below="@+id/seek_bar"
            android:layout_marginTop="60dp"
            android:text="توقف" />

</RelativeLayout>

از یک textview برای نمایش بخش موزیک و از دو Button برای شروع و توقف موزیک و از یک seekbar برای جلو و عقب بردن موزیک استفاده می نماییم.

حالا در کلاس جاوا باید کد زیر را قرار دهید:

public class MyActivity extends Activity implements OnClickListener {
    SeekBar seek_bar;
    Button play_button, pause_button;
    MediaPlayer mediaPlayer;
    TextView text_shown;
    Handler seekHandler = new Handler();
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        getInit();
        seekUpdation();
    }


    public void getInit() {
        seek_bar = (SeekBar) findViewById(R.id.seek_bar);
        play_button = (Button) findViewById(R.id.play_button);
        pause_button = (Button) findViewById(R.id.pause_button);
        text_shown = (TextView) findViewById(R.id.text_shown);
        play_button.setOnClickListener(this);
        pause_button.setOnClickListener(this);
        mediaPlayer = MediaPlayer.create(this, R.raw.myaudio);
        seek_bar.setMax(mediaPlayer.getDuration());
    }

    Runnable run = new Runnable() {

        @Override
        public void run() {
            seekUpdation();
        }
    };

    public void seekUpdation() {

        seek_bar.setProgress(mediaPlayer.getCurrentPosition());
        seekHandler.postDelayed(run, 1000);
        seek_bar.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {

            @Override
            public void onStopTrackingTouch(SeekBar seek_bar) {
                // TODO Auto-generated method stub

            }

            @Override
            public void onStartTrackingTouch(SeekBar seek_bar) {
                // TODO Auto-generated method stub

            }

            @Override
            public void onProgressChanged(SeekBar seek_bar, int progress, boolean fromUser) {
                if(fromUser){
                    mediaPlayer.seekTo(progress);
                    seek_bar.setProgress(progress);
                }

            }
        });
    }

    @Override
    public void onClick(View view) {
        switch (view.getId()) {
            case R.id.play_button:
                text_shown.setText("شروع");
                mediaPlayer.start();
                break;
            case R.id.pause_button:
                mediaPlayer.pause();
                text_shown.setText("توقف");
        }
    }

    public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
        if(fromUser){
            mediaPlayer.seekTo(progress);
            seekBar.setProgress(progress);
        }
    }


    @Override
    public void onBackPressed() {
        mediaPlayer.stop();
        finish();
    }
}

activity که درست کردیم از Activity ارث بری شده است و روی OnclickListner پیاده سازی می شود.

ابتدا شروع به تعریف ابزارهایی که در لایه ی xml استفاده کردیم می نویسیم، از یک تابع getInit استفاده می کنیم  و ابزارها و رویداد ها را برای تمیزی کد داخل تابع قرار می دهیم و بعد تابع را صدا می زنیم.

یک تابع برای Seekbar تعریف می کنیم  که این تابع برای جلو و عقب بردن موزیک استفاده می شود ، از دستور switch برای شروع موزیک استفاده می کنیم که اگر دکمه ی شروع خود موزیک پخش شود و textview به متنی که نوشته اید تغییر پیدا کند، و اگر دکمه روی توقف بود موزیک پخش نشود و textview به توقف تبدیل شود.

خط آخر کد onBackPressed() برای زمانی است که اگر کاربر دکمه ی بازگشت را زد اول موزیک متوقف شود بعد از صفحه بیرون رود.

برای پخش موزیک یک پوشه به نام raw درست نمایید و موزیک مورد نظر خود را داخل آن قرار دهید و برای آدرس دهی حتما باید موزیک در پوشه ای به نام raw باشد و گرنه موزیک پخش نخواهد شد.

در پایان به صورت زیر خواهد شد.

به همین صورت شما می توانید یک آلبوم صوتی بسیار زیبا با امکانات seekbar بسازید.

فایل های ضمیمه

برنامه نویسان

نویسنده 3355 مقاله در برنامه نویسان

کاربرانی که از نویسنده این مقاله تشکر کرده اند

در صورتی که در رابطه با این مقاله سوالی دارید، در تاپیک های انجمن مطرح کنید