大约有通过Android SDK访问的双卡功能的几个问题,所有这些都回答简短发言,这样的功能在Android中不支持的。
尽管如此,双卡手机确实存在,像应用MultiSim的似乎能够在某种独立于厂商的方式来检测这一点。
因此,与确认开始,让我试着问一些尖锐的问题:
- 难道“Android SDK中不支持多SIM卡功能”意味着这些功能不存在,或者说,它仅仅是一个坏主意,尝试使用它们?
- 是否有一个Android的内容提供商或内包装(com.android ......),它提供的SIM卡信息? (TelephonyManager,据我可以在文档和代码中看到,有没有提到的多个SIM卡)
- 是否有任何生产厂家暴露多个SIM功能,开发人员的任何报告?
- 如果我找无证功能从制造商,我会怎样呢?
(顺便说一句,这一切的点仅仅是为了实现该算法:用SIM卡1发送SMS;如果传送失败,切换到SIM卡2并重新发送消息方式)
Android不API 22之前支持多个SIM卡的功能,但在Android 5.1(API级别22)日起,Android的开始支持多个SIM。 有关详细信息Android文档
从这个参考原来的答案
您可以使用MultiSim
图书馆摆脱多SIM设备的详细信息。
从每个SIM卡可用的信息:IMEI,IMSI,SIM卡序列号,SIM卡状态,SIM操作员代码,SIM运营商的名称,SIM国家标准化组织,网络运营商代码,网络运营商名称,网络运营商异,网络类型,漫游状态。
只需添加下面的线在你的应用程序级的摇篮脚本:
dependencies {
compile 'com.kirianov.multisim:multisim:2.0@aar'
}
别忘了在AndroidManifest.xml中添加所需的权限:
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
在代码中使用类似的代码:
MultiSimTelephonyManager multiSimTelephonyManager = new MultiSimTelephonyManager(this);
// or
MultiSimTelephonyManager multiSimTelephonyManager = new MultiSimTelephonyManager(this, new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
updateInfo();
}
});
public void updateInfo() {
// for update UI
runOnUiThread(new Runnable() {
@Override
public void run() {
multiSimTelephonyManager.update();
useInfo();
}
}
// for update background information
multiSimTelephonyManager.update();
useInfo();
}
public void useInfo() {
// get number of slots:
if (multiSimTelephonyManager != null) {
multiSimTelephonyManager.sizeSlots();
}
// get info from each slot:
if (multiSimTelephonyManager != null) {
for(int i = 0; i < multiSimTelephonyManager.sizeSlots(); i++) {
multiSimTelephonyManager.getSlot(i).getImei();
multiSimTelephonyManager.getSlot(i).getImsi();
multiSimTelephonyManager.getSlot(i).getSimSerialNumber();
multiSimTelephonyManager.getSlot(i).getSimState();
multiSimTelephonyManager.getSlot(i).getSimOperator();
multiSimTelephonyManager.getSlot(i).getSimOperatorName();
multiSimTelephonyManager.getSlot(i).getSimCountryIso();
multiSimTelephonyManager.getSlot(i).getNetworkOperator();
multiSimTelephonyManager.getSlot(i).getNetworkOperatorName();
multiSimTelephonyManager.getSlot(i).getNetworkCountryIso();
multiSimTelephonyManager.getSlot(i).getNetworkType();
multiSimTelephonyManager.getSlot(i).isNetworkRoaming();
}
}
}
// or for devices above android 6.0
MultiSimTelephonyManager multiSimTelephonyManager = new MultiSimTelephonyManager(MyActivity.this, broadcastReceiverChange);
Usage:
// get info about slot 'i' by methods:
multiSimTelephonyManager.getSlot(i).
Force update info
// force update phone info (needed on devices above android 6.0 after confirm permissions request)
multiSimTelephonyManager.update();
Handle of permissions request (6.0+)
// in YourActivity for update info after confirm permissions request on devices above android 6.0
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (multiSimTelephonyManager != null) {
multiSimTelephonyManager.update();
}
}
有3个不同的类别...
- 支持的功能和记录
- 可用的和功能未记录
- 不可用的功能
因此,双卡双待的功能也有,但没有记录,因此没有正式支持。
话虽如此,这并不意味着它不会是可用的,它只是意味着机器人(或为此事谷歌甚至manufaturer)不承担责任来支持你的应用程序的功能。
但它可能只是工作,例如为触点是类似的事情。
然后,您可能会问了如何将每个人都知道的功能如果万一它不是记录..嘿Android是开源..去看看代码,并发现它自己。 那是什么我想多SIM开发商做到了。
<receiver
android:name=".SimChangedReceiver"
android:enabled="true"
android:process=":remote" >
<intent-filter>
<action android:name="android.intent.action.SIM_STATE_CHANGED" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</receiver>
SimChangedReceiver class
public class SimChangedReceiver extends BroadcastReceiver {
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (action.equalsIgnoreCase("android.intent.action.SIM_STATE_CHANGED")) {
Log.d("SimChangedReceiver", "--> SIM state changed <--");
// do code whatever u want to apply action //
}
}
}
这是双卡的工作也和你不需要调用这个接收器,因为它会远程运行