بسم الله الرحمن الرحيم
امم.. في البداية الوقت لدي ضيق, كنت أريد ان أعطي دروساً أقوى .. ولكن من أجل الوقت سوف أعطي درساً صغيراً ولكنه مميز لدى البعض, وكما هو واضح بالعنوان, كيفية تشغيل ملف صوتي ( mp3 ) مع استخدام السيك بار ..
- لمعرفة الصيغ التي تدعمها اندرويد في الوسائط, يمكنك معرفتها بالنقر على : سبحانك يا رب
في البداية, ننشأ تطبيق جديد ( لمعرفة كيفية إنشاء تطبيق جديد اضغط هنا ) من ثم من على الملفات ننشأ مجلد جديد بإسم raw بداخل المجلد res. فمجلد raw هو الذي نضع فيه الملفات الصوتية كما ذكرنا سابقاً 1.
تستطيع إنشاء الملف بالضغط على مجلد res بالزر الأيمن واختر new ثم Directory. تظهر لك نافذة صغيرة لكتابة اسم المجلد الذي تريده واكتب داخله ما اتفقنا عليه raw.
ثم ضع داخل مجلد raw الملف الصوتي الذي تريده .. ولكن التزم بإن يكون اسم الملف الصوتي بالأحرف الصغيرة الانجليزية.
مثلاً انا قمت بتسميته : androdyaudio.mp3
الآن نفتح الواجهة الاولى للتطبيق activity_main.xml ( حسب الاسم الذي قمت بتسميته انت ) .. بعد ذلك نقوم بوضع ادوات فيها .. نضع اداة السيك بار + 2 ازرار + نص .. طبعا غير مجبورين بهذه المعطيات ولكن هذه التي سوف نطبق عليها درسنا .. قم بوضعها كما يناسبك .. ولكن في درسنا :
- سيك بار يتتبع قراءة الملف الصوتي.
- زرين واحد للتشغيل والآخر للايقاف المؤقت.
- نص حالة الملف الصوتي.
قم بتنسيقها كما يناسبك .. بالنسبة لي انتهيت من وضعها بالشكل التالي :
الكود :
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_margin="20dp"> <LinearLayout android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="wrap_content"> <TextView android:id="@+id/text_shown" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="حالة الملف الصوتي" android:textSize="50px" android:textColor="#ff0000" android:layout_gravity="center_horizontal" /> <SeekBar android:id="@+id/seekbar" android:layout_width="match_parent" android:layout_height="wrap_content" /> </LinearLayout> <LinearLayout android:orientation="horizontal" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_horizontal"> <Button android:id="@+id/pause_but" android:layout_width="150px" android:layout_height="80px" android:text="ايقاف" /> <Button android:id="@+id/play_but" android:layout_width="150px" android:layout_height="80px" android:text="تشغيل" /> </LinearLayout> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="www.Andrody.com" android:textSize="20dp" android:layout_margin="30dp" android:layout_gravity="center_horizontal" /> </LinearLayout>
في الكود .. أهم ما يجب فعله إعطاء id لكل المطلوب برمجته .. وقد قمت بوضع المعرفات كالتالي :
- نص حالة الملف الصوتي = text_shown
- السيك بار = seekbar
- زر التشغيل = play_but
- زر الايقاف المؤقت = pause_but
والآن نبدء بالجزء الرمجي ..
الجزء البرمجي طويل ولكن أراه سهل لذلك سوف أضعه هنا مع شرح بعض النقاط ..
في البداية الكلاسات المستخدم في التطبيق :
- MediaPlayer class.
- Handler class.
- Runnable class.
لكل منها شرح مفصل .. تستطيع البحث عنها والمعرفة أكثر حولها .
الكود البرمجي بملف الجافا الرئيسي لتطبيقنا MainActivity.java :
package com.andrody.first_app; 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.TextView; public class MainActivity extends Activity implements OnClickListener { // تعريف ما لدينا من المتغيرات SeekBar seek_bar; Button play_button, pause_button; MediaPlayer player; TextView text_shown; Handler seekHandler = new Handler(); // الدالة الرئيسية اون كريت @Override public void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); // ارتباط الاكتفتي بملف لليوت الرئيسية setContentView(R.layout.activity_main); getInit(); seekUpdation(); }// The getInit() method public void getInit() { // ربط المتغيرات بالكائنات في ملف xml seek_bar = (SeekBar) findViewById(R.id.seekbar); play_button = (Button) findViewById(R.id.play_but); pause_button = (Button) findViewById(R.id.pause_but); text_shown = (TextView) findViewById(R.id.text_shown); play_button.setOnClickListener(this); pause_button.setOnClickListener(this); // اسم الملف الصوتي الذي وضعنها في مجلد androdyaudioraw = player = MediaPlayer.create(this, R.raw.androdyaudio); // ست ماكس هي تحدد قدر استطالة السيك بار ومحدد طول الملف الصوتي الذي حددناه seek_bar.setMax(player.getDuration()); } // The run() method / Runnable run = new Runnable() { @Override public void run() { seekUpdation(); } }; public void seekUpdation() { // عند تعيين شريط المعالجة لتشغيل seek_bar.setProgress(player.getCurrentPosition()); // امم مدة معينة وقدرها 1 ثانية للتحديث بعد الضغط على الزر seekHandler.postDelayed(run, 1000); } @Override public void onClick(View view) { switch (view.getId()) { // عند الضغط على زر تشغيل يتغير النص إلى تتم قرائته case R.id.play_but: text_shown.setText("تتم قرائته .."); player.start(); break; // عند الضغط على زر الايقاف يتغير نص الحالة الى تم ايقافه case R.id.pause_but: player.pause(); text_shown.setText("تم ايقافه"); } }}
الشرح البسيط مجهود شخصي أرجوا أن اكون وفقت فيه .. واعتذر إن أخطئت في أحد النقاط, لانني أستخدم الأكواد أكثر من التعمق بشرحها ومعرفة اصلها والجزء الذي مشتق منه .. إلخ
والسلام عليكم ورحمة الله وبركاته .. انتظرونا بالقريب الجديد 🙂
لتحميل التدوينة في كتاب إلكتروني Download pdf : https://andrody.com/?attachment_id=173
السلام عليكم أخي جزاك الله خيرا على هذ الجهد الرائع والعمل الممتاز الذي اجتهدت عليه دون ما طلب مقابل له نسال الله أن لا يحرمك الأجر…
أخي إذا تكرمت عندي استفسار بسيط في ما يخص عمل seekbar لصوتيات mp3
الطريقة التي أوضحتها في دروسك واضحة وبسيطة لكن المشكلة إذا أردت أن أطبقها على أكثر من صوتية لا أوفق في كتابة الكودات كتابة صحيحة فيا ليت أتراعين في هذه المسألة وتوضح لنا طريقتها على أكثر من صوتية جزاك الله خيرا
كذلك بالنسبة لطريق تعريف media player إذا أردت أن أربطها بصوتيات كثير فما التعريف والدالة المناسبتين
جزاك الله خيرا لو تتكرم بتوضيح ولك منا جزيل الشكر وكامل التقدير