Android 双卡双待手机

薛鹏举 发布于 2012/09/10 15:50
阅读 1K+
收藏 1

【Gopher China万字分享】华为云的Go语言云原生实战经验!>>>

原生android不支持双开双待的功能,有没有人知道一些定制的android手机(比如moto)双卡双待的api使用?如何实现在打电话或发短信时选择用哪个卡来操作?
加载中
0
as11051105
as11051105

我也想知道

0
薛鹏举

目前有了解决方案,但是只能根据卡的通信类型判断,如CDMA卡与GSM卡,可以判断并使用哪个卡拨出或发短信。如果两个卡类型一致就判断不出来了

0
tankxxl
tankxxl

怎么解决的?

0
b
bmaple陈

有没有demo

0
薛鹏举

通过反编译双卡手机的frameWork层代码,查看该手机TelephonyManager,研究一下它是如何用2卡拨打的,具体如何反编译请自己google。

下面是HTC一款双卡手机的例子:(注:每款双卡手机的framework不一样,如下的例子只是一款HTC的双卡手机的双卡使用方法。)

先找出如何检查俩个卡状态的方法,确定俩个卡都存在后,再找出如何拨打的。

public static int checkSimState(TelephonyManager tm, Context context) {
		boolean phone1 = false;
		boolean phone2 = false;
		if (tm != null) {
			try {
				Class clazz = tm.getClass();
				Method getIccState = clazz.getMethod("getIccState", int.class);
				int state = (Integer) getIccState.invoke(tm, 1);
				if (state == TelephonyManager.SIM_STATE_READY) {
					phone1 = true;
				}

				state = (Integer) getIccState.invoke(tm, 2);
				if (state == TelephonyManager.SIM_STATE_READY) {
					phone2 = true;
				}
			} catch (Exception e) {
				sendInfoToUmeng(context);
			}
		}

		if (phone1 && phone2) {
			return 3;
		}else if(phone1&&!phone2){
			return 1;
		}else if(!phone1&&phone2){
			return 2;
		}

		return 0;
	}
检查2卡是否存在,如果存在在拨打时调用该方法:

gsm.setOnClickListener(new View.OnClickListener() {

				@Override
				public void onClick(View arg0) {
					String scheme = isUriNumber(number) ? SCHEME_SIP
							: SCHEME_TEL;
					Intent intent = new Intent(Intent.ACTION_CALL, Uri
							.fromParts(scheme, number, null));
					intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK
							| Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS);
					intent.putExtra("phone_type", 1);
					startActivity(intent);
					finish();
				}
			});

			cdma.setOnClickListener(new View.OnClickListener() {

				@Override
				public void onClick(View v) {
					String scheme = isUriNumber(number) ? SCHEME_SIP
							: SCHEME_TEL;
					Intent intent = new Intent(Intent.ACTION_CALL, Uri
							.fromParts(scheme, number, null));
					intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK
							| Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS);
					intent.putExtra("phone_type", 2);
					startActivity(intent);
					finish();
				}
			});
希望对大家有帮助,还是那句话,双卡这个东西各个厂商做的都不一样,想要做双卡只能反编译。。。(麻烦着呢)

返回顶部
顶部