أردرويد

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

مرحبا..

مع وصولنا الى الحلقة الخامسة من سلسلة تعلم برمجة الأندرويد، وبعد تغطيتنا لأهم المفاهيم، ستكون الحلقات القادمة عبارة عن أمثلة متنوعة أنقلها لكم من مصادر مختلفة كالكتب والمواقع الالكترونية. وستتنوع هذه الأمثلة كون البرمجة والحزمة البرمجية 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();

}

}

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

وائل العلواني

وائل العلواني.. مدون سوري ومطور تطبيقات أندرويد.. مهتم بالتقنية وآخر تطوراتها.. يعمل في شركة خاصة في مجال تقصي الأعمال BI وتعدين البيانات Data Mining

9 من التعليقات

ضع تعليقًا

%d bloggers like this: