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

مرحبا..

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

سنتعلم في هذا الدرس المواضيع التالية:

١- استخدام الواجهة الخاصة بالإعدادات كتلك المستخدمة في نظام الأندرويد

٢- تعديل الثيم الخاص بعرض الرسالة

٣- تشغيل مقاطع صوتية داخل التطبيق

١- استخدام الواجهة الخاصة بالإعدادات كالمستخدمة في الأندرويد

سنستخدم التطبيق الذي قمنا بالعمل عليه في الحلقة السابقة لنضيف نشاطا ثالثا. ننشيء ملفا باسم: Act3.java ونضع فيه التالي:

package android.programming.series.ArdroidMultiActs;

import android.os.Bundle;

import android.preference.PreferenceActivity;

public class Act3 extends PreferenceActivity

{

@Override

protected void onCreate(Bundle savedInstanceState)

{

super.onCreate(savedInstanceState);

addPreferencesFromResource(R.layout.act3);

}

}

ننشيء ملفا تحت res/layout تحت مسمى act3.xml ونضع فيه التالي:

<?xml version="1.0" encoding="utf-8"?>

<PreferenceScreen

xmlns:android="http://schemas.android.com/apk/res/android">

<CheckBoxPreference

android:key="setting1"

android:title="Setting 1"

android:summary="Modify setting 1"

android:defaultValue="true"

/>

<CheckBoxPreference

android:key="setting2"

android:title="Setting 2"

android:summary="Modify setting 2"

android:defaultValue="true"

/>

<CheckBoxPreference

android:key="setting3"

android:title="Setting 3"

android:summary="Modify setting 3"

android:defaultValue="false"

/>

</PreferenceScreen>

نضيف التالي في ملف القائمة ArdroidMultiActs.java :

menu.add(0, 2, 0, "Act3");

ومن ثم:

public boolean onOptionsItemSelected (MenuItem item)

{

switch (item.getItemId())

{

case 0:

showAct1();

return true;

case 1:

showAct2();

return true;

case 2:

showAct3();

return true;

}

return true;

}

ومن ثم:

public void showAct3()

{

Intent autocomplete3 = new Intent(this, Act3.class);

startActivity(autocomplete3);

}

وختاما نضيف التالي في ArdroidMultiActs Manifest.java :

<activity android:name=".Act3"

android:label="activity 3"

>

<intent-filter>

<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />

</intent-filter>

</activity>

البرنامج يصبح كالتالي عند اختيار الخيار الثالث:

٢- تعديل الثيم الخاص بعرض الرسالة

يمكننا استخدام ثيمات معرفة مسبقا في الحزمة التطويرية لعرض المحتوى الذي نرغبه. وسنجد أن هذه الثيمات تشابه تلك المستخدمة في الأندرويد نفسه. لتحديد نوع الثيم الخاص بنشاط معين، ننشيء ملفا باسم: Act4.java ونضع فيه التالي:

package android.programming.series.ArdroidMultiActs;

import android.app.Activity;

import android.os.Bundle;

public class Act4 extends Activity

{

@Override

protected void onCreate(Bundle savedInstanceState)

{

super.onCreate(savedInstanceState);

setContentView(R.layout.act4);

}

}

ننشيء ملفا تحت res/layout تحت مسمى act4.xml ونضع فيه التالي:

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

android:orientation="vertical"

android:layout_height="fill_parent"

android:layout_width="fill_parent"

>

<TextView android:id="@+id/text"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:text="This is an android powered application"

/>

</LinearLayout>

نضيف التالي في ملف القائمة ArdroidMultiActs.java :

menu.add(0, 3, 0, "Act4");

ومن ثم:

public boolean onOptionsItemSelected (MenuItem item)

{

switch (item.getItemId())

{

case 0:

showAct1();

return true;

case 1:

showAct2();

return true;

case 2:

showAct3();

return true;

case 3:

showAct4();

return true;

}

return true;

}

ومن ثم:

public void showAct4()

{

Intent autocomplete4 = new Intent(this, Act4.class);

startActivity(autocomplete4);

}

وختاما نضيف التالي في ArdroidMultiActs Manifest.java :

<activity android:name=".Act4"

android:label="activity 4"

android:theme="@android:style/Theme.Dialog">

<intent-filter>

<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />

</intent-filter>

</activity>

بالضغط على الخيار الرابع، يظهر لدينا ما يلي:

٣- تشغيل مقاطع صوتية داخل التطبيق

من المفيد أحيانا إضافة مقاطع صوتية للتطبيق وتمكينه من تشغيلها. قد تكون المقاطع مقترنة بأزرار لوحة المفاتيح إن وجدت، أو بأزرار نقوم بإنشائها داخل التطبيق. سنقوم بعمل تطبيق يحتوي على زر واحد من شأنه تشغيل مقطع صوتي في حال الضغط عليه. كما سيقوم بعمل إيقاف مؤقت للمقطع في حال ضغطنا عليه من جديد.

أود التنبيه لنقطة مهمة. فيما سبق، قمت بذكر أن المقاطع الصوتية ومقاطع الفيديو يتم إضافتها الى ملف ال  assets. ولكن التغييرات العديدة في الحزمة البرمجية التطويرية SDK قامت باسترجاع الطريقة السابقة من حيث المكان الذي توضع فيه مقاطع الصوت. والطريقة السابقة تقتضي بوضع المقطع في مجلد اسمه raw نقوم بإنشائه تحت المجلد res. سأقوم بوضع أغنية سميتها song.mp3 في مشروع جديد أسميته AndroidAudio على النحو التالي:

في ملف ال main.xml، قمت بإضافة الكود التالي:

<?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:background="#4500ffff"

android:padding="40dip"

>

<TextView

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:text="Android Audio"

/>

<Button android:id="@+id/ac1"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:text="play/pause"

/>

</LinearLayout>

الآن نعود الى ملف المصدر البرمجي AndroidAudio.java وأقوم باستيراد المكتبات والمجموعات التالية:

import android.app.Activity;

import android.media.MediaPlayer;

import android.os.Bundle;

import android.view.View;

import android.widget.Button;

import android.widget.Toast;

المجموعة الثانية خاصة بالكائن الذي سنقوم بإضافة الأغنية له. بالنسبة لآخر مجموعة، سنرى تأثيرها فيما بعد.

نقوم بإضافة الكود التالي:

public class AndroidAudio extends Activity {

public int playstop = 0;

public MediaPlayer mp;

public void onCreate(Bundle ww)

{

super.onCreate(ww);

setContentView(R.layout.main);

final Button play = (Button) this.findViewById(R.id.ac1);

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

play.setOnClickListener(new Button.OnClickListener(){

public void onClick(View v)

{

if (playstop == 0)

{

MediaHandler(mp,1);

//mp.start();

playstop = 1;

show1("played");

}

else

{

MediaHandler(mp,2);

//mp.pause();

playstop = 0;

show1("paused");

}

}

}

);

}

المتغير playstop يتم استخدامه أثناء الضغط على الزر حتى نتمكن من معرفة حالة المقطع (يعمل أو متوقف). الدالة MediaHandler هي دالة قمت بتعريفها والغرض منها تمرير الكائن الذي يحمل المقطع الصوتي إضافة الى رقم تقوم من خلاله الدالة بإيقاف المقطع أو إعادة تشغيله (ويمكن الاستعاضة عنها باستخدام السطر الذي يليها مباشرة). الدالة show1 هي دالة نقوم بتمرير عبارة نصية عبرها تقوم بإظهارها بشكل مؤقت على الشاشة.

الدالة MediaHandler :

public void MediaHandler(MediaPlayer mp, int e)

{

if (e == 1)

{

mp.start();

}

else

{

mp.pause();

}

}

الدالة show1 :

public void show1(String ss)

{

Toast.makeText(this, ss,Toast.LENGTH_SHORT).show();

}

الشكل النهائي لملف AndroidAudio.java

package android.programming.series.AndroidAudio;

import android.app.Activity;

import android.media.MediaPlayer;

import android.os.Bundle;

import android.view.View;

import android.widget.Button;

import android.widget.Toast;

public class AndroidAudio extends Activity {

public int playstop = 0;

public MediaPlayer mp;

public void onCreate(Bundle ww)

{

super.onCreate(ww);

setContentView(R.layout.main);

final Button play = (Button) this.findViewById(R.id.ac1);

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

play.setOnClickListener(new Button.OnClickListener(){

public void onClick(View v)

{

if (playstop == 0)

{

MediaHandler(mp,1);

//mp.start();

playstop = 1;

show1("played");

}

else

{

MediaHandler(mp,2);

//mp.pause();

playstop = 0;

show1("paused");

}

}

}

);

}

public void MediaHandler(MediaPlayer mp, int e)

{

if (e == 1)

{

mp.start();

}

else

{

mp.pause();

}

}

public void show1(String ss)

{

Toast.makeText(this, ss,Toast.LENGTH_SHORT).show();

}

}

أتمنى أن تكون هذه الحلقة قد نالت إعجابكم. تحياتي لكم 🙂

قد يعجبك أيضًا
عدد التعليقات 9
  1. الاسير يقول

    جزاك الله خير على هذا العمل الطيب

  2. محمد يقول

    ما تقصر والله .. شغل محترم

  3. Yasser يقول

    ايه الحلاوة والجمال دة والله شغل ولا كلمة حاجة من الاخر 🙂

  4. أنس المعراوي يقول

    الله يعطيك العافية على الجهد الرائع المبذول في هذه الدروس 🙂

  5. أبو صالح يقول

    شكراً لك
    لمشاهدة الدروس السابقة:
    الأول:http://ardroid.aitnews.com/2009/12/30/android-programming-series-l1
    الثاني:http://ardroid.aitnews.com/2010/01/04/android-programming-series-l2
    الثالث:http://ardroid.aitnews.com/2010/01/12/android-programming-series-l3
    الرابع:http://ardroid.aitnews.com/2010/01/18/android-programming-series-l4

    أتمنى أن لا يضيع هذا الجهد وأقترح عند الانتهاء من الشرح أن يصدر ككتيب PDF باسمك وبرعاية المدونة

    1. وائل العلواني يقول

      شكرا لك أبو صالح 🙂

      هذا ما نود عمله مستقبلا ان شاءالله..

      تحية

  6. Sary يقول

    الله يجزاك خير يا استاذ وائل … والله نفعتني كثير جدا جدا جدا خصوصا ان مشروع تخرجي على الاندرويد ولم اكن اعلم فيه شي…

    انا شاكر لك من كل قلبي…

  7. محمد عبد الفتاح يقول

    لا تزعل مني أخ وائل .. دروسك لا تصلح ولا حتى لمحترفي الجافا! على الدارس لدرسك أن يكون محترف في الجافا والأندرويد معاً !!

اترك ردًا

لن يتم نشر عنوان بريدك الإلكتروني.