【记录】 Android 双卡手机获取IMEI等
来源:互联网 发布:宁波数据分析招聘 编辑:程序博客网 时间:2024/06/05 14:26
1、前言
项目中遇到上传手机imei的问题。如果手机是双卡,目前只能获取默认的imei
TelephonyManager mTelephonyMgr = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE); deviceId = mTelephonyMgr.getDeviceId();
上网搜了很多代码终于找到一个有效的办法。
地址: 原创地址
3、防止原创地址不可用,现在贴代码
import java.lang.reflect.Method;import android.content.Context;import android.telephony.TelephonyManager;import android.text.TextUtils;public class CTelephoneInfo {private static final String TAG = CTelephoneInfo.class.getSimpleName();private String imeiSIM1;// IMEIprivate String imeiSIM2;//IMEIprivate String iNumeric1;//sim1 code number private String iNumeric2;//sim2 code numberprivate boolean isSIM1Ready;//sim1private boolean isSIM2Ready;//sim2private String iDataConnected1 = "0";//sim1 0 no, 1 connecting, 2 connected, 3 suspended.private String iDataConnected2 = "0";//sim2private static CTelephoneInfo CTelephoneInfo;private static Context mContext;private CTelephoneInfo() {}public synchronized static CTelephoneInfo getInstance(Context context){ if(CTelephoneInfo == null) { CTelephoneInfo = new CTelephoneInfo(); } mContext = context; return CTelephoneInfo;}public String getImeiSIM1() { return imeiSIM1;}public String getImeiSIM2() { return imeiSIM2;}public boolean isSIM1Ready() { return isSIM1Ready;}public boolean isSIM2Ready() { return isSIM2Ready;}public boolean isDualSim(){return imeiSIM2 != null;}public boolean isDataConnected1(){if(TextUtils.equals(iDataConnected1, "2")||TextUtils.equals(iDataConnected1, "1"))return true;else return false;}public boolean isDataConnected2(){if(TextUtils.equals(iDataConnected2, "2")||TextUtils.equals(iDataConnected2, "1"))return true;else return false;}public String getINumeric1(){return iNumeric1;}public String getINumeric2(){return iNumeric2;}public String getINumeric(){if(imeiSIM2 != null){if(iNumeric1 != null && iNumeric1.length() > 1)return iNumeric1;if(iNumeric2 != null && iNumeric2.length() > 1)return iNumeric2;}return iNumeric1;}public void setCTelephoneInfo(){TelephonyManager telephonyManager = ((TelephonyManager) mContext.getSystemService(Context.TELEPHONY_SERVICE)); CTelephoneInfo.imeiSIM1 = telephonyManager.getDeviceId(); CTelephoneInfo.imeiSIM2 = null; try { CTelephoneInfo.imeiSIM1 = getOperatorBySlot(mContext, "getDeviceIdGemini", 0); CTelephoneInfo.imeiSIM2 = getOperatorBySlot(mContext, "getDeviceIdGemini", 1); CTelephoneInfo.iNumeric1 = getOperatorBySlot(mContext, "getSimOperatorGemini", 0); CTelephoneInfo.iNumeric2 = getOperatorBySlot(mContext, "getSimOperatorGemini", 1); CTelephoneInfo.iDataConnected1 = getOperatorBySlot(mContext, "getDataStateGemini", 0); CTelephoneInfo.iDataConnected2 = getOperatorBySlot(mContext, "getDataStateGemini", 1); } catch (GeminiMethodNotFoundException e) { e.printStackTrace(); try { CTelephoneInfo.imeiSIM1 = getOperatorBySlot(mContext, "getDeviceId", 0); CTelephoneInfo.imeiSIM2 = getOperatorBySlot(mContext, "getDeviceId", 1); CTelephoneInfo.iNumeric1 = getOperatorBySlot(mContext, "getSimOperator", 0); CTelephoneInfo.iNumeric2 = getOperatorBySlot(mContext, "getSimOperator", 1); CTelephoneInfo.iDataConnected1 = getOperatorBySlot(mContext, "getDataState", 0); CTelephoneInfo.iDataConnected2 = getOperatorBySlot(mContext, "getDataState", 1); } catch (GeminiMethodNotFoundException e1) { //Call here for next manufacturer's predicted method name if you wish e1.printStackTrace(); } } CTelephoneInfo.isSIM1Ready = telephonyManager.getSimState() == TelephonyManager.SIM_STATE_READY; CTelephoneInfo.isSIM2Ready = false; try { CTelephoneInfo.isSIM1Ready = getSIMStateBySlot(mContext, "getSimStateGemini", 0); CTelephoneInfo.isSIM2Ready = getSIMStateBySlot(mContext, "getSimStateGemini", 1); } catch (GeminiMethodNotFoundException e) { e.printStackTrace(); try { CTelephoneInfo.isSIM1Ready = getSIMStateBySlot(mContext, "getSimState", 0); CTelephoneInfo.isSIM2Ready = getSIMStateBySlot(mContext, "getSimState", 1); } catch (GeminiMethodNotFoundException e1) { //Call here for next manufacturer's predicted method name if you wish e1.printStackTrace(); } }}private static String getOperatorBySlot(Context context, String predictedMethodName, int slotID) throws GeminiMethodNotFoundException { String inumeric = null; TelephonyManager telephony = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE); try{ Class<?> telephonyClass = Class.forName(telephony.getClass().getName()); Class<?>[] parameter = new Class[1]; parameter[0] = int.class; Method getSimID = telephonyClass.getMethod(predictedMethodName, parameter); Object[] obParameter = new Object[1]; obParameter[0] = slotID; Object ob_phone = getSimID.invoke(telephony, obParameter); if(ob_phone != null){ inumeric = ob_phone.toString(); } } catch (Exception e) { e.printStackTrace(); throw new GeminiMethodNotFoundException(predictedMethodName); } return inumeric;}private static boolean getSIMStateBySlot(Context context, String predictedMethodName, int slotID) throws GeminiMethodNotFoundException { boolean isReady = false; TelephonyManager telephony = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE); try{ Class<?> telephonyClass = Class.forName(telephony.getClass().getName()); Class<?>[] parameter = new Class[1]; parameter[0] = int.class; Method getSimStateGemini = telephonyClass.getMethod(predictedMethodName, parameter); Object[] obParameter = new Object[1]; obParameter[0] = slotID; Object ob_phone = getSimStateGemini.invoke(telephony, obParameter); if(ob_phone != null){ int simState = Integer.parseInt(ob_phone.toString()); if(simState == TelephonyManager.SIM_STATE_READY){ isReady = true; } } } catch (Exception e) { e.printStackTrace(); throw new GeminiMethodNotFoundException(predictedMethodName); } return isReady;}private static class GeminiMethodNotFoundException extends Exception { /** * */private static final long serialVersionUID = -3241033488141442594L;public GeminiMethodNotFoundException(String info) { super(info); }}}
4、代码下载地址
代码下载地址
0 0
- 【记录】 Android 双卡手机获取IMEI等
- 【记录】 Android 双卡手机获取IMEI等
- 【记录】 Android 双卡手机获取IMEI等
- 【记录】 Android 双卡手机获取两个IMEI等
- Android 获取手机IMEI
- Android 获取双卡手机IMEI,IMSI,ICCID
- Android获取手机双IMEI号
- Android 获取手机的IMEI等设备信息
- Android 获取手机的IMEI等设备信息
- 关于android各种双卡手机获取imei,imsi的处理(mtk,展讯,高通等)
- android 获取手机IMEI号码
- android获取手机Imei码
- Android 获取手机IMEI
- Android 获取手机IMEI方法
- Android获取手机的IMEI
- Android 获取手机的厂商、型号、Android系统版本号、IMEI、当前系统语言等工具类
- Android 获取手机的厂商、型号、Android系统版本号、IMEI、当前系统语言等工具类
- Android 获取手机的厂商、型号、Android系统版本号、IMEI、当前系统语言等工具类
- 深度学习的概念、task及学习资料
- C语言入门-第二周:作业01
- NOI2.6基本算法之动态规划 踩方格 分析----标志物的作用
- was mutated while being enumerated数组遍历时被修改
- ubuntu 16.04搭建LAMP
- 【记录】 Android 双卡手机获取IMEI等
- Python: 百度API实现火星坐标转百度坐标
- 软键盘切换与隐藏
- JS按位非(~)运算符与~~运算符的理解分析
- MySQL(五)视图的操作
- 非常有用的git命令
- window 命令行查看、结束进程命令
- QPropertyAnimation渐隐动画
- touch 命令