آموزش برنامه نویسی اندروید (Android)
۴۱۹ آموزش
نمایش دسته بندی ها (۴۱۹ آموزش)

پخش یک فایل صوتی با استفاده از MediaPlayer ، با قابلیت به عقب و جلو بردن آهنگ (با استفاده از SeekBar)، در برنامه نویسی اندروید

در این مبحث قصد داریم که یک پروژه اندروید بسازیم که در آن، کاربر می تواند به یک آهنگ گوش دهد و با استفاده از یک SeekBar می تواند آهنگ را به جلو یا عقب ببرد :

پخش یک فایل صوتی با استفاده از MediaPlayer ، با قابلیت به عقب و جلو بردن آهنگ (با استفاده از SeekBar)، در برنامه نویسی اندروید

من به طور دلخواه انتخاب کرده ام که هنگامی که کاربر بر روی گزینه مخصوص عقب و جلو بردن آهنگ، اشاره می کند، آهنگ همچنان در حال پخش باشد، اما اگر این حالت برای شما مطلوب نبود، می توانید کدها را کمی تغییر دهید (مثلا پخش آهنگ را در این حالت، متوقف کنید).

در برنامه eclipse ، ابتدا یک پروژه اندروید با نام MediaPlayerPlayback می سازیم (نام package را برابر com.kelidestan.mediaplayerplayback انتخاب می کنیم. نام activity اصلی را برابر MainActivity انتخاب می کنیم و فایل xml متناظر آن را هم برابر activity_main قرار می دهیم).

در پوشه بندی پروژه اندروید، درون پوشه res ، یک پوشه با نام raw می سازیم و درون آن، یک فایل mp3 با نام my_file.mp3 که مربوط به آهنگ مورد نظرمان است را کپی می کنیم :

پخش یک فایل صوتی با استفاده از MediaPlayer ، با قابلیت به عقب و جلو بردن آهنگ (با استفاده از SeekBar)، در برنامه نویسی اندروید

بد نیست این تذکر را بدهم که گاهی در برنامه eclipse ، هنگام کپی کردن فایل ها به درون زیرپوشه های پوشه res ، ممکن است برنامه eclipse اعلام کند که با نام فایل، مشکل دارد. مثلا ممکن است با نام MyFile.mp3 مشکل داشته باشد، اما نام my_file.mp3 هیچ مشکلی ایجاد نکند.

اکنون فایل activity_main.xml را باز می کنیم :

پخش یک فایل صوتی با استفاده از MediaPlayer ، با قابلیت به عقب و جلو بردن آهنگ (با استفاده از SeekBar)، در برنامه نویسی اندروید

کدهای فایل activity_main.xml را به صورت زیر تغییر می دهیم :


<?xml version="1.0" encoding="utf-8"?>
<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="Play" />
 
    <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="Pause" />
 
</RelativeLayout>

بنابراین، از نظر گرافیکی، فایل activity_main.xml ، به صورت زیر خواهد بود :

پخش یک فایل صوتی با استفاده از MediaPlayer ، با قابلیت به عقب و جلو بردن آهنگ (با استفاده از SeekBar)، در برنامه نویسی اندروید

سپس فایل MainActivity.java که همان Activity اصلی برنامه اندروید است را باز می کنیم :

پخش یک فایل صوتی با استفاده از MediaPlayer ، با قابلیت به عقب و جلو بردن آهنگ (با استفاده از SeekBar)، در برنامه نویسی اندروید

کدهای فایل MainActivity.java را به صورت زیر می نویسیم :


package com.kelidestan.mediaplayerplayback;

import android.app.Activity;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.os.Handler;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.SeekBar;
import android.widget.SeekBar.OnSeekBarChangeListener;
import android.widget.TextView;

public class MainActivity extends Activity implements OnClickListener {
       
        SeekBar seek_bar;
    Button play_button, pause_button;
    MediaPlayer mediaPlayer;
    TextView text_shown;
    Handler seekHandler = new Handler();

        @Override
        protected void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.activity_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.my_file);
        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("Playing...");
            mediaPlayer.start();
            break;
        case R.id.pause_button:
                mediaPlayer.pause();
            text_shown.setText("Paused...");
        }
    }
   
    public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
        if(fromUser){
            mediaPlayer.seekTo(progress);
            seekBar.setProgress(progress);
        }
    }
   
   
    @Override
    public void onBackPressed() {
        mediaPlayer.stop();
        finish();
    }
     
}

پروژه اندروید آماده است و می توانید آن را به روش دلخواه، تست کنید. مثلا من آن را تبدیل به فایل apk کرده و در یک گوشی واقعی تست کردم، نتیجه به صورت زیر است (کاربر می تواند ضمن گوش دادن به آهنگ، آن را به عقب یا جلو ببرد) :

پخش یک فایل صوتی با استفاده از MediaPlayer ، با قابلیت به عقب و جلو بردن آهنگ (با استفاده از SeekBar)، در برنامه نویسی اندروید

فایل های پروژه اندروید را می توانید از لینک های زیر دریافت کنید :