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

4 سال پیش

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

در این درس از مجموعه آموزش برنامه نویسی سایت سورس باران، در مورد MediaPlayer در برنامه نویسی اندروید صحبت خواهیم کرد.

 

اندروید روش های زیادی برای کنترل پخش فایل های صوتی / تصویری ارائه می دهد. یکی از این راه ها از طریق کلاسی به نام MediaPlayer است.

اندروید کلاس MediaPlayer را برای دسترسی به سرویس های داخلی پخش کننده مانند پخش صدا، ویدئو و غیره فراهم می کند. برای استفاده از MediaPlayer در برنامه نویسی اندروید، باید یک کلاس باید متد استاتیک ()create از این کلاس فراخوانی کنیم. این متد نمونه ای از کلاس MediaPlayer را برمی گرداند. نحو آن به شرح زیر است:

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

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

پس از ایجاد شی Mediaplayer می توانید برای شروع یا توقف موسیقی برخی از متد ها را فراخوانی کنید. این متدها ها در زیر ذکر شده است.

mediaPlayer.start ()؛
mediaPlayer.pause ()؛

هنگام فراخوانی متد ()start، موسیقی از ابتدا پخش می شود. اگر این متد پس از متد ()pause دوباره فراخوانی شود، موسیقی از همان جایی كه متوقف شده شروع به پخش می كند و نه از ابتدا.

برای شروع موسیقی از ابتدا باید متد ()reset را فراخوانی کنید. نحو آن در زیر آورده شده است:

mediaPlayer.reset();

به غیر از متد ()start و ()pause، متدهای دیگری نیز در این کلاس برای برخورد بهتر با فایل های صوتی / تصویری ارائه شده است. این روش ها در زیر ذکر شده است:

  • ()isPlaying

این متد با برگشت مقادیر true/false  نشان می دهد که آهنگ در حال پخش است یا نه

  • (seekTo(position

این متد یک عدد صحیح را می گیرد و آهنگ را به موقعیت خاص بر حسب میلی ثانیه منتقل می کنید

  • ()getCurrentPosition 

این متد موقعیت فعلی آهنگ را بر حسب میلی ثانیه برمی گرداند

  • ()getDuration 

این متد کل مدت زمان آهنگ را بر حسب میلی ثانیه برمی گرداند

  •  ()reset

این متد media player را مجدداً تنظیم (ریست) می کند

  • ()release

این متد هر منبعی را که با شی MediaPlayer پیوند داده شده را  تجزیه می کند.

  • (setVolume (float leftVolume، float rightVolume

این متد میزان کاهش صدا را برای media player تنظیم می کند

  • (setDataSource (FileDescriptor fd

این متد منبع داده فایل صوتی / تصویری را تنظیم می کند

  • (selectTrack(int index

این متد یک عدد صحیح را می گیرد و شماره ایندکس معادل آن، از لیست پخش را که یک ترک (track) مشخص است، را برمی گرداند.

  • ()getTrackInfo 

این روش آرایه ای از اطلاعات ترک (track) را برمی گرداند

 

مثال

در اینجا مثالی وجود دارد که استفاده از کلاس MediaPlayer را نشان می دهد. این یک media player ایجاد می کند که به شما امکان می دهد آهنگی را به جلو، عقب، پخش و مکث کنید.

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

 

شرح مراحل 

۱ شما برای ایجاد یک برنامه اندروید تحت یک پکیج com.example.sairamkrishna.myapplication از Android studio IDE استفاده خواهید کرد.
۲ برای افزودن کد MediaPlayer، پرونده src / MainActivity.java را تغییر دهید.
۳ res / layout / activity_main را تغییر دهید تا مولفه های XML مربوطه اضافه شود
۴ یک پوشه جدید در زیر MediaPlayer با نام به عنوان 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);
      }
   };
}

در زیر محتوای اصلاح شده xml 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>

بیایید برنامه خود را اجرا کنیم! من تصور می کنم شما AVD خود را هنگام راه اندازی محیط ایجاد کرده اید. برای اجرای برنامه از Android studio، یکی از پرونده های فعالیت پروژه خود را باز کنید و از نوار ابزار روی Android StudioRun Icon کلیک کنید. Android Studio برنامه را روی AVD شما نصب کرده و شروع به کار می کند و اگر با تنظیمات و برنامه هایتان همه چیز خوب باشد، زیر پنجره شبیه ساز نمایش داده می شود.

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

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

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

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

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

 

منبع.

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

  1. نگاهی کلی به برنامه نویسی اندروید
  2. تنظیمات محیط  در برنامه نویسی اندروید
  3. معماری برنامه نویسی اندروید
  4. اجزای برنامه در برنامه نویسی اندروید
  5. Hello World در برنامه نویسی اندروید
  6. سازماندهی و دسترسی به منابع در برنامه نویسی اندروید
  7. فعالیت در برنامه نویسی اندروید
  8. سرویس در برنامه نویسی اندروید
  9. گیرنده های پخش در برنامه نویسی اندروید
  10. ارائه دهنده محتوا در برنامه نویسی اندروید
  11. قطعات در برنامه نویسی اندروید
  12. Intent و فیلتر در برنامه نویسی اندروید
  13. طرح بندی رابط کاربری در برنامه نویسی اندروید
  14. کنترل های رابط کاربری در برنامه نویسی اندروید
  15. مدیریت رویدادها در برنامه نویسی اندروید
  16. استایل و تم ها در برنامه نویسی اندروید
  17. اجزای سفارشی در برنامه نویسی اندروید
  18. کشیدن و رها کردن در برنامه نویسی اندروید
  19. نوتیفیکیشن ها در برنامه نویسی اندروید
  20. سرویس های مبتنی بر مکان در برنامه نویسی اندروید
  21. ارسال ایمیل در برنامه نویسی اندروید
  22. ارسال پیامک در برنامه نویسی اندروید
  23. تماس های تلفنی در برنامه نویسی اندروید
  24. انتشار برنامه اندروید
  25. آموزش Alert Dialog در برنامه نویسی اندروید
  26. انیمیشن در برنامه نویسی اندروید
  27. ضبط صدا در برنامه نویسی اندروید
  28. مدیریت صدا در برنامه نویسی اندروید
  29. آموزش Auto Complete در برنامه نویسی اندروید
  30. بهترین شیوه ها در برنامه نویسی اندروید
  31. بلوتوث در برنامه نویسی اندروید
  32. استفاده از دوربین در برنامه نویسی اندروید
  33. کلیپ بورد در برنامه نویسی اندروید
  34. فونت سفارشی در برنامه نویسی اندروید
  35. پشتیبان گیری از داده ها در برنامه نویسی اندروید
  36.  ابزارهای توسعه دهنده در برنامه نویسی اندروید
  37. آموزش شبیه ساز در برنامه نویسی اندروید
  38. اتصال به فیس بوک در برنامه نویسی اندروید
  39. حرکات لمسی در برنامه نویسی اندروید
  40. آموزش گوگل مپ در برنامه نویسی اندروید
  41. افکت های تصویر در برنامه نویسی اندروید
  42. Image Switcher در برنامه نویسی اندروید
  43. حافظه داخلی در برنامه نویسی اندروید
  44. آموزش کار با JetPlayer در برنامه نویسی اندروید
  45. JSON Parser در برنامه نویسی اندروید
  46. ارتباط با LinkedIn در برنامه نویسی اندروید
  47. نوار پیشرفت Spinner در برنامه نویسی اندروید
  48. بومی سازی در برنامه نویسی اندروید
  49. صفحه Login در برنامه نویسی اندروید
0
برچسب ها :
نویسنده مطلب erfan molaei

دیدگاه شما

بدون دیدگاه