Is there an android shell or adb command that I could use to get a device's IMEI/MEID?
I figured out how to do this. You need to run adb shell dumpsys iphonesubinfo
in a shell. It will give you a bit more than you need, but it will also return IMEI or MEID number.
Edit (2017): In Android 5.0+ you'll need to use the service call
command. More info about that can be found here.
adb shell dumpsys iphonesubinfo not working since Android 5.0 Lollipop
You can always just use service call
command to call the service methods.
here are the TRANSACTION CODES for the iphonesubinfo
service in android-5.0.0_r1
:
1 getDeviceId
2 getDeviceIdForSubscriber
3 getImeiForSubscriber
4 getDeviceSvn
5 getSubscriberId
6 getSubscriberIdForSubscriber
7 getGroupIdLevel1
8 getGroupIdLevel1ForSubscriber
9 getIccSerialNumber
10 getIccSerialNumberForSubscriber
11 getLine1Number
12 getLine1NumberForSubscriber
13 getLine1AlphaTag
14 getLine1AlphaTagForSubscriber
15 getMsisdn
16 getMsisdnForSubscriber
17 getVoiceMailNumber
18 getVoiceMailNumberForSubscriber
19 getCompleteVoiceMailNumber
20 getCompleteVoiceMailNumberForSubscriber
21 getVoiceMailAlphaTag
22 getVoiceMailAlphaTagForSubscriber
23 getIsimImpi
24 getIsimDomain
25 getIsimImpu
26 getIsimIst
27 getIsimPcscf
28 getIsimChallengeResponse
29 getIccSimChallengeResponse
Most methods require root
. But fortunately getDeviceId
(the one you need to get device's IMEI/MEID) does not.
For proper parsing of the service call
command output on the device side and without external dependencies see my answer here
Also read Calling Android services from ADB shell for more details.
Android -- get MEID from JNI
I believe Dalvik implements all the same JNI interfaces that the JVM does, so while it's a bit fiddly, it's perfectly possible to make calls from native code through JNI to arbitrary Java classes and methods.
/* assuming you already have */
JNIEnv *env;
jobject context;
/* then call (with error-checking) */
jclass cls = (*env)->FindClass(env, "android/context/Context");
jmethodId mid = (*env)->GetMethodID(env, context_cls, "getSystemService",
"(Ljava/lang/String;)Ljava/lang/Object;");
jfieldID fid = (*env)->GetStaticFieldID(env, cls, "TELEPHONY_SERVICE",
"Ljava/lang/String;");
jstring str = (*env)->GetStaticObjectField(env, cls, fid);
jobject telephony = (*env)->CallObjectMethod(env, context, mid, str);
cls = (*env)->FindClass(env, "android/telephony/TelephonyManager");
mid =(*env)->GetMethodID(env, cls, "getDeviceId", "()Ljava/lang/String;");
str = (*env)->CallObjectMethod(env, telephony, mid);
jsize len = (*env)->GetStringUTFLength(env, str);
char* deviceId = calloc(len + 1, 1);
(*env)->GetStringUTFRegion(env, str, 0, len, deviceId);
(*env)->DeleteLocalRef(env, str);
/* to get a string in deviceId */
Get IMEI via ADB only for old Huawei models
You could display it on screen:
adb am start -a android.intent.action.CALL -d tel:*%2306%23
Related Topics
Wallpaper Not Properly Fit on Device Screen
How to Find the Android Version Name Programmatically
How to Change Images on Imageview After Some Interval
Differencebetween Sendstickybroadcast and Sendbroadcast in Android
How to Provide Different Android App Icons for Different Gradle Buildtypes
The Key Must Be an Application-Specific Resource Id
How to Use an Android Handler to Update a Textview in the UI Thread
Getlaunchintentforpackage Is Null for Some Apps
Android - Margins Specified in Custom Style Not Taking Effect
How to Create and Save a Screenshot from a Surfaceview
How to Get Meid and Imei Information Using Adb Commands on Android 5.0
How to Remove Extra Padding or Margin in Material Design Button