فهرست آموزش برنامه نویسی اندروید

MediaPlayer اندروید

۱۳۹۸/۰۹/۰۲ ۳۷

اندروید راه های بسیار زیادی برای استفاده از فایل های صوتی و تصویری ایجاد کرده است. یکی از این راه ها استفاده از کلاس مدیا پلیر اندروید ( MediaPlayer ) است.

اندروید کلاس مدیا پلیر اندروید ( MediaPlayer ) را فراهم کرده تا به سرویس های داخلی  این کلاس همچون خواندن فایل های صوتی و تصویری و غیره دسترسی داشته باشد.به منظور استفاده از مدیا پلیر باید متد استاتیک ()create را در این کلاس استفاده کنیم .
در این متد نمونه ای از کلاس مدیا پلیر اندروید را return می کند.  ؛ جزییات در زیر آمده است :

 

MediaPlayer mediaPlayer = MediaPlayer.create(this, R.raw.song);

 

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

وقتی که آبجکت مدیا پلیر را بسازیم  می توانیم  برخی متد ها را برای شروع کردن (start ) و تمام کردن (stop) موزیک ایجاد کنید. این متد ها در زیر لیست شده اند:

 

mediaPlayer.start();
mediaPlayer.pause();

 

با استفاده از متد ()start آهنگ از ابتدا شروع به اجرا شدن می کند. اگر این متد پس از فراخوانی متد ()pause دوباره فراخوانی شود ، آهنگ از همان جایی که متوقف شده شروع به پخش شدن می کند نه از ابتدای آهنگ ! اگر بخواهید موزیک از ابتدا شروع به پخش کند متد ()reset را به کار بگیرید . سینتکس آن به صورت زیر است :

mediaPlayer.reset();

علاوه بر متد های  start و pause متد های دیگری در این کلاس برای کارایی بالاتر فایل های صوتی و تصویری ارئه شده اند. این متد ها در زیر لیست شده است :

شماره متد و توضیحات
۱ isPlaying()

این روش درستی یا اشتباه اجرا شدن ترانه را مشخص می کند.

۲ seekTo(positon)

در این روش آهنگ به طور صحیح دریافت می شود و ترانه در لحظه ای خاص انتقال داده می شود.

۳ getCurrentDuration()

این روش حالت فعلی ترانه را در یک هزارم ثانیه به حالت قبل باز می گرداند.

۴ getDuration()

این روش کل زمان ترانه را در یک هزارم ثانیه باز می گرداند.

۵ reset()

در این روش مدیا پلیر دوباره بار گذاری میشود.

۶ release()

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

۷ setVolume(float leftVolume, float rightVolume)

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

۸ setDataSource(FileDescriptor fd)

این روش منبع اطلاعاتی فایل های صوتی و تصویری را پایه گذاری می کند.

۹ selectTrack(int index)

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

۱۰ getTrackInfo()

این روش مسیری است به سوی اطلاعات فایل های صوتی و تصویری.

مثال

در این جا مثالی برای استفاده از مدیا پلیر ارائه شده است. یک مدیا پلیر پایه (basic media player)  می سازد که شامل فوروارد و بکوارد و play و pause می شود.

مرحله  توضیحات
۱ از اندروید استودیو برای اجرای اپلیکیشن تحت پکیج  com.example.MediaPlayer.myapplication استفاده کنید .
۲ src/MainActivity.java به منظور افزودن کد های لازم تغییر دهید
۳ res/layout/activity_main  به منظور افزودن مولفه های XML  تغییر دهید .
۴ یک پوشه جدید در مدیا پلیر بسازید و آن را raw نام گذاری کنید و یک فایل mp3 در آن جای قرار دهید : song.mp3
۵ اپلیکیشن را اجرا کنید و یک دستگاه اندرویدی اجرایی را انتخاب کنید سپس اپلیکیشن را در آن نصب کنید و نتیجه را باز بینی کنید

محتوای تغییر یافته ی src/MainActivity.java :

 

package com.example.sairamkrishna.myapplication;

import android.app.Activity;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.os.Handler;
import android.view.View;

import android.widget.Button;
import android.widget.ImageView;
import android.widget.SeekBar;
import android.widget.TextView;
import android.widget.Toast;
import java.util.concurrent.TimeUnit;


public class MainActivity extends Activity {
   private Button b1,b2,b3,b4;
   private ImageView iv;
   private MediaPlayer mediaPlayer;
  
   private double startTime = 0;
   private double finalTime = 0;
  
   private Handler myHandler = new Handler();;
   private int forwardTime = 5000;
   private int backwardTime = 5000;
   private SeekBar seekbar;
   private TextView tx1,tx2,tx3;

   public static int oneTimeOnly = 0;
   @Override
   protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_main);

      b1 = (Button) findViewById(R.id.button);
      b2 = (Button) findViewById(R.id.button2);
      b3 = (Button)findViewById(R.id.button3);
      b4 = (Button)findViewById(R.id.button4);
      iv = (ImageView)findViewById(R.id.imageView);

      tx1 = (TextView)findViewById(R.id.textView2);
      tx2 = (TextView)findViewById(R.id.textView3);
      tx3 = (TextView)findViewById(R.id.textView4);
      tx3.setText("Song.mp3");

      mediaPlayer = MediaPlayer.create(this, R.raw.song);
      seekbar = (SeekBar)findViewById(R.id.seekBar);
      seekbar.setClickable(false);
      b2.setEnabled(false);

      b3.setOnClickListener(new View.OnClickListener() {
         @Override
         public void onClick(View v) {
            Toast.makeText(getApplicationContext(), "Playing 
               sound",Toast.LENGTH_SHORT).show();
            mediaPlayer.start();

            finalTime = mediaPlayer.getDuration();
            startTime = mediaPlayer.getCurrentPosition();

            if (oneTimeOnly == 0) {
               seekbar.setMax((int) finalTime);
               oneTimeOnly = 1;
            }
        
            tx2.setText(String.format("%d min, %d sec",
               TimeUnit.MILLISECONDS.toMinutes((long) finalTime),
               TimeUnit.MILLISECONDS.toSeconds((long) finalTime) -
               TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes((long) 
                  finalTime)))
            );

            tx1.setText(String.format("%d min, %d sec",
               TimeUnit.MILLISECONDS.toMinutes((long) startTime),
               TimeUnit.MILLISECONDS.toSeconds((long) startTime) -
               TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes((long) 
                  startTime)))
            );

            seekbar.setProgress((int)startTime);
            myHandler.postDelayed(UpdateSongTime,100);
            b2.setEnabled(true);
            b3.setEnabled(false);
         }
      });

      b2.setOnClickListener(new View.OnClickListener() {
         @Override
         public void onClick(View v) {
            Toast.makeText(getApplicationContext(), "Pausing 
               sound",Toast.LENGTH_SHORT).show();
            mediaPlayer.pause();
            b2.setEnabled(false);
            b3.setEnabled(true);
         }
      });

      b1.setOnClickListener(new View.OnClickListener() {
         @Override
         public void onClick(View v) {
            int temp = (int)startTime;

            if((temp+forwardTime)<=finalTime){
               startTime = startTime + forwardTime;
               mediaPlayer.seekTo((int) startTime);
               Toast.makeText(getApplicationContext(),"You have Jumped forward 5 
                  seconds",Toast.LENGTH_SHORT).show();
            }else{
               Toast.makeText(getApplicationContext(),"Cannot jump forward 5
                  seconds",Toast.LENGTH_SHORT).show();
            }
         }
      });

      b4.setOnClickListener(new View.OnClickListener() {
         @Override
         public void onClick(View v) {
            int temp = (int)startTime;

            if((temp-backwardTime)>0){
               startTime = startTime - backwardTime;
               mediaPlayer.seekTo((int) startTime);
               Toast.makeText(getApplicationContext(),"You have Jumped backward 5 
                  seconds",Toast.LENGTH_SHORT).show();
            }else{
               Toast.makeText(getApplicationContext(),"Cannot jump backward 5 
                  seconds",Toast.LENGTH_SHORT).show();
            }
         }
      });
   }

   private Runnable UpdateSongTime = new Runnable() {
      public void run() {
         startTime = mediaPlayer.getCurrentPosition();
         tx1.setText(String.format("%d min, %d sec",
            TimeUnit.MILLISECONDS.toMinutes((long) startTime),
            TimeUnit.MILLISECONDS.toSeconds((long) startTime) -
            TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.
            toMinutes((long) startTime)))
         );
         seekbar.setProgress((int)startTime);
         myHandler.postDelayed(this, 100);
      }
   };
}

 

محتوای تغییر یافته ی res/layout/activity_main.xml:

 

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
   xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
   android:layout_height="match_parent" 
   android:paddingLeft="@dimen/activity_horizontal_margin"
   android:paddingRight="@dimen/activity_horizontal_margin"
   android:paddingTop="@dimen/activity_vertical_margin"
   android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity">

   <TextView android:text="Music Palyer" android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:id="@+id/textview"
      android:textSize="35dp"
      android:layout_alignParentTop="true"
      android:layout_centerHorizontal="true" />

   <TextView
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="Tutorials point"
      android:id="@+id/textView"
      android:layout_below="@+id/textview"
      android:layout_centerHorizontal="true"
      android:textColor="#ff7aff24"
      android:textSize="35dp" />

   <ImageView
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:id="@+id/imageView"
      android:layout_below="@+id/textView"
      android:layout_centerHorizontal="true"
      android:src="@drawable/abc"/>

   <Button
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="@string/forward"
      android:id="@+id/button"
      android:layout_alignParentBottom="true"
      android:layout_alignParentLeft="true"
      android:layout_alignParentStart="true" />

   <Button
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="@string/pause"
      android:id="@+id/button2"
      android:layout_alignParentBottom="true"
      android:layout_alignLeft="@+id/imageView"
      android:layout_alignStart="@+id/imageView" />

   <Button
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="@string/back"
      android:id="@+id/button3"
      android:layout_alignTop="@+id/button2"
      android:layout_toRightOf="@+id/button2"
      android:layout_toEndOf="@+id/button2" />

   <Button
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="@string/rewind"
      android:id="@+id/button4"
      android:layout_alignTop="@+id/button3"
      android:layout_toRightOf="@+id/button3"
      android:layout_toEndOf="@+id/button3" />

   <SeekBar
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:id="@+id/seekBar"
      android:layout_alignLeft="@+id/textview"
      android:layout_alignStart="@+id/textview"
      android:layout_alignRight="@+id/textview"
      android:layout_alignEnd="@+id/textview"
      android:layout_above="@+id/button" />

   <TextView
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:textAppearance="?android:attr/textAppearanceSmall"
      android:text="Small Text"
      android:id="@+id/textView2"
      android:layout_above="@+id/seekBar"
      android:layout_toLeftOf="@+id/textView"
      android:layout_toStartOf="@+id/textView" />

   <TextView
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:textAppearance="?android:attr/textAppearanceSmall"
      android:text="Small Text"
      android:id="@+id/textView3"
      android:layout_above="@+id/seekBar"
      android:layout_alignRight="@+id/button4"
      android:layout_alignEnd="@+id/button4" />

   <TextView
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:textAppearance="?android:attr/textAppearanceMedium"
      android:text="Medium Text"
      android:id="@+id/textView4"
      android:layout_alignBaseline="@+id/textView2"
      android:layout_alignBottom="@+id/textView2"
      android:layout_centerHorizontal="true" />

</RelativeLayout>

 

محتوای res/values/string.xml :

 

<resources>
   <string name="app_name">My Application</string>
   <string name="back"><![CDATA[<]]></string>
   <string name="rewind"><![CDATA[<<]]></string>
   <string name="forward"><![CDATA[>>]]></string>
   <string name="pause">||</string>
</resources>

 

محتوای فایل AndroidManifest.xml :

 

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
   package="com.example.sairamkrishna.myapplication" >

   <application
      android:allowBackup="true"
      android:icon="@drawable/ic_launcher"
      android:label="@string/app_name"
      android:theme="@style/AppTheme" >
      
      <activity
         android:name="com.example.sairamkrishna.myapplication.MainActivity"
         android:label="@string/app_name" >
         
         <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
         </intent-filter>
         
      </activity>
      
   </application>
</manifest>

 

اجازه بدهید اپلیکیشن  مدیا پلیر را اجرا کنیم. فرض می کنیم که دستگاه موبایل اندروید خود را به کامپیوتر متصل کرده اید. برای اجرای اپلیکیشن از اندروید استودیو ، یکی از فایل های اکتیویتی پروژه را باز کرده و روی آیکن RunEclipse Run Icon از نوار ابزار کلیک کنید. قبل از شروع اپلیکیشن ، اندروید استودیو پنجره ی زیر را برای انتخاب گزینه ی محل اجرای اپلیکیشن  اندرویدتان، نمایش خواهد داد.

Anroid MediaPlayer Tutorial

می بینیم که به طور پیش فرض کلید pause  غیر فعال است . وقتی دکمه play  را بزنید موزیک شروع به اجرا می شود .

حالا موزیک در حال پخش است و هم اکنون کلید پاز را فشار دهید و این پیام پاز را مشاهده می کنید که در زیر نشان داده شده است.

Anroid MediaPlayer Tutorial

حالا وقت آن است که کلید play را فشار دهید و ترانه دوباره از قسمت مکث شروع به خواندن می کند. حالا کلید  forward یا backward را فشار دهید تا ترانه ۵ ثانیه به جلو یا عقب برده شود. وقتی ترانه دیگه جلو نمی رود ، در این لحظه همان طور که در تصویر می بینید یک پیام به این شکل مشاهده می کنید.

Anroid MediaPlayer Tutorial

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

Anroid MediaPlayer Tutorial

 

 

دانشجویار نماد اعتماد به دانشجویار مجوز نشر دیجیتال لوگو شرکت به پرداخت ملت logo-samandehi مجوز سازمان فنی حرفه ای کشور
blackFriday

پیش از شروع جشنواره بلک فرایدی
خودت رو برای یک خرید برق آسا آماده کن!


بلک فرایدی!

برای شرکت در جشنواره بلک فرایدی لطفا ثبت نام کنید.

  از الان برای بلک فرایدی آماده شو - رزرو تخفیف 90% ، برای همه آموزش ها  صفحه جشنواره