Thursday, December 18, 2014

IMEI အေၾကာင္း





IMEI (international Mobile Equipment Identity)  ဆိုတာ ဖုန္းတစ္လံုးစီရဲ့ သီးသန္႔ နံပါတ္ပါ၊ လူေတြရဲ့  မွတ္ပံုတင္နံပါတ္လိုပါပဲ၊ ဒါေပမယ့္ တစ္ခ်ိဳ႕က ဂဏန္း ၁၇ လံုးလဲရွိပါတယ္၊ ဖုန္းတစ္လံုးကို ေပ်ာက္ဆံုး သည္ျဖစ္ေစ အခိုးခံရသည္ျဖစ္ေစ ဖုန္းဘယ္ေနရာမွာ ရွိလဲဆိုတာကို  ေျခရာခံဖို႔ ျပန္ရွာဖို႔ အတြက္ IMEI ကိုသံုးပါတယ္၊ SIM card ကို မသံုးရျခင္း 
ကေတာ့ SIM card က ေဖ်က္ရလြယ္ထုတ္ရလြယ္လို႔ပါ၊ nv_data.bin ဖိုင္ ျပသနာ တက္ရင္ IMEI နံပါတ္ 
အတုေျပာင္းသြား တတ္သလို ပ်က္သြားတတ္ပါတယ္၊  အျခား ျပသနာေတြေၾကာင့္လဲျဖစ္ႏိုင္ပါတယ္၊ ဒီမွာေတာ့  သိသေလာက္ပဲေျပာသြားမယ္၊

ပထမ ဂဏန္း ၁၄ လံုးက GSM association က သတ္မွတ္ပီးေတာ့ ၊ ေနာက္ဆံုး ဂဏန္း တစ္လံုးကေတာ့ Luhn Formula သံုးပီးတြက္ထားပါတယ္၊ base-8 Math ကိုသံုးပီးတြက္ထားပါတယ္၊ 

IMEI ကိုရွာေတြ႔ႏိုင္တဲ့ ေနရာေတြ အေၾကာင္း
IMEI ကိုရွာႏိုင္တဲ့ နည္းလမ္းေတြအမ်ားႀကီးရွိပါတယ္၊ အလြယ္ရွာႏိုင္တဲ့ ေနရာေတြကေတာ့ ဖုန္ 
setting ထဲက about မွာရွာႏိုင္သလို ၊ Battery မွာလဲ ပါတယ္၊ ဖုန္း၀ယ္တုန္းက 
ဖုန္းထည့္တဲ့ သတၱာမွာလဲ ေတြ႔ႏိုင္တယ္၊ ဖုန္းမွာ *#06# ကိုႏွိပ္ပီးလဲရွာႏိုင္ပါတယ္၊
 
IMEI နံပါတ္ေတြကို ဘယ္လို အခ်ိန္မွာ အသံုးျပဳလဲ
Network ကိုထိန္းခ်ဳပ္ဖို႔ အတြက္ IMEI ကိုသံုးပါတယ္၊ Mobile Operator ေတြကို IMEI နံပါတ္ေတြကိုသံုးပီးေတာ့ ဖုန္းကို လွမ္းပိတ္ႏိုင္ပါတယ္၊ အထူးသျဖင့္ ဖုန္းအခိုးခံရတဲ့ အခါမ်ိဳးမွာပါ၊ ရာဇ၀တ္မွဴနဲ႔ စက္ဆက္တဲ့ လူေတြရဲ့ ဖုန္းနံပါတ္ေတြကိုလဲ ေျခရာခံဖို႔ အတြက္လဲသံုးၾကပါတယ္၊ ဒီလိုသံုးဖို႔ Phone Database တည္ေဆာက္သြားရမွာျဖစ္ပါတယ္၊
 
IMEI အေျပာင္းအလဲ
မ်ားမၾကာမွီ ကာလအပိုင္းအျခားမွာ GSM Association ေတြက IMEI ဂဏန္းေတြကို IMEISV နံပါတ္ေတြနဲ႔ ေျပာင္းသံုးသြားၾကမွာပါ၊ IMEI နဲ႔ IMEISV တို႔ ရဲ့ အသံုးျပဳမယ့္ လိုအပ္ခ်က္တူေပမယ့္ ဂဏန္း တြက္ခ်က္မူ စနစ္ေတာ့ကြာသြားပါလိမ့္မယ္၊ IMEISV မွာေတာ့ Luhn Formula သံုးပီး ဂဏန္း တြက္တဲ့ စနစ္ကိုေျပာင္းပီး Software version နံပါတ္ ႏွစ္လံုးကိုသံုးသြားပါလိမ့္မယ္၊
IMEI Number ေတြကို Application ေရးပီးရွာမယ္

အရင္ဆံုး Eclipse project တစ္ခုကိုတည္ေဆာက္လိုက္ပါ၊
XML ဖိုင္ထဲမွာ activity Layout ကို Linear Layout ေျပာင္းလိုက္ပါ၊ (မေျပာင္းလဲ ကိစၥမရွိဘူး) ၊ TextView တစ္ခုထည့္ပါ၊ TextView ရဲ့ ID ကို tvIMEI လို႔ေပးလိုက္ပါ၊ ေအာက္က အတိုင္း၊
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/LinearLayout1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".Main" >
<TextView
android:id="@+id/tvIMEI"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="TextView" />
</LinearLayout>


Main.java ဖိုင္ကိုတည္ေဆာက္ပီး Activity ကို Extends လုပ္ပါ၊ ပီးရင္ Extends လုပ္ထားတဲ့ Activity ကို override လုပ္ဖို႔ OnCreate Method ကို ေရးလိုက္ပါ၊ Parameter ထဲမွာ Data သိမ္းစည္းျခင္း သယ္ေဆာင္ျခင္းလုပ္ႏိုင္ Data Transfer လုပ္ႏိုင္တဲ့ Bundle Class အတြက္ Object တစ္ခုတည္ေဆာက္ပါ၊ OnCreate Method က Main Class ေပၚမွာ စတင္အလုပ္လုပ္တာနဲ႔ Bundle Class ရဲ့ Object ျဖစ္တဲ့ BM ကို အလုပ္စခိုင္းပါ၊ ေနာက္တစ္ဆင့္မွာ XML Layout ျဖစ္တဲ့ activity.xml ကို Main Class ရဲ့ Content အျဖစ္သတ္မွတ္ေပးပါ၊ လိုအပ္တဲ့ Bundle Package နဲ႔ Activity package (Class) ေတြကို Import လုပ္ေပးပါ၊ ေအာက္က အတိုင္း
package com.BM.getimei;
import android.os.Bundle;
import android.app.Activity;
public class Main extends Activity {
protected void onCreate(Bundle BM) {
super.onCreate(BM);
setContentView(R.layout.activity);
}
}
ေနာက္တစ္ဆင့္မွာ xml layout ဖိုင္ျဖစ္တဲ့ activity layout file ထဲက TextView ကို Refrences လုပ္ေပးပီး deviceIMEI ဆိုတဲ့ Variable တန္ဖိုး အျဖစ္ Assign လုပ္ပါ၊ TextView ကို Java ဖိုင္မွာသံုးပီျဖစ္တဲ့ အတြက္ Android Library ဖိုင္ထဲရွိ widget နဲ႔ ပက္သက္တဲ့ အုပ္စုထဲက TextView Class ကို import လုပ္ပါ၊ အသံုးျပဳတဲ့ Java Version နဲ႔ ပက္သက္တဲ့ Library ေတြကိုရွင္းရွင္းလင္းလင္းနားလည္ဖို႔က Developer ေတြအတြက္ အေရး ႀကီးပါတယ္၊ အားလံုးပီးရင္ေအာက္က အတိုင္း ဖိုင္ကိုရမယ္၊

package com.BM.getimei;
import android.os.Bundle;
import android.widget.TextView;
import android.app.Activity;

public class Main extends Activity {
protected void onCreate(Bundle BM) {
super.onCreate(BM);
setContentView(R.layout.activity);
TextView deviceIMEI = (TextView)findViewById(R.id.tvIMEI);
}
}

ေနာက္တစ္ဆင့္ မွာေတာ့ TelephonyManager Class ရဲ့ Instance Object အျဖစ္ telemanage ကိုတည္ေဆာက္ပီး System service ထဲက TELEPHONY_SERVICE ကိုရယူလို႔ရတဲ့ တန္ဖိုး အျဖစ္ Assign (သတ္မွတ္) ပါ၊ ေနာက္တစ္ဆင့္မွာ TextView ရဲ့ Object ျဖစ္တဲ့ deviceIMEI မွာရွိတဲ့ Text ကို ေျပာင္းေပးပါ၊ ေျပာင္းတဲ့ အခါ setText() Method ကိုသံုးပီးေျပာင္းပါ၊ setText Method ရဲ့ parameter ထဲမွာ BMgetIMEI() Method ကိုတည္ေဆာက္ပီး Parameter ထဲမွာ TelephonyManager Object ကိုထည့္ေပးလိုက္ပါ၊ ေအာက္က အတိုင္း
TelephonyManager telemanage = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE);
deviceIMEI.setText(BMgetIMEI(telemanage));
BMgetIMEI Method မတည္ေဆာက္ရေသးတြက္ အတြက္ onCreate Method ေအာက္မွာတည္ေဆာက္လိုက္ပါ၊ return တန္ဖိုး ေတြကို String အေနနဲ႔ ျပန္ေပးမွာျဖစ္လို႔ BMgetIMEI Method ရဲ့ Return Data Type ကို String ထားေပးရပါမယ္၊ Parameter ထဲမွာပါမယ့္ TelephnyManage ရယူပီး String Object တစ္ခုရဲ့ တန္ဖိုး အျဖစ္ Assign လုပ္ေပးပါ၊ ရလာတဲ့ တန္ဖိုးက ဗလာတန္ဖိုးဟုတ္မဟုတ္ စစ္ေဆးပါ၊ ဗလာျဖစ္ေနရင္ Not available အေျဖ ကို id တန္ဖိုး အျဖစ္ Assign လုပ္ပါ၊ ပီးရင္ PhoneType() ကိုရယူပီး Integer DataType Variable တစ္ခုထဲ Assign လုပ္ေပးပါ၊ ပီးရင္ Switch Statement နဲ႔ စစ္ပါ၊ အကယ္၍ TelophonyManager ကရလာမယ့္ PHONE_TYPE က ဗလာလား၊ GSM လား CDMA လားစစ္ပါ၊ ပီးရင္ id နဲ႔ တြဲပီးရလာတဲ့ အေျဖကို return လုပ္ေပးပါ၊ return လုပ္လိုက္တဲ့တန္ဖိုးက BMgetIMEI Method ကိုေခၚတဲ့ သူကိုျပန္ေပးလိမ့္မယ္၊ ေအာက္က အတိုင္း
int phoneType = phonyBM.getPhoneType();
switch(phoneType){
case TelephonyManager.PHONE_TYPE_NONE:
return "NONE: " + id;

case TelephonyManager.PHONE_TYPE_GSM:
return "GSM: IMEI=" + id;

case TelephonyManager.PHONE_TYPE_CDMA:
return "CDMA: MEID/ESN=" + id;

default:
return "UNKNOWN: ID=" + id;
}
}
ပီးရင္ AndroidManifest ဖိုင္ကိုဖြင့္ပီး READ_PHONE_STATE သံုးခြင့္ေတာင္းတဲ့ User Permession ကိုထည့္ပါ၊ ေအာက္က အတိုင္း <uses-permission android:name="android.permission.READ_PHONE_STATE"/>

အားလံုးပီးရင္ apk ဖိုင္အျဖစ္ Export ထုတ္ပါ၊ Run ၾကည့္ရင္ IMEI Number နဲ႔ Radio အမ်ိဳး အစား ရမယ္၊
ေရးထားတဲ့ Java Code ကို ဥပမာ ၾကည့္ခ်င္ရင္ xml ကုတ္ပါတဲ့ဖိုင္ကို ေအာက္က လင့္မွာေဒါင္းလုပ္လုပ္ႏိုင္ပါတယ္

http://goo.gl/JQn9iR


Java ဖိုင္ကိုေအာက္က လင့္မွာေဒါင္းလုပ္လုပ္ႏိုင္ပါတယ္
http://goo.gl/tSS7Av


Apk ဖိုင္ကိုေအာက္က လင့္မွာေဒါင္းလုပ္ရယူႏိုင္ပါတယ္

http://goo.gl/DI7clw



IMEI နံပါတ္ကို ဘယ္လိုျပန္ေရးမလဲ၊
Emulator က IMEI ကို အရင္ေျပာင္းၾကည့္ၾကမယ္၊ အရင္ဆံုး ေအာက္က လင့္က zip ဖိုင္ကိုေဒါင္းလုပ္လုပ္ပါ၊
http://goo.gl/yaID1T
ပီးရင္ zip ဖိုင္ေျဖလိုက္၊ ဒါဆိုရင္ ဖိုဒါတစ္ခုရလာမယ္ အဲ့ဒီံ ဖိုဒါထဲ၀င္ပီး XVI32.exe application ကို Run ပါ၊ ဒါဆိုရင္ XVI32 application ပြင့္လာမယ္၊ XVI32 ကေန Android SDK ထဲရွိ tools ထဲက emulator-arm.exe ဖိုင္ကိုလွမ္းဖြင့္ပါ၊ ရလာတဲ့ Emulator ဖိုင္ထဲက ကေန CGSM ကိုႏွိပ္ပီးရွာပါ၊ ရွာရခက္ရင္ Ctrl+F ႏွိပ္ပီးရွာပါ၊ ဒါဆိုရင္ CGSM စာလံုးကိုေတြ႔မယ္ အဲ့ဒီ့စာလံုးေနာက္က ဂဏန္း 15 လံုးကို ေျပာင္းလိုက္ပါ၊ ပီးရင္ သိမ္းလိုက္၊ ဒါ IMEI နံပါတ္ေျပာင္းတာပါပဲ၊ ေျပာင္းေနတဲ့ အခါမ်ာ emulator ကိုပိတ္ထားဖို႔လိုအပ္တယ္၊ ေျပာင္းပီးရင္ emulator ကိုျပန္ဖြင့္ၾကည့္ပါ၊ * # 0 6 # ႏွိပ္ပါ၊ ဒါဆိုရင္ေျပာင္းလိုက္တဲ့ IMEI နံပါတ္ကို ေတြ႔ရမယ္၊
ဖုန္းေတြအတြက္ IMEI ကိုဘယ္လိုေရးမလဲ

1. QPST version 2.7 build 323 ကို ေဒါင္းလုပ္လုပ္ပါ၊
2. ဖုန္းကို Root လုပ္ထားဖို႔လိုတယ္၊
3. ဖုန္းရဲ့ ေနာက္က Battery မွာပါတဲ့ IMEI နံပါတ္ကိုေရးခ်ပါ၊ (အျခားေနရာေတြလဲရွာေတြ႔ႏိုင္တယ္ ႀကိဳက္တဲ့ေနရာက ရွာ IMEI နံပါတ္ျဖစ္ဖို႔လိုတယ္)၊
4. ဖုန္းကို ဖြင့္လိုက္ပါ၊
5. ဖုန္း key ကိုဖြင့္ပီး *#22745927 ေဖ်ာက္ထားတဲ့ ဖိုဒါေတြကိုဖြင့္ပါ၊ (ေဖ်ာက္ထားတဲ့ ဖိုဒါေတြ Menu ေတြကို ျပန္ေဖာ္တာ ဖုန္းအမ်ိဳးအစား တစ္မ်ိဳး နဲ႔ တစ္မ်ိဳး မတူဘူး)၊
6. keypad ကိုျပန္ဖြင့္ပီး *#7284# ကို ႏွိပ္ပီး ေပၚလာမယ့္ menu### ကေန Qualcomm USB Setting ကိုေရြးပါ၊ ေပၚလာမယ့္ Menu ကေန RMNET + DM + MODEM ကို ေရြးပီး Ok ကိုႏွိပ္ပါ၊
7. ကြန္ျပဴတာကိုဖြင့္ပီး Device Manager ကိုဖြင့္ပါ၊
8. Ports (COM & LPT) တို႔ကိုေရြးပီး ဖိုင္ခ်ဲ႕ထုတ္ပါ၊ Mobile Brand နဲ႔ USB Serial Port (COM10) ဆိုတဲ့ နာပါတ္ကိုမွတ္ပါ၊ COM ေနာက္က နံပါတ္က တူခ်င္မွတူမယ္၊ ကိုယ့္နံပါတ္ကိုေရြး၊
9. QPST ကိုဖြင့္ပါ၊
10. Ports ကိုေရြးပီး new port ကို Add (ထည့္ပါ)၊
11. Port ႏွစ္ခုလံုးကို Port ေကာ Port Label ထဲေကာထည့္ပါ၊
12. QPST မွာ Clients ေကာ RF NV Item Manager ေကာကို Select မွတ္ပါ၊
13. RF NV Item Manager ထဲကေန Settings ကိုသြားပါ၊ ပီးရင္ Comport ကိုေရြးပါ၊
14. File Tab ေအာက္က Read Supported NV RF Items ေတြကိုေရြးပါ၊
15. DropDown Menu ကေန ကိုယ့္ရဲ့ ဖုန္း port ကိုေရြးပီး Ok ႏွိပ္ပါ၊
16. File ေအာက္က Read Support NV RF Items ကိုေရြးပါ၊
17. Items List ထဲက 550 နံပါတ္ကိုေရြးပါ၊
ဒါဆိုရင္ text ထည့္တဲ့ field 9 ခုကိုေတြ႔လိမ့္မယ္၊ ဒီေနရာမွာ IMEI ကိုထည့္ရမွာ၊ IMEI နံပါတ္ေတြကို စီထားတဲ့ ပံုက တကယ့္ကို အံ့ႀသဖို႔ေကာင္းပါတယ္၊ မေတြ႔ၾကံဳဖူးဘဲ လုပ္ရင္ အမွားေတြ႔သြားႏိုင္တယ္၊ ဒီေတာ့ ေအာက္က ေျပာတဲ့ အတိုင္း အတိအက်လုပ္ပါ၊
အရင္ဆံုး Hexardecimal (Hex) အကြက္မွာ အမွတ္ျခစ္ထားပါ၊
ဥပမာ ျပန္ေရးခ်င္တဲ့ IMEI နံပါတ္က 954091051099226 လို႔ဆိုၾကပါစို႔၊ ေရးတဲ့ အခါ စံုလိုက္ေျပာင္းျပန္ျပန္ေရးရတယ္၊ ပထမနဲ႔ ဒုတိယ က နဲနဲထူးတယ္၊
ပထမဆံုး text ထည့္မယ့္ အကြက္ထဲမွာ 8 ကိုေရးထည့္ပါ၊
ဒုတိယ အကြက္ထဲမွာ 9a ကိုေရးထည့္ပါ၊ a က ေနာက္ဆံုးစာလံုးကိုညြန္းပါတယ္၊
ေနာက္ထက္ text box ထဲမွာ 45 ကိုေရးထည့္၊ အမွန္က 54 လာတယ္၊ ဒါေပမယ့္ ေရးတဲ့ အခါ စံုလိုက္ေျပာင္းျပန္ေရးရမွာျဖစ္တဲ့ အတြက္ 45 လို႔ ေရးထည့္၊
ေနာက္ထက္ text box ထဲမွာ 90 ကိုေရးထည့္၊ အမွန္က 09 လာတယ္၊ ဒါေပမယ့္ ေရးတဲ့ အခါ စံုလိုက္ေျပာင္းျပန္ေရးရမွာျဖစ္တဲ့ အတြက္ 90 လို႔ ေရးထည့္၊
ေနာက္ထက္ text box ထဲမွာ 01 ကိုေရးထည့္၊ အမွန္က 10 လာတယ္၊ ဒါေပမယ့္ ေရးတဲ့ အခါ စံုလိုက္ေျပာင္းျပန္ေရးရမွာျဖစ္တဲ့ အတြက္ 01 လို႔ ေရးထည့္၊
ေနာက္ထက္ text box ထဲမွာ 15 ကိုေရးထည့္၊ အမွန္က 51 လာတယ္၊ ဒါေပမယ့္ ေရးတဲ့ အခါ စံုလိုက္ေျပာင္းျပန္ေရးရမွာျဖစ္တဲ့ အတြက္ 15 လို႔ ေရးထည့္၊
ေနာက္ထက္ text box ထဲမွာ 90 ကိုေရးထည့္၊ အမွန္က 09 လာတယ္၊ ဒါေပမယ့္ ေရးတဲ့ အခါ စံုလိုက္ေျပာင္းျပန္ေရးရမွာျဖစ္တဲ့ အတြက္ 90 လို႔ ေရးထည့္၊
ေနာက္ထက္ text box ထဲမွာ 29 ကိုေရးထည့္၊ အမွန္က 92 လာတယ္၊ ဒါေပမယ့္ ေရးတဲ့ အခါ စံုလိုက္ေျပာင္းျပန္ေရးရမွာျဖစ္တဲ့ အတြက္ 29 လို႔ ေရးထည့္၊
ေနာက္ထက္ text box ထဲမွာ 62 ကိုေရးထည့္၊ အမွန္က 26 လာတယ္၊ ဒါေပမယ့္ ေရးတဲ့ အခါ စံုလိုက္ေျပာင္းျပန္ေရးရမွာျဖစ္တဲ့ အတြက္ 62 လို႔ ေရးထည့္၊
အားလံုးေရးပီးရင္ Write NV ကိုတစ္ခ်က္ႏွိပ္လိုက္၊ Phone ကို Reboot လုပ္ပါ၊ MTP + ADB mode ကိုျပန္ေရာက္ေအာင္ *7284# ကို ျပန္ႏွိပ္ပါ၊
အကယ္၍ COM & LPT ကိုရွာရခက္ေနတယ္ဆိုရင္ေတာ့ cmd ကေန hdwwiz.exe ကိုရိုက္ဖြင့္ပါ၊ Hardware Wizard ကိုသြားဖို႔၊ ေရာက္ရင္ Next ကိုႏွိပ္ပီး ေနာက္စာမ်က္ႏွာမွာ Install the hardware that i manually select from a list(Advance) ပါတဲ့ Radio Button မွာ Check လုပ္ပီး Next ကိုႏွိပ္ပါ၊ Ports(COM & LPT ) ကိုရွာပီး ေရြးပါ၊ ပီးရင္ Next ႏွိပ္ပီးေရြးပါ၊ ဒါဆို IMEI ေျပာင္းပီးပီ
ADB အတြက္ Android SDK(software development Kit ) ကိုသံုး Phone အတြက္ Terminal ကိုသံုးပီး IMEI
ဖုန္းကို Root လုပ္ထားဖို႔လိုတယ္၊ Root Explorer ကိုသံုးပီး EFS ဖိုဒါထဲက imei ဖိုဒါကို imei ဖိုင္ကို ျပန္ယူႏိုင္ပါတယ္၊
၀န္ခံခ်က္
ဒီပိုစ့္မွာပါတဲ့ Java Code ေတြအားလံုးက Brighter Myanmar က develop လုပ္ထားတာျဖစ္ပီး ေအာက္ပိုင္းက ဖုန္း IMEI ေျပာင္းတဲ့ အပိုင္းကို Brighter Myanmar က Peoplearmy အဖြဲ႔ကေန ေလ့လာထားတာပါ၊ ဒီပိုစ့္က ျပည့္စံုျခင္း မရွိေသးပါဘူး၊ ေနာက္ပိုင္း အားရင္အားသလိုျပန္ေရးေပးပါမယ္၊

ဒီပိုုစ့္ကိုု pdf ဖိုုင္ အျဖစ္ ေဒါင္းလုုဒ္လုုပ္လိုု ပါက ေအာက္ပါ လင့္တြင္း ေဒါင္းလုုပ္ရယူႏုုိင္ပါသည္
http://goo.gl/oSykxQ

ေက်းဇူးျပဳ၍
ဒီပို႔စ္ကို BrighterMyanmar အဖြဲ႔႕ ေရးတာျဖစ္ပီး အကယ္၍ ပို႔စ္ မွာ အမွား ပါေနတာေတြ႔ရင္ ေက်းဇူးျပဳၿပီး brightermyanmar@gmail.com ကို ေၾကာင္းၾကားေပးပါခင္ဗ်ာ၊ ကၽြန္ေတာ္တို႔ ေသခ်ာ ျပန္စီစစ္ပီး ျပင္ပါ့မယ္၊
Credit To - BrighterMyanmar

No comments:

Post a Comment