【记录】 Android 双卡手机获取IMEI等

本文介绍了一种用于获取双SIM卡手机相关信息的方法,包括IMEI、运营商编号及数据连接状态等,并提供了一个示例实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

转载自:点击打开链接,http://www.codesky.net/showhtml/26778.htm   

原网址demo下载:点击打开链接,http://blog.youkuaiyun.com/u012398902/article/details/52489626

主体代码如下:

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;// IMEI
private String imeiSIM2;//IMEI
private String iNumeric1;//sim1 code number
private String iNumeric2;//sim2 code number
private boolean isSIM1Ready;//sim1
private boolean isSIM2Ready;//sim2
private String iDataConnected1 = "0";//sim1 0 no, 1 connecting, 2 connected, 3 suspended.
private String iDataConnected2 = "0";//sim2
private 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);
}
}

}

测试代码如下:

mPlayer = (TextView) findViewById(R.id.player);
   CTelephoneInfo telephonyInfo = CTelephoneInfo.getInstance(this);
   telephonyInfo.setCTelephoneInfo();   
   String imeiSIM1 = telephonyInfo.getImeiSIM1();
   String imeiSIM2 = telephonyInfo.getImeiSIM2();   
   String iNumeric1  = telephonyInfo.getINumeric1();
   String iNumeric2  = telephonyInfo.getINumeric2();   
   boolean network1  = telephonyInfo.isDataConnected1();
   boolean network2  = telephonyInfo.isDataConnected2();   
   boolean isSIM1Ready = telephonyInfo.isSIM1Ready();
   boolean isSIM2Ready = telephonyInfo.isSIM2Ready();   
   boolean isDualSIM = telephonyInfo.isDualSim();
mPlayer.setText(" IME1 : " + imeiSIM1 + "\n" +
           " IME2 : " + imeiSIM2 + "\n" +
           " network1 : " + network1 + "\n" +
           " network2 : " + network2 + "\n" +
           " iNumeric1 : " + iNumeric1 + "\n" +
           " iNumeric2 : " + iNumeric2 + "\n" +
           " IS DUAL SIM : " + isDualSIM + "\n" +
           " IS SIM1 READY : " + isSIM1Ready + "\n" +
           " IS SIM2 READY : " + isSIM2Ready + "\n");


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值