导航:首页 > 操作系统 > android双卡开发

android双卡开发

发布时间:2025-05-03 01:02:06

android 编程时双卡发短信怎样选着csdn

android双卡双待资料

[java] view plainprint?
try {

Class<?> smsManagerClass = null;
Class[] divideMessagePamas = { String.class };
Class[] sendMultipartTextMessagePamas = { String.class,String.class, ArrayList.class, ArrayList.class,ArrayList.class, int.class };
Method divideMessage = null;
Method sendMultipartTextMessage = null;
smsManagerClass = Class.forName("android.telephony.SmsManager");
Method method = smsManagerClass.getMethod("getDefault", new Class[]{});
Object smsManager = method.invoke(smsManagerClass, new Object[]{});
divideMessage = smsManagerClass.getMethod("divideMessage",divideMessagePamas);
sendMultipartTextMessage = smsManagerClass.getMethod("sendMultipartTextMessage", sendMultipartTextMessagePamas);
ArrayList<String> magArray = (ArrayList<String>) divideMessage.invoke(smsManager, content);

sendMultipartTextMessage.invoke(smsManager,phone, "", magArray, null, null,phoneType);
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InvocationTargetException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SecurityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (NoSuchMethodException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

通过反射发现sendMultipartTextMessage多了一个phoneType的参数,这个参数就是这只用GMS还是CDMA卡发送的。phoneType获取方法,iTelephony.getActivePhoneType();//1=GSM,2=CDMA

判断手机是否为双卡:

[java] view plainprint?
public static void initIsDoubleTelephone(Context context){
boolean isDouble = true;
Method method = null;
Object result_0 = null;
Object result_1 = null;
TelephonyManager tm = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
try {
//只要在反射getSimStateGemini 这个函数时报了错就是单卡手机(这是我自己的经验,不一定全正确)
method = TelephonyManager.class.getMethod("getSimStateGemini",new Class[] { int.class });
//获取SIM卡1
result_0 = method.invoke(tm, new Object[] { new Integer(0) });
//获取SIM卡1
result_1 = method.invoke(tm, new Object[] { new Integer(1) });
} catch (SecurityException e) {
isDouble = false;
e.printStackTrace();
//System.out.println("1_ISSINGLETELEPHONE:"+e.toString());
} catch (NoSuchMethodException e) {
isDouble = false;
e.printStackTrace();
//System.out.println("2_ISSINGLETELEPHONE:"+e.toString());
} catch (IllegalArgumentException e) {
isDouble = false;
e.printStackTrace();
} catch (IllegalAccessException e) {
isDouble = false;
e.printStackTrace();
} catch (InvocationTargetException e) {
isDouble = false;
e.printStackTrace();
} catch (Exception e){
isDouble = false;
e.printStackTrace();
//System.out.println("3_ISSINGLETELEPHONE:"+e.toString());
}
SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(context);
Editor editor = sp.edit();
if(isDouble){
//保存为双卡手机
editor.putBoolean(ISDOUBLE, true);
//保存双卡是否可用
//如下判断哪个卡可用.双卡都可以用
if(result_0.toString().equals("5") && result_1.toString().equals("5")){
if(!sp.getString(SIMCARD, "2").equals("0") && !sp.getString(SIMCARD, "2").equals("1")){
editor.putString(SIMCARD, "0");
}
editor.putBoolean(SIMCARD_1, true);
editor.putBoolean(SIMCARD_2, true);
} else if(!result_0.toString().equals("5") && result_1.toString().equals("5")){//卡二可用
if(!sp.getString(SIMCARD, "2").equals("0") && !sp.getString(SIMCARD, "2").equals("1")){
editor.putString(SIMCARD, "1");
}
editor.putBoolean(SIMCARD_1, false);
editor.putBoolean(SIMCARD_2, true);
} else if(result_0.toString().equals("5") && !result_1.toString().equals("5")){//卡一可用
if(!sp.getString(SIMCARD, "2").equals("0") && !sp.getString(SIMCARD, "2").equals("1")){
editor.putString(SIMCARD, "0");
}
editor.putBoolean(SIMCARD_1, true);
editor.putBoolean(SIMCARD_2, false);
} else {//两个卡都不可用(飞行模式会出现这种种情况)
editor.putBoolean(SIMCARD_1, false);
editor.putBoolean(SIMCARD_2, false);
}
}else{
//保存为单卡手机
editor.putString(SIMCARD, "0");
editor.putBoolean(ISDOUBLE, false);
}
editor.commit();
}

❷ android如何读取双卡双待手机SIM卡信息

点击设置里,进入双卡和移动网络,点击一卡或二卡,里面有个启动点击启动,下面有运营商网络设置,选取运营商,选择移动或联通,电信就可以了就可以获得SIM卡信息了。

❸ Android怎么判断是双卡双待

Android怎么判断是双卡双待的具体方法为:

1、Android平台是一个多样型的平台,不同的手机获取ITelephony接口不同,用一种方法实现双卡双待管理是不可取的。只有针对不同的手机分析出一套管理的方案,该方案实现难度大,因为需要各个厂家的SDK的资料。为了实现该功能,需要整合各个厂家的SDK的资料。

2、为了更好的管理双卡双待的问题,新建一个双卡双待模块静态库,其它项目引用便是,项目如图:

3、AbsSim是抽象类,负责实现手机操作的类。不同的厂家继承该类实现各自的接口。AbsSim信息如下:

public abstract class AbsSim implements IDualDetector { //抽象基类

protected final String TAG = getClass().getSimpleName();

protected ArrayList<SimSlot> mSimSlots = new ArrayList<SimSlot>();

protected boolean mIsDualSimPhone = false;

protected String mCallLogExtraField = "";


public abstract String getSimPhoneNumber(int paramInt); // 返回手机号码


public abstract int getDataState(int paramInt);// 返回数据状态


public abstract String getIMSI(int paramInt);// 返回手机标识


public abstract String getIMSI(int paramInt, Context paramContext);// 返回手机标识


public abstract int getPhoneState(int paramInt);// 返回手机状态


public abstract boolean isServiceAvaliable(int paramInt);// 服务是否可用


public abstract boolean isSimStateIsReady(int paramInt);// 卡是否在使用


public abstract int getSimOperator(int paramInt);// 服务商(电信、移动、联通)


protected abstract Object getITelephonyMSim(int paramInt);// 获取操作接口


protected abstract Object getMSimTelephonyManager(int paramInt);// 获取操作接口


}

4、这是利用java 反射机制操作Android隐藏的类,很好的解决了双卡双待的问题。

阅读全文

与android双卡开发相关的资料

热点内容
永劫无间每次打开只能解压 浏览:185
crc值每次编译 浏览:575
打开手机加密视频 浏览:30
怎么确定压缩机坏 浏览:879
编程软件图标上有个ps 浏览:471
微观经济学pdf平狄克 浏览:194
android上传文件到ftp 浏览:938
怎么下载福网app 浏览:849
女生学编程怎么样 浏览:748
易语言服务器如何发送文件数据 浏览:266
我的世界服务器如何强迫玩家退出 浏览:486
血氧信号的检测算法 浏览:733
安卓反编译练习 浏览:879
博图编程软件帮助语言 浏览:403
苹果的原神是安卓什么游戏 浏览:229
linux禁用命令 浏览:363
优盘加密手机可读 浏览:990
安徽全球卫星时钟服务器云空间 浏览:985
mapreduce编程实战单词 浏览:618
陕西网络服务器地址 浏览:216