SMS Messaging in Android

အခု ကျူတိုရီရယ်လေးကတော့ Posted by weimenglee ရဲ့ SMS Messaging in Android ကို ပြန်စမ်းထားတာပါ။ author ရဲ့ original ကိုကြည့်ချင်သူများကတော့ ဒီလိပ်စာ အတိုင်းသွားနိုင်ပါတယ်။

http://mobiforge.com/developing/story/sms-messaging-android

ဒီ ကျူတိုရီရယ်လေးကို စမ်းတဲ့အခါ တကယ် Devices မလိုအပ်ဘဲ Emulator လေးနှစ်ခုကို port နံပါတ်လေးခွဲပြီး စမ်းနိုင်် တဲ့အတွက် အကျိုးများမယ်ထင်ပြီး မျှဝေလိုက်ပါတယ်။

Android သည် permission-based policy ကိုသုံးထားတဲ့အတွက် ကိုယ့် application ကလိုအပ်တဲ့ permission တွေကို AndroidManifest.xml မှာသွားပြီးသတ်မှတ်ပေးရမှာပါ။ အဲဒီလိုသတ်မှတ်ပေးလိုက်ခြင်းအားဖြင့် ကိုယ့်ရဲ့ application ကို install လုပ်လိုက်တဲ့အခါမှာ ဒီ user ကိုဘာလုပ်ခွင့် (access permission) သတ်မှတ်ပေးတဲ့ အခါရှင်းရှင်းလင်းလင်းဖြစ်သွားစေပါတယ်။ ခုအောက်ကပြထားတဲ့ screen shot မှာ AndroidManifest.xml မှာ SMS ကို Send လုပ်ဖို့ permission နဲ့ SMS ကို receive လုပ်ဖို့ permission ပေးထားပါတယ်။

User Interface မှာတော့ ဖုန်းနံပါတ်ထည့်ဖို့ EditText View ရယ်၊ SMS Message တွေပို့ဖို့ EditText View ရယ်၊ Send ဖို့ button တစ်ခု၊ information ပေးဖို့ TextView နှစ်ခုထည့်ထားတာ အခုလိုတွေ့ရမှာပါ။

အခု SMS.java ဆိုတဲ့ Activity မှာ Button View မှာListener တွေထည့်ပြီး SMS ပို့တဲ့ပုံစံတစ်ခု လိုမျိုးစဉ်းစားကြည့်ကြတာပေါ့။ userကသာ ဘာစာမှမရိုက်ဘဲ SMS send ကိုနှိပ်ရင် message ပေးသင့်ပြီပေါ့။ မဟုတ်ရင် တော့ SMS message ပို့ပေးမှာပါ။ ခုလိုမျိုးရေးလိုက်ပါတယ်။

SMS message ပို့ချင်ရင်တော့ SmsManager class ကိုသုံးရမှာပါ။ တခြား class တွေနဲ့မတူတာက SmsManager object လေးတစ်ခုလိုချင်ရင် class ကိုတိုက်ရိုက် instantiate လုပ်စရာမလိုဘဲ static method တစ်ခုဖြစ်တဲ့ getDefault() နဲ့ခေါ်နိုင်တာပါ။

sendTextMessage() သည် SMS message တွေကို PendingIntent နဲ့ပို့ပါတယ်။ PendingIntent object ကိုနောင်တစ်ချိန်မှာ target ဘယ်ကောင်လဲဆိုတာကို ခွဲခြားဖို့သုံးတာပါ။ ဥပမာ အနေနဲ့ပြောမယ်ဆိုရင် message ပို့ပြီးသွားရင်  PendingIntent object ကိုသုံးပြီး တခြား activity ကို ပြသနိုင်ပါတယ်။ တကယ်လို့ SMS message ပို့နေတဲ့ အခြေနေကို ကိုစောင့်ကြည့်ချင်တယ်ဆိုရင် အမှန်တကယ်တော့ PendingIntent object ကို BroadcastReceiver object နှစ်ခု နဲ့တွဲသုံးရမှာပါ။ အခုဒီမှာလည်း Broadcast Reciever နှစ်ခုသုံးထားပါတယ်။

ပုံမှာပြထားတဲ့ sms.sendTextMessage(phoneNumber,null,message,sendPI,deliveredPI);

မှာ sendPI နဲ့ deliveredPI တို့သည့် PendingIntent များဖြစ်ကြပါတယ်။ ခုလို SMS Message တွေပို့ချင်ရင်တော့ android.telephony.SmsManager ဆိုတဲ့ library ကိုတော့ import လုပ်ရမှာပေါ့။

ပုံမှာ ပြထားတဲ့အတိုင်း PendingIntent object တစ်ခုဖြစ်တဲ့ (sendPI) သည် sending process ကို monitor လုပ်ဖို့ပါ။ SMS message စပို့တာနဲ့ ဒီ event က fire ဖြစ်မှာပါ။

နောက် တစ်ခု deliveredPI ကတော့ dilevery process ကို monitors လုပ်ဖို့ပါ။ သူကတော့ SMS successfully delivered ဖြစ်မှသာ fire ဖြစ်မှာပါ။

ဒီလိုမျိုး အဆင့်တွေမလုပ်ချင်ရင် Intent object ကိုသုံးပြီး built-in SMS application တွေရေးကြည့်နိုင်ပါတယ် လို့လည်းဆိုထားပါတယ်။

ဥပမာ

Intent sendIntent = new Intent(Intent.ACTION_VIEW);

sendIntent.putExtra(“sms_body”, “Content of the SMS goes here…”);

sendIntent.setType(“vnd.android-dir/mms-sms”);

// Activity ကို start up လုပ်လိုက်တာပါ။

startActivity(sendIntent);

ခုဆိုရင်တော့ SMS ပို့တဲ့ အပိုင်းတော့ပြီးပြီလို့ဆိုရမှာပေါ့။ SMS ကိုလက်ခံတဲ့အပိုင်းကို လေ့လာကြည့်ရအောင်။ incoming SMS message တွေကိုတော့ BroadcastReceiver object နဲ့ပြန်လက်ခံနိုင်ပါတယ်။ ဒီတော့ နောက်ထပ် SmsReceiver.java ကိုထပ်ထည့်ပါမယ်။ ဒါဆိုရင် AndroidManifest.xml မှာ SmsRceiver.java အတွက် ထပ်ပြီး ထည့်ပေးရမှာပေါ့။

SMS Messages ကိုလက်ခံရရှိတဲ့ အချိန်မှာ, onCreate() method ကနေစပြီးတော့ ခေါ်ပါလိမ့်မယ်။ SMS message တွေမှာ Bundle object ကနေတဆင့် Intent object ပါတွဲပြီး (onRecieve() ဆိုတဲ့ method ရဲ့ဒုတိယ parameterကို ဆိုလိုပါတယ်) ပါပါတယ်။ အဲ့ဒီ message တွေကို array Object ထဲမှာ PDU format နဲ့သိမ်းထားပါတယ်။ ဒါကြောင့်မို့လို့ အဲ့ဒီထဲက message တွေကို ဆွဲထုပ်ချင်ရင် createFromPdu() method နဲ့သုုံးပြီးဆွဲထုတ်ပါ။ SmsMessage တွေကိုတော့ ဒီ ကျူတိုိရီရယ်မှာ Toast နဲ့ဘဲပြထားပါတယ်။

ခုဆိုရင် ဒီကျူတိုရီရယ်လေးကို စမ်းဖို့ Emulator လေးနှစ်ခုလိုအပ်မှာပါ။ ဒါကြောင့် cmd prompt ထဲကနေ Emulator နှစ်ခု create လုပ်လိုက်ပါ။ အောက်ကပေးထားတဲ့ပုံမှာ ဆိုရင် Emulator နှစ်ခုရှိနေပါပြီ။

ဘာမှ မရိုက်ဘဲ SMS ပို့ကြည့်ရင်တော့ ဒီလိုပေါ်လာမှာပါ။

ကဲ စာရိုက်ပြီး SMS ပို့ရင်တော့ SMS Sending ဖြစ်နေပါပြီ

နောက်နေ့မှဆုံကြမယ်! :)

p.s အရင်ဆိုရင် ပြုံးခဲပါတယ်(မောင်ပြံုးနဲ့ဆန့်ကျန်ဘက် :P ) ဒီနေ့ Connection တအားကောင်းနေလို့ပါ

Facebook comments:

7 Responses

  1. Wunna Swe says:

    Thanks for useful article….

    Cheers !!!

  2. mgpyone says:

    Do you think you can try with Myanmar Text ( I mean, with Unicode fonts , not with zawgyi ) ? … ooops.. sorry , we need an IME first ..

  3. [...] ၄. SMS Messaging in Android ၅. Intent အကြောင်း တစေ့တစောင်း [...]

Leave a comment


*