Near Field Communication (NFC)

NFC ဆိုတာ
မကြာမှီ နှစ် အနည်းငယ် အတွင်းမှာ လက်ကိုင်ဖုန်းတစ်လုံးဟာ သင့်ရဲ့ ပိုက်ဆံအိတ်၊ credit card တွေရဲ့ နေရာမှာ အစားထိုးဝင်ရောက်လာမယ်၊ လက်ကိုင်ဖုန်းကို tap လိုက်တာနဲ့ လိုချင်တဲ့ သတင်းအချက်အလက်တွေ ရစေမယ့် နည်းပညာတစ်ခုကတော့ Near Field Communication (NFC) ပါဘဲ။ NFC ဟာ ကြိုးမဲ့ ဆက်သွယ်ရေးစနစ် (wireless technology) တွေထဲက တစ်ခုဖြစ်ပြီး ခုနောက်ပိုင်းမှာ Android ရဲ့ NFC-support ကြောင့် ပိုပြီး ရေပန်းစားလာခဲ့ပါတယ်။

NFC ဟာ (short range wireless − အကွာအဝေးအတိုအတွင်းသာ အလုပ်လုပ်တဲ့ ကြိုးမဲ့ နည်းပညာ ဖြစ်ပြီးသီအိုရီအရတော့ ၁၀စင်တီမီတာ အကွာအဝေးအတွင်း အလုပ်လုပ်တယ်လို့ ဆိုပါတယ်။ ပုံမှန်အားဖြင့်တော့  ၁ မှ ၄ စင်တီမီတာအတွင်းသာ စွမ်းဆောင်ရည်ကောင်းပါတယ်။  13.56MHz အတွင်းမှာ operate လုပ်ပြီး communicatin protocol ရယ် data exchange format ရယ်က RFID (Radio Frequency Identification) ရဲ့ စံနှုန်းတွေကို လိုက်နာ ပါတယ်။ (RFID ကတော့ 125MHzလှိုင်းမှာ အလုပ် လုပ်ပါတယ်။) မြန်နှုန်း(speed) အနေနဲ့ကတော့ 106-414kbps သာ ရှိပါတယ်။

NFC နည်းပညာ ကို ဘယ်လိုနေရာတွေမှာသုံးလာကြမလဲ?

NFC chip ထည့်ထားသော ပိုစတာ၊ ပရိုမိုးရှင်း ကူပွန်နှင့် ရှော့ပင်းစင်တာ
(photo courtesy to original owners)

နေရာ NFC ဖုန်းနဲ့ tap လိုက်ရင်
ဘတ်စ်ကားမှတ်တိုင်မှာ ဘတ်စ်ကားအချိန်စာရင်း
ပြတိုက်မှာ ပြခန်းပစ္စည်းတစ်ခုရဲ့ အကျဉ်းချုပ် သို့မဟုတ် အကျယ်လေ့လာနိုင်တဲ့ website URL ကို တစ်ခါတည်း ဖွင့်ပေးမယ်။
ကုန်ပစ္စည်းကြော်ငြာ − ၄င်းကုန်ပစ္စည်းရဲ့ ဝက်ဘ်ဆိုဒ် သို့မဟုတ် ပရိုမိုးရှင်း ကူပွန်
free Wifi ဆိုတဲ့ sign wifi password ရှိခဲ့ရင် အော်တို authenticate လုပ်ပေးပြီး သင့်ဖုန်းကို အင်တာနက် ချိတ်ပေးမယ်။
ကုန်ပစ္စည်း/ ဝန်ဆောင်မှုလုပ်ငန်း ကိုယ့်ရဲ့ facebook page ကို အော်တို like စေမယ်။
အခြား NFC စွမ်းဆောင်ရည် ပါဝင်တဲ့
လက်ကိုင်ဖုန်း tablet အချင်းချင်း
ဓါတ်ပုံ၊ လိပ်စာကဒ်၊ သီချင်း၊ youtube link စသည်ဖြင့်…
check-in ဘယ်နေရာရောက်ရောက် check-in ကြတဲ့ခေတ်မှာ ရောက်နေတဲ့ နေရာကို တကူးတက ရှာစရာမလိုတော့ဘဲ tap လိုက်တာနဲ့ check-in လုပ်နိုင်တော့မှာပါ။
Mobile Payment Paypal ကလည်း သူ့ရဲ့ commercial NFC service ကို UK မှာ စတင် launch လုပ်ထားပါတယ်။ Google ကလည်း Google Wallet ဆိုတဲ့ application ကို ထုတ်လုပ်ခဲ့ပြီး credit card ကို NFC ဖုန်းကနေတဆင့် သုံးနိုင်အောင် လုပ်ထားပါတယ်။ (ICS ဖုန်းတိုင်းတော့ သုံးလို့ မရသေးပါဘူး။ yakju နဲ့ takju build ဖုန်းတွေဘဲ သုံးလို့ ရဦးမှာပါ။)

Android နှင့် NFC

NFC ကို စသုံးခဲ့တာ Android မဟုတ်ပေမယ့် Android ကြောင့် NFC က ပိုအသုံးဝင်လာခဲ့တယ်လို့ ဆိုနိုင်ပါတယ်။ (နိုကီယာ ဖုန်းတော်တော်များများမှာ NFC ထည့်သွင်းထားတာ တွေ့ရပေမယ့် developer အတွက် API ကောင်းကောင်းမရှိတော့ သိပ် အသုံးတွင်ကျယ်ဟန် မရပါဘူး။ iOS မှာတော့ iPhone 4S ထိ NFC support ပါမလာသေးပါဘူး။ iOS6 မှာ ထည့်သွင်းလာမယ်လို့ ခန့်မှန်းကြပါတယ်။) Android 2.3, Gingerbread မှာစပြီး NFC support ထည့်သွင်းခဲ့ပြီး ပထမဆုံး NFC-enabled Android ဖုန်းကတော့ Google ရဲ့ Nexus S ဖြစ်ပါတယ်။ ဒါပေမယ့် စစချင်းမှာ NFC tag တွေကို ဖတ်နိုင်တဲ့ စွမ်းဆောင်ရည်ဘဲ ပါလာသေးပါတယ်။ Android 2.3.3 မှာမှ NFC read/write နည်းပညာ စတင်မိတ်ဆက်ခဲ့ပါတယ်။ Android 4.0 နဲ့ ပထမဆုံးထွက်လာတဲ့ Galaxy Nexus ဖုန်းမှာတော့ “Android Beam” ဆိုတဲ့ technology ကို စတင်ထည့်သွင်းခဲ့ပါတယ်။ Android beam ကြောင့် NFC ပါတဲ့ ဖုန်းအချင်းချင်း data sharing လုပ်လို့ရနိုင်လာပြီး data format ကို NDEF message လို့ခေါ်ပါတယ်။ data ဆိုတဲ့နေရာမှာ ဓါတ်ပုံ၊ သီချင်း၊ လိပ်စာကဒ်၊ Google Play URL, youtube URL, website URL စသဖြင့်ပါဝင်ပြီး ဖုန်းရဲ့ ကျောဘက်ချင်း tap(ထိ) လိုက်တာနဲ့ share လုပ်လို့ရပါတယ်။ Sony Xperia SmartTags ဆိုတဲ့ ကြော်ငြာကိုကြည့်ရင် Sony ရဲ့ XperiaS နဲ့အတူ NFC ကို တွင်တွင်ကျယ်ကျယ် မိတ်ဆက်လာတာကို တွေ့ရမှာပါ။

NFC chips/ NFC stickers/ NFC tags


နမူနာ NFC chips/stickers/tags များ
NFC အသုံးပြုတဲ့နေရာမှာ active target နဲ့ passive target ဆိုပြီး နှစ်မျိုးရှိပါတယ်။ NFC chip ထည့်သွင်းထားတဲ့ smartphone/tablet/otherdevices တွေဟာ Active target တွေပါ။ Passive target ကတော့ NFC sticker တို့ NFC tags တို့ပေါ့။ Android 2.3.3 ကနေစပြီး NFC write support ပါလာတဲ့အတွက် ဖုန်းကို အသုံးပြုပြီး NFC tags/sticker တွေကို read/write လုပ်လို့ရပါပြီ။ Tags နဲ့  sticker တွေက rewritable ပါ။ read-only ဖြစ်အောင် lock လုပ်လို့ရပါတယ်။ တစ်ခါ lock ပြီးတာနဲ့ ပြန် unlock လုပ်လို့မရတော့တာကိုတော့ သတိထားပါ။ Samsung ဖုန်းတွေမှာ NFC chip ကို ဘက်ထရီနဲ့ တွဲလျက် ထုတ်ပြီး LG ကတော့ back cover မှာ NFC chip ကို ထည့်ထားပါတယ်။ ကျမလည်း ဘက်ထရီနဲ့ တွဲထုတ်ထားတာကို သဘောမကျလှပါဘူး။ ဘက်ထရီလဲချင်တဲ့အချိန်ကြရင် ဒုက္ခရောက်ပါတယ်။ 

NFC နှင့် ဖုန်းလုံခြုံရေး အန္တရာယ်

NFC နည်းပညာ အသုံးပြုတာ တွင်ကျယ်လာတဲ့အခါ နောက်ဆက်တွဲ ပါလာနိုင်မယ့် အန္တရယ်တွေကိုလည်း သတိပြုသင့်ပါတယ်။ ဖြစ်နိုင်တာတွေကတော့ 

၁။ Eavesdropping − ကြားထဲကနေဖြတ်ပြီး ဒေတာခိုးယူမှု ဖြစ်လာနိုင်တယ်။ 

၂။ Data Manipulation − အလယ်ကနေဖြတ်ပြီး ဒေတာတွေ ပြောင်းပစ်နိုင်တယ်။ စိတ်ကြိုက် ခြယ်လှယ်နိုင်တယ်။ 
၃။ NFC ဖုန်းတွေဆီ ဗိုင်းရပ်စ် ဖြန့်ရတာ ပိုမို လွယ်ကူလာမယ်။ 
၄။ ဖုန်းပျောက်သွားခဲ့မယ်ဆိုရင် မိမိရဲ့ credit card information ပါတစ်ခါတည်း ပါသွားနိုင်တယ်။ 

ဒါတွေမယ့် အပေါ်မှာ ပြောသွားတဲ့ အန္တရယ်တွေကို ကာကွယ်နိုင်တာ မိမိကိုယ်တိုင်ဘဲ ဖြစ်ပါတယ်။
၁ နဲ့ ၂ အတွက်ကတော့ NFC ဟာ ၅စင်တီမီတာလောက်အတွင်းမှာသာ အလုပ်လုပ်တဲ့အတွက် သေချာ ဂရုတစိုက် သတိထားရင် အခြားသူတွေ ကြားဖြတ်ပြီး ဒေတာခိုးယူတာ/ ခြယ်လှယ်တာတွေ မဖြစ်နိုင်တော့ပါဘူး။
၃။ မိမိ စိတ်မချတဲ့ NFC target တွေကို tap မလုပ်ဘူးဆိုရင် virus ကူးတာကနေ ရှောင်ရှားနိုင်မှာပါ။ ဖုန်းထဲမှာ anti-virus တစ်ခုခု သွင်းထားပါ။ 
၄။ NFC ဟာ ဖုန်းရဲ့ screen lock ဖြစ်နေရင် အလုပ်မလုပ်ပါဘူး။ screen ကို ဖွင့်လို့မရရင် credit credit/Google Wallet တွေ သုံးနိုင်မှာ မဟုတ်ပါဘူး။ ဒီတော့ screen unlock အတွက် password-protect/pattern lock လုပ်ထားသင့်ပါတယ်။

NFC ကို စမ်းသပ်ခြင်း 


NFC tags from tagsfordroid
Galaxy Nexus မှာ NFC support ပါလာတော့ Nexus သုံးတဲ့ အခြားသူငယ်ချင်းတစ်ယောက်နဲ့ အတူ စမ်းသပ်ကြည့်ဖို့ www.tagsfordroid.com ကနေ NFC tags ၁၀ခုကို ပို့ခအပါအဝင် US$ 20နဲ့ မှာလိုက်ပါတယ်။ ကံကောင်းချင်တော့ တစ်ပါတ်အတွင်းရပါတယ်။ စမ်းသပ်ထားသလောက်တော့

၁။ ဖုန်းအချင်းချင်း Android beam နဲ့ contact sharing လုပ်ကြည့်ပါတယ်။ ဖုန်း၂ခုလုံး NFC ဖွင့်၊ ဖုန်းတစ်ခုက share ချင်တဲ့ contact ကိုဖွင့်ပြီး နောက်ဖုန်းတစ်ခုကို ကျောဘက်ချင်း tap လုပ်လိုက်တဲ့အခါ ဟိုဘက်ဖုန်းထဲကို contact card/business card တစ်ခုလုံး share ပြီးသား ဖြစ်သွားပါတယ်။
၂။ Youtube app ကနေ ဗီဒီယိုတစ်ခု ဖွင့်ထားပြီး အခြားဖုန်းကို tap လိုက်ရင် သူ့ဖုန်းထဲမှာ အဲဒီ ဗီဒီယိုကို အလိုအလျောက် ဖွင့်ပေးပါတယ်။
၃။ Game တစ်ခု ကစားနေတဲ့အချိန် နောက်ဖုန်းတစ်ခုကို tap လိုက်ရင် သူ့ဆီမှာ အဲဒီgame ရှိခဲ့ရင် တစ်ခါတည်း ဖွင့်ပေးပြီး မရှိခဲ့ရင် Google Play ကို တစ်ခါတည်း ခေါ်သွားပါတယ်။
၄။ Google Play ကနေ NFC Quick Actions ဆိုတဲ့ app ကို သွင်းပြီး tags တွေကို စမ်းရေးကြည့်ပါတယ်။ Application, ဖုန်းနံပါတ်, foursquare check-in location, ကင်မရာ flash မီးအဖွင့်အပိတ်, အီးမေးလ်, sms, Google maps, maps navigation, settings, plain text, website URL, Wifi hotspot+password စသဖြင့် အစုံရေးလို့ရပါတယ်။ ကျမတို့ မှာထားတဲ့ tags က မမ်မိုရီ 768 bytes ရှိပါတယ်။ tags တစ်ခုနဲ့တစ်ခု ရေးလို့ရတဲ့ memory ကွာပါတယ်။ မဝယ်ခင် သေချာစစ်ပါ။ tag တစ်ခုကို business card လုပ်ထားပါတယ်၊ အခြား tag တွေကိုတော့ settings ထည့်ရေးထားပါတယ်။ ဥပမာ− ရုံးမှာထားတဲ့တစ်ခုက ဖုန်းအသံလျော့တယ်၊ vibrate on တယ်၊ wifi ဖွင့်ပါတယ်။ tap လိုက်တာနဲ့ ကိုယ်ထည့်ရေးထားတဲ့ settings အကုန်လုပ်ပေးသွားမှာပါ။ 

NDEF message တွေ ဘာတွေကိုတော့ သေချာ မလေ့လာရသေးပါဘူး။ အရင်နှစ် Google I/O မှာ ပြောသွားတဲ့ How to NFC ကိုလည်း စိတ်ဝင်စားရင် ကြည့်သင့်ပါတယ်။ တော်တော်ပြည့်ပြည့်စုံစုံ ရှင်းပြသွားတာပါ။ Google Wallet app ကလည်း မလေးရှားအတွက် available မဖြစ်သေးတော့ စမ်းကြည့်လို့မရပါဘူး။ Technical articles တွေ မရေးတာ ကြာတော့ ဒီတစ်ပုဒ်ရဖို့ တော်တော် ရေးယူလိုက်ရပါတယ်။ LG Optimus 4X HD တို့ Sony Xperia S တို့ဝယ်ရင် NFC tags လေးတွေပါ တစ်ခါတည်း ပေးတယ်လို့တော့ ဖတ်ရတယ်။ S3 ရဲ့ feature တစ်ခုဖြစ်တဲ့ S-Beam ဆိုတာလည်း NFC ပါ။   နောက်ထွက်တဲ့ ဖုန်းတွေတော့ အားလုံးနီးပါး NFC support လုပ်လာလောက်ပါတယ်။ 

ကိုးကား။ ။
၁။ What is NFC and why do we care? (Engadget)
၂။ NFC Security Risk
၃။ Near Field Communication (Wikipedia)
၄။ Android API 2.3.3
၅။ Android API 4.0
၆။ List of NFC-enabled handsets (Wikipedia)


Handling Android screen orientation and splash screen

Sometimes, tiny little things can give the developer a big headache. I was developing a webview application to cater for both portrait and landscape layout. I created layout-land folder and create the same XML with webview there, but referencing to different splash screen image. The problem is, When I rotate, the app will restart. I tried to search thru stackoverflow for many hours, found this. Most of them suggested me to add "android:configChanges="orientation|screenSize"" in AndroidManifest like below.

            < android:name=".MyActivity"
            android:label="@string/title_activity_myactivity"
            android:configChanges="orientation|screenSize" android:screenOrientation="unspecified" >
But, my application target was 2.2 and it doesn't allow me to add "orientation" in "android:configChanges". Later, I changed the application to target 4.0, only then it works. The app won't restart anymore when the orientation changes. And overwrite the following method in the Activity.

//must override this, if not, screen orientation will make the app force close
    @Override
    public void onConfigurationChanged(Configuration newConfig) {
        // TODO Auto-generated method stub
        super.onConfigurationChanged(newConfig);
    }
Some other things i learnt from my previous project:

1. To remove the title bar from the app (AndroidManifest.xml)

        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@android:style/Theme.NoTitleBar" >
2. the great splash screen example: Android Splashscreen done right

Normally, webview loading is a little slow. And if you create the splashscreen as a separate activity, it won't solve the problem of webview loading slow. The above example use "SplashDialog", which will load webview at the same time as the splashscreen.

*Note: the above orientation handling doesn't seem to work with jquery mobile