سبد (0)

آموزش Media Player در اندروید

آموزش Media Player در اندروید

اندرويد راه هاي بسيار زيادي براي استفاده از فايل هاي صوتي و تصويري ايجاد كرده است. يكي از اين راه ها استفاده از مديا پلير است.

اندرويد مديا پلير را فراهم كرده تا به سرويس هاي اين گروه همچون خواندن فايل هاي صوتي و تصويري و غيره دسترسي داشته باشد.به منظور استفاده از مديا پلير ما بايد روش استتيك را به آن نسبت دهيم.در اين روش دوباره به مديا پلير باز مي گردد. كه جزييات در زير آمده است.

 

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

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

براي اولين بار كه شما شكل مديا پلير را ساخته ايد شما ميتوتنيد برخي روش ها را براي شروع كردن و تمام كردن موزيك ايجاد كنيد. اين روش ها در زير ليست شده اند.

 

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

روش استارت آهنگ از ابتدا شروع به اجرا شدن مي كند. اگر آهنگ دوباره بعد از روشن كردن Pause دوباره شروع به اجرا كند از قسمتي كه مكث داشته است شروع مي كند و نه از ابتدا.

به منظور شروع موزيك از ابتدا شما بايد از روش ري استارت استفاده كنيد. كه جزييات در زير آمده است.

 

mediaPlayer.reset();

علاوه بر روش هاي استارت و استاپ ديگر روش هاي ارائه شده در اين گروه براي كارايي بالاتر فايل هاي صوتي و تصويري ارئه شده اند. اين روش ها در زير ليست شده است.

  • isPlaying()
    اين روش درستي يا اشتباه اجرا شدن موزیک را مشخص مي كند..
  • seekTo(positon)
    در اين روش آهنگ به طور صحيح دريافت مي شود و موزیک در لحظه اي خاص انتقال داده مي شود.
  • getCurrentDuration()
    اين روش حالت فعلي موزیک را در يك هزارم ثانيه به حالت قبل باز مي گرداند.
  • getDuration()
    اين روش كل زمان موزیک را در يك هزارم ثانيه باز مي گرداند.
  • reset()
    در اين روش مديا پلير دوباره بار گذاري ميشود
  • release()
    اين روش هر منبعي را كه به مديا پلير پيوست داده ميشود را آزاد مي كند.
  • setVolume(float leftVolume, float rightVolume)
    در اي روش مديا پلير به بالا و پايين بردن صدا كمك مي كند
  • setDataSource(FileDescriptor fd)
    اين روش منبع اطلاعاتي فايل هاي صوتي و تصويري را پايه گذاري ميكند
  • selectTrack(int index)
    اين روش به درستي يكي از موزیک هاي را از ليست موارد خاص انتخلب مي كند
  • getTrackInfo()
    اين روش مسيري است به سوي اطلاعات فايل هاي صوتي و تصويري

مثال

در اينجا مثالي براي استفاده از مديا پلير ارائه شده است. يك مديا پلير پايه ميسازد كه شامل فوروارد و بكوارد و پلي و ياز مي شود.

به منظور آزمايش کردن اين مثال شما نياز به يك دستگاه واقعي براي شنيدن صدا داريد.

  • شما از اكليپس آي دي اي براي ساختن برنامه اندرويدي بانام مديا پليراستفاده خواهيد كرد و آن را در پوشه com.example.mediaplayer جاي خواهيد داد و از هدفمند بودن اس دي كي و گرد آوري آن با آخرين ورژن اندرويد به منظور استفاده از سطوح بالاتري از اي پي آي ها اطمينان حاصل كنيد. 
  • اصلاح  فایل src/MainActivity.java برای افزودن كد هاي مورد نیاز
  • اصلاح the res/layout/activity_main به منظور افزودن کدهای xml

  • اصلاح the res/values/string.xml به منظور افزودن تركيبات رديفي لازم

  • يك پوشه جديد در مديا پلير بسازيد و آن را راو نام نهيد ويك فايل ام پي تري در آن جاي داده با اين مضمون song.mp3

  • برنامه را اجرا كنيد و يك وسيله اندرويدي اجرايي را انتخاب كنيد سپس برنامه را در آن نصب كنيد و نتيجه را باز بيني كنيد

در قسمت src/MainActivity.java مطلب به كلي توضيح داده شده است.

 

package com.example.sairamkrishna.myapplication;

import android.app.Activity;
import android.app.Activity;

import android.graphics.Bitmap;
import android.graphics.Color;
import android.graphics.drawable.BitmapDrawable;
import android.media.MediaPlayer;

import android.os.Bundle;
import android.os.Handler;

import android.view.Menu;
import android.view.MenuItem;
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);
}
};

@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.

int id = item.getItemId();

//noinspection SimplifiableIfStatement

if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
}

در قسمت res/layout/activity_main.xmlمطلب به كلي توضيح داده شده است.

 

<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=">>"
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="||"
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="<"
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="<<"
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>
<stringname="app_name">My Application</string>
<stringname="hello_world">Hello world!</string>
<stringname="action_settings">Settings</string>
</resources>

در قسمت AndroidManifest.xmlمطلب به كلي توضيح داده شده است.

 

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

<uses-sdk
android:minSdkVersion="13"
android:targetSdkVersion="22" />

<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>

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

موبايلتون رو به عنوان يك گزینه انتخاب كنيد و  در اين حالت شما دكمه Pause را غير فعال مي بينيد .

 

حالا روي Play كليك كنيد و مي بينيد كه دکمه ی Play غير فعال مي شود و اين بار Pause فعال مي شود.

در مرحله ی بعد موزيك در حال پخش است و هم اكنون كليد Pause را فشار دهيد و یک پيام Pause را مشاهده مي كنيد كه در زير نشان داده شده است.

 

حالا  كليد Play را فشار دهيد و موزیک دوباره از قسمت Pause شروع به خواندن مي كند. حالا كليد Forward يا Backward را فشار دهيد تا موزیک 5 ثانيه به جلو يا عقب برده شود. وقتي موزیک ديگر پیشروی نکرد در اين لحظه همان طور كه در تصوير مي بينيد يك پيام به اين شكل مشاهده مي كنيد.


موزيك در حالت پخش باقي مي ماند. به منظور خاموش كردن آن شما بايد به طور كلي از برنامه پشت زمينه خارج شويد.

 

تمامی محصولات و خدمات این وبسایت، حسب مورد دارای مجوزهای لازم از مراجع مربوطه می‌باشند و فعالیت‌های این سایت تابع قوانین و مقررات جمهوری اسلامی ایران است.
logo-samandehiمجوز نشر دیجیتال از وزرات فرهنگ و ارشاد اسلامیپرداخت آنلاین -  بانک ملتمعرفی بیاموز در شبکه سهپرداخت آنلاین - بانک اقتصاد نوینپرداخت آنلاین - بانک سامان