تشغيل ملف صوتي من المجلد raw مع استخدام SeekBar

بسم الله الرحمن الرحيم

امم.. في البداية الوقت لدي ضيق, كنت أريد ان أعطي دروساً أقوى .. ولكن من أجل الوقت سوف أعطي درساً صغيراً ولكنه مميز لدى البعض, وكما هو واضح بالعنوان, كيفية تشغيل ملف صوتي ( mp3 ) مع استخدام السيك بار ..

  • لمعرفة الصيغ التي تدعمها اندرويد في الوسائط, يمكنك معرفتها بالنقر على : سبحانك يا رب

في البداية, ننشأ تطبيق جديد ( لمعرفة كيفية إنشاء تطبيق جديد اضغط هنا ) من ثم من على الملفات ننشأ مجلد جديد بإسم raw بداخل المجلد res. فمجلد raw هو الذي نضع فيه الملفات الصوتية كما ذكرنا سابقاً 1.

تستطيع إنشاء الملف بالضغط على مجلد res بالزر الأيمن واختر new ثم Directory. تظهر لك نافذة صغيرة لكتابة اسم المجلد الذي تريده واكتب داخله ما اتفقنا عليه raw.

ثم ضع داخل مجلد raw الملف الصوتي الذي تريده .. ولكن التزم بإن يكون اسم الملف الصوتي بالأحرف الصغيرة الانجليزية.

مثلاً انا قمت بتسميته : androdyaudio.mp3

الآن نفتح الواجهة الاولى للتطبيق activity_main.xml ( حسب الاسم الذي قمت بتسميته انت ) .. بعد ذلك نقوم بوضع ادوات فيها .. نضع اداة السيك بار + 2 ازرار + نص .. طبعا غير مجبورين بهذه المعطيات ولكن هذه التي سوف نطبق عليها درسنا .. قم بوضعها كما يناسبك .. ولكن في درسنا :

  • سيك بار يتتبع قراءة الملف الصوتي.
  • زرين واحد للتشغيل والآخر للايقاف المؤقت.
  • نص حالة الملف الصوتي.

قم بتنسيقها كما يناسبك .. بالنسبة لي انتهيت من وضعها بالشكل التالي :

play_audio_file_raw_seekbar_android_1

الكود :

<?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("تم ايقافه");
        }
    }}

play_audio_file_raw_seekbar_android_2

الشرح البسيط مجهود شخصي أرجوا أن اكون وفقت فيه .. واعتذر إن أخطئت في أحد النقاط, لانني أستخدم الأكواد أكثر من التعمق بشرحها ومعرفة اصلها والجزء الذي مشتق منه .. إلخ

والسلام عليكم ورحمة الله وبركاته .. انتظرونا بالقريب الجديد 🙂

لتحميل التدوينة في كتاب إلكتروني  Download pdf : https://andrody.com/?attachment_id=173

About عبدالقادر عليوي

مواليد 1996 , سوري الجنسية, طالب علم, لدي شغوف كبير في تعلم كل ما يتعلق بالانترنت من تطوير وحماية, أحب القراءة كثيراً .. هدفي نشر العلم بشتى أنواعه ومجالاته, متابع من الدرجة الأولى لـ الدكتور ابراهيم الفقي و الشيخ أحمد ديدات - رحمهم الله -.

Check Also

التقنيات التي نستطيع برمجة تطبيقات والعاب الاندرويد بها

هل أنت محتار من أين تريد البدأ في مجال برمجة التطبيقات للهواتف الذكية أو الألعاب عالية الاداء ؟ تعرف في هذا المقال عن اللغات والتقنيات واختر منها ما يناسبك لدخول هذا المجال

تعلم برمجة تطبيق اندرويد لمدونتك البلوجر (1)

هل لديك تدوينة أو موقع إخباري ؟ أو معرض يعرض الكثير من البيانات من وسائط ؟ وبحاجة لعرضها في تطبيق اندرويد ؟ هذه فرصتك من هنا وللمبتدئين تعلم برمجة تطبيق لمدونتك

عرض صورة في التطبيق من فايربيس

بسم الله الرحمن الرحيم اليوم سيكون شرحنا عن كيفية عرض صورة  في التطبيق من قاعدة …

3 comments

  1. ابو محمد

    السلام عليكم أخي جزاك الله خيرا على هذ الجهد الرائع والعمل الممتاز الذي اجتهدت عليه دون ما طلب مقابل له نسال الله أن لا يحرمك الأجر…
    أخي إذا تكرمت عندي استفسار بسيط في ما يخص عمل seekbar لصوتيات mp3
    الطريقة التي أوضحتها في دروسك واضحة وبسيطة لكن المشكلة إذا أردت أن أطبقها على أكثر من صوتية لا أوفق في كتابة الكودات كتابة صحيحة فيا ليت أتراعين في هذه المسألة وتوضح لنا طريقتها على أكثر من صوتية جزاك الله خيرا
    كذلك بالنسبة لطريق تعريف media player إذا أردت أن أربطها بصوتيات كثير فما التعريف والدالة المناسبتين
    جزاك الله خيرا لو تتكرم بتوضيح ولك منا جزيل الشكر وكامل التقدير

ضع بصمتك بتعليق يعبر عن امتنانك

هذا الموقع يستخدم Akismet للحدّ من التعليقات المزعجة والغير مرغوبة. تعرّف على كيفية معالجة بيانات تعليقك.