برمجة جافا موبايل باستخدام Java ME

السلام عليكم ورحمة الله

Coverملحوظة:

اسهل طريقة لبرمجة جافا موبايل هو استخدام  NetBeans EE النسخة رقم  7.0 مع جافا ٣٢ بت أي يجب تثبيت ألة جافا الإفتراضية 32 بت (JDK 32 bit) حتى لو كان نظام التشغيل 64 بت.

مثلاً اسم النُسخة لنظام لينكس هي netbeans-7.0-ml-linux.sh ولنظام وندوز netbeans-7.0-ml-windows.exe

أمس اشتريت جهاز Samsung Texto plus، وهو يُعتبر من اﻷجهزة المتوسطة السعر، ويميل إلى الرخيص، حيث كان سعره حوالي 70 دولار. وبالرغم من هذا فهو أغلي موبايل أقوم بشراءه، فلم أكُن أنوي شراء موبايل ذكي (إذا اعتبرنا أنه ذكي، أو أن الذكاء هي أحد ميزات الموبيالات)، كُنت أكتفي باﻷجهزة البسيطة والتي أستطيع من خلالها التحدث وإرسال وإستقبال الرسائل، وسماع القرآن من ملفات MP3، دون أن يقيدني بحمله والحرص عليه طوال الوقت مخافة أن يضيع، فالمبويايل البسيط يُمكن أن تتركه في أي مكان وأنت مطمئن. أما تصفح النت فكنت أفضله، ولا زلت أفضله بإستخدام حاسوب أو لابتوب، وتطوير البرامج بإستخدام لوحة مفاتيح كاملة، وليست لوحة مفاتيح لابتوب، وشاشة خارجية (أكبر من شاشة لابتوب).

في أثناء تفقد ميزات الموبايل وبرامجه- وهو مازال في الشاحن- لفت نظري أن به برامج جافا موبايل، فأسرعت إلى الكمبيوتر لتشغيل Net Beans ووجدت أنه يدعم تطوير Java ME وهي Java Micro Edition، مخصصة للأجهزة المُدمجة والموبايلات. وبخلاف اﻷندويد والـ iOS، فهي غير معتمدة على نوع نظام تشغيل الهاتف، تحتاج لمشغل لها في أنظمة سيمبيان أو أي أنظمة أخرى، ولا أرى ما يمنع أن يتم تطوير هذا المشغل (Virtual machine) في بيئة اﻷندرويد مثلاً.

شعرت بفرح كبير عند تشغيل أول برنامج Hello World، في الموبايل، بعد محاولتين، حيث أن المحاولة اﻷولى فشلت وذللك بسبب عدم معرفتي بنسخة المشغل الموجودة. ويُمكن عمل برامج جافا موبايل في بيئة Net Beans عن طريق:

New Project/Java ME/Mobile Application

ويوجد محاكي موبايل لتشغيل البرنامج. وفي النهاية نقوم بنقل المجلدdist الذي يحتوي على المفات ذات اﻹمتداد jad و jar

بعدها قررت أن أقوم في يوم من اﻷيام بعمل برنامج مواقيت الصلاة لولاية الخرطوم، حيث أنه لدي البيانات اليومية لمواقيت الصلاة كُنت قد كتبتها في عام 1997، وقُمت باستخدامها في أكثر من برنامج. كانت لدي مشاريع أخرى لهذا اليوم، لكن لم استطع أن أقاوم، فهذه أول مرة أقوم بعمل برنامج لموبايل، فجلست باقي اليوم أطور في برنامج مواقيت الصلاة، وقراءة كود الجافا. والحمد لله وجدت دعم كبير في اﻹنترنت لكل مشكلة واجهتي.

وقد قُمت بتجربة البرنامج في موبال آخر صيني، وقد عمل فيه البرنامج أيضاً.

لكن لاحظت أن لغة جافا، وباﻷخص جافا موبايل فيها بعض التعقيد للمهات العادية، كقراءة ملف نصي، أوالتعامل مع التاريخ. فمثلاً هذا كود للقراءة من ملف نصي في لغة Java ME:

class FileRead
{
public static void main(String args[])
{
  try{
    FileInputStream fstream = new FileInputStream("textfile.txt");

    DataInputStream in = new DataInputStream(fstream);
    BufferedReader br = new BufferedReader(new InputStreamReader(in));
    String strLine;

    while ((strLine = br.readLine()) != null)   {

    System.out.println (strLine);
  }

  in.close();
}catch (Exception e){
  System.err.println("Error: " + e.getMessage());
}
}

وهذه مقارنة لقراءة ملف نصي بلغة أوبجكت باسكال:

procedure ReadTextFile;
var
  List: TStringList;
  i: Integer;
begin
  try
    List:= TStringList.Create;
    List.LoadFromFile('/proc/cpuinfo');
    for i:= 0 to List.Count - 1 do
      Writeln(List[i]);

    List.Free;

  except
  on e: exception do
    Writeln(e.Message);
  end;
end;

وهذا لقراءة ملف نصي بإستخدام مونو C#


public static void Main (string[] args)
{
  try
  {

    using (StreamReader sr = new StreamReader("/proc/cpuinfo"))
    {
      String line;
      while ((line = sr.ReadLine()) != null)
      {
        Console.WriteLine(line);
      }
    }
    }
      catch (Exception e)
    {
      Console.WriteLine("The file could not be read:");
      Console.WriteLine(e.Message);
    };
 }

نلاحظ أن لغة جافا إحتاجت لثلاث Classes لقراءة الملف النصي، بينما أوبجكت باسكال وسي شارب إحتاجت لواحد فقط.

وهذه مثال لإضافة ساعتين للوقت الحالي وإظهاره بشكل محدد، في جافا العادية:


  Calendar cal = Calendar.getInstance();
  Format myTimeFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
  cal.add(Calendar.HOUR, 2);
  System.out.println(myTimeFormat.format(cal.getTime()));

وهذه نفس العملية بلغة أوجكت باسكال:


  Writeln(FormatDateTime('yyy-mm-dd hh:nn:ss', Now + EncodeTime(2, 0, 0, 0)));

وهذا نفس الشيء بإستخدام مونو C#:


  DateTime dateValue = new DateTime();
  dateValue = DateTime.Now.AddHours(2);
  Console.WriteLine(dateValue.ToString("yyyy-MM-dd hh:mm:ss"));

وفي الختام فإن التجربة كانت ممتعة وتعلمت منها كثيراً. ومع أن برمجة الموبايلات متجهة نحو اﻹندويد وiOS، إلا أنه مايزال عدد كبير من اﻷجهزة الرخصية والمتوسطة السعر تدعم هذه التقنية، حسب إحصائية موقع صن، فإن عدد الموبايلات التي تحتوي على جافا موبايل هي 3 مليارات.