به نام خدا
سلام دوستان
در این بخش از آموزش میخام بهتون یاد بدم که چجوری میتونید در یک صفحه از
برنامتون یک آهنگ رو پخش کنید در اصل میخام یک player رو بهتون آموزش
بدم و انشاالله در جلسات آینده ساخت یک مدیا پلیر حرفه ای رو بهتون آموزش میدم
فلسفه کار ما در تیم همیار اندروید این است که ابتدا با اکثر مباحث اندروید آشنا بشیم
بعد این مباحث رو با هم ترکیب کنیم و کم کم برنامه های بزرگتری با هم تولید کنیم
اولین قدم
اول از همه ما باید بدونیم که برای تولید برنامه به چه چیزهایی نیاز داریم
خب من یک دکمه برای پخش آهنگ میخام یک دکمه هم برای مکث / حرکت آهنگ
لازم دارم یک دکمه برای جلو بردن آهنگ و یک دکمه برای عقب کشیدم آهنگ
پس ما به چهارتا Button نیاز دازیم
طبق کد زیر من چهارتا Button ایجاد می کنم
activity.main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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:orientation="vertical"
tools:context=".MainActivity"
android:gravity="center">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="HamyarAndroid.com"
android:textSize="30sp"/>
<Button
android:layout_width="200dp"
android:layout_height="wrap_content"
android:text="شروع"
android:id="@+id/start_btn"
android:layout_marginTop="30dp"/>
<Button
android:layout_width="200dp"
android:layout_height="wrap_content"
android:id="@+id/pause_btn"
android:text="مکث / حرکت"
android:layout_marginTop="15dp"/>
<Button
android:layout_width="200dp"
android:layout_height="wrap_content"
android:text="جلو"
android:id="@+id/forward_btn"
android:layout_marginTop="15dp"/>
<Button
android:layout_width="200dp"
android:layout_height="wrap_content"
android:text="عقب"
android:id="@+id/back_btn"
android:layout_marginTop="15dp"/>
</LinearLayout>
همانطور که در بالا می بینید من چهارتا Button ایجاد کردم که تصویرش رو می تونید در پایین ببینید
قدم دوم
در این مرحله باید یک آهنگی از سیستم وارد پروژه بکنیم
خب ابتدا از مسیر زیر یک پوشه ایجاد میکنیم به نام raw وآهنگ رو از سیستم کپی میکنیم
و درون raw می ریزیم یا همون past می کنیم
روی res راست کلیک میکنیم بعد new بعدش روی directory کلیک می کنیم و اسمش رو raw میزاریم
و یک آهنگ درونش می ریزیم که اسم آهنگ که من داخل کدهام ازش استفاده کردم ahang هستش
قدم سوم
حالا نوبت نوشتن کدهای جاوا میرسه در کلاس مورد نظر
من کدها رو در پایین نوشتم و در آخر خط به خط براتون توضیحشون رو می نویسم
MainActivity.java
package com.hamyarandroid.player;
import androidx.appcompat.app.AppCompatActivity;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
Button start, pause, forward, back;
MediaPlayer medPlayer;
boolean pauseStatus;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
start = findViewById(R.id.start_btn);
pause = findViewById(R.id.pause_btn);
forward = findViewById(R.id.forward_btn);
back = findViewById(R.id.back_btn);
medPlayer = MediaPlayer.create(MainActivity.this, R.raw.ahang);
final int seekForwardTime = 5 * 1000;
final int seekBackwardTime = 5 * 1000;
pause.setEnabled(false);
forward.setEnabled(false);
back.setEnabled(false);
pauseStatus = true;
start.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
medPlayer.start();
pause.setEnabled(true);
forward.setEnabled(true);
back.setEnabled(true);
start.setEnabled(false);
}
});
pause.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view)
{
if (pauseStatus)
{
pauseStatus = false;
medPlayer.pause();
Toast.makeText(MainActivity.this,"مکث در آهنگ",Toast.LENGTH_SHORT).show();
}
else
{
pauseStatus = true;
medPlayer.start();
Toast.makeText(MainActivity.this,"حرکت آهنگ",Toast.LENGTH_SHORT).show();
}
}
});
forward.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
int currentPosition = medPlayer.getCurrentPosition();
if(currentPosition + seekForwardTime <= medPlayer.getDuration()){
medPlayer.seekTo(currentPosition + seekForwardTime);
Toast.makeText(MainActivity.this,"پرش به جلو",Toast.LENGTH_SHORT).show();
}else{
medPlayer.seekTo(medPlayer.getDuration());
Toast.makeText(MainActivity.this,"پایان آهنگ",Toast.LENGTH_SHORT).show();
}
}
});
back.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
int currentPosition = medPlayer.getCurrentPosition();
if(currentPosition - seekBackwardTime >= 0){
medPlayer.seekTo(currentPosition - seekBackwardTime);
Toast.makeText(MainActivity.this,"برگشت به عقب",Toast.LENGTH_SHORT).show();
}else{
medPlayer.seekTo(0);
Toast.makeText(MainActivity.this,"اول آهنگ",Toast.LENGTH_SHORT).show();
}
}
});
}
}
خب کد جاوا رو نوشتم و حالا خط به خط براتون توضیحش میدم
خط 15
باتن های داخل layout را به کلاس معرفی کردم
خط 16
یک مدیا پلیر ایجاد کردم و اسمش را medPlayer گذاشتم
خط 17
یک Boolean ایجاد کردم برای دکمه مکث به نام pauseStatus که در پایین بیشتر در موردش توضیح میدم
خط های 27 تا 30
باتن های معرفی شده را از طریق آی دی به ویوها متصل کردم
خط 32
آهنگ که در قدم دوم در پوشه raw ریخته بودیم رو به medPlayer وصل کریم
خط 33
مقدار پرش به جلوی آهنگ رو مشخص کردم که با هر بار کلیک به اندازه چه تایمی به جلو پرش کند
خط 34
مقدار تایم پرش به عقب را مشخص کردم
خط های 38 تا 40
در اینجا سه تا از باتن ها رو گفتم وقتی برنامه رو اجرا میکنن شما در حالت خاموش باشید
یعنی نمی توانید کلیک بخورید چون میخام بعد از شروع آهنگ این دکمه ها قابلیت کلیک خوری پیدا کنند
خط 42
گفتیم بهش که pausStatus یا حالت مکث را در حالت عادی به حالت true نگه دار
خط های 48 تا 62
به باتن Start خاصیت کلیک خوری میدهیم
خط 52
این خط با زدن کلیک start باعث شروع مدیا پلیر میشه
خط 53 تا 55
با زدن کلیک stsrt سه تا باتن فعال میشوند
اگر یادتون باشه من اونا رو در بالا غیر فعال کرده بودم در خط های 38 تا 40 تا زمانی که
آهنگ شروع به پخش بشه و در اینجا چون آهنگ داره پخش میشه این سه تا دکمه هم فعال میشوند
خط 56
این یک دکمه هم بر خلاف اون سه تا دکمه که در بالا گفتم این دکمه start بعد از کلیک خوردنش
غیر فعال میشه چون دیگه باهاش کاری نداریم
خط های 63 تا 81
به دکمه pause خاصیت کلیک خوری دادیم
خط 67
یک if ایجاد کردیم از pauseStatuse که حالت عادی اون رو هم در بالا یعنی در خط 42 گفتیم که true است
خط های 69 تا 71
گفتم اگر pauseStatuse در حالت true بود اون رو false بکن وmedPlayer را به حالت pause دربیاور
و متن "مکث در آهنگ" را برای من Toast بکن
(pauseStatuse چون در حالت عادی خط 42 true هستش با اولین کلیک به حالت false در میاد و آهنگ pause میشه)
خط های 73 تا 77
گفتم در غیر اینصورت بعد از کلیک کردن دکمه اگر pauseStatus در حالت true نبود یعنی false بود
آن را برای من true بکن و آهنگ را برای من پخش کن و جمله " حرکت آهنگ " را Toast کن
دوستان شما میتونید برای درک if آموزش Boolean را از همینجا مطالعه کنید
خط های 84 تا 99
خاصیت کلیک خوری به دکمه forward دادم
خط 89
مقدار زمانی که از آهنگ رفته رو میگیره
خط های 91 تا 96
درخط 91 میاد مقدار زمانی که از آهنگ رفته را با مقداری که میخاد به جلو بپره جمع میزنه ببینه از مقدار زمان کل آهنگ کمترمیشه یانه
اگر کمتر بود پس در خط 93 میاد و مقدارپرش که درخط 33 خودمون عددش رو گفتیم با مقدار زمانی که از آهنگ رفته رو جمع میزنه و به اون تایم از آهنگ میپره
اگر هم در خط 91 مقدار جمع زده شده بیشتر از مقدار زمان کل آهنگ بود میاد و خط 96 را اجرا میکند یعنی آهنگ را به پایان میرساند
خط های 102 تا 119
به دکمه BackWard خاصیت کلیک خوری دادیم
خط های 107 تا 116
دستور های Backward درست بر عکس دستورهای Forward هستن
تصویر های خروجی برنامه رو می تونید در پایین ببینید
اولین عکس قبل از اجرای آهنگ
همانطور که می بینید سه باتن غیر فعال هستند
تصویر زیر بعد از شروع آهنگ هستش
سه دکمه غیر فعال، فعال شدن و دکمه شروع چون آهنگ شروع به حرکت کرده دیگه باهاش کاری نداریم و غیر فعال میشه
تصویر زیر مکث آهنگ هستش یا همان Pause
زدن دوباره دکمه Pause که باعث حرکت آهنگ میشه
تصویر زیر جلو بردن آهنگ هستش
تصویر زیر مربوط به زمانی هستش که آخرای آهنگ است و شما دکمه جلو را میزنید
برگشت به عقب
تصویر زیر مربوط به زمانی هستش که شما نزدیک به اول زمان آهنگ هستین و باز دکمه عقب رو میزنید
امیدوارم از این آموزش لذت ببرید
اگر سوالی در مورد این آموزش داشتین میتونید در تلگرام از تیم همیار اندروید بپیرسین
همیار اندروید همیشه همیار شماست
به امید موفقیت روز افزون
سلام وقت بخیر عکس هایی که از محیط برنامه آپلود کردین هیچکدوم چرا باز نمیشن؟
سلام
متاسفانه تصاویر رو از دست دادیم
پست ها سرفرصت بازسازی میشن