Android双SIM卡API

ada*_*ker 27 android sim-card

关于通过Android SDK访问双SIM卡功能有几个问题,所有这些问题都通过简短的声明来回答,这些声明在Android中不支持这些功能.

尽管如此,双SIM卡手机确实存在,而像MultiSim这样的应用似乎能够以某种独立于制造商的方式检测到这一点.

所以,从这个承认开始,让我试着提出一些更尖锐的问题:

  • "Android SDK不支持多个SIM功能"是否意味着这些功能不存在,或者尝试使用它们只是一个坏主意?
  • 是否有提供SIM卡信息的Android内容提供商或内部包(com.android ...)?(TelephonyManager,据我在文档和代码中看到的,没有提到多个SIM卡)
  • 是否有任何制造商向开发人员公开多个SIM功能的报告?
  • 如果我要从制造商那里寻找未记录的功能,我该怎么做呢?

(顺便说一下,所有这一切只是为了实现这个算法:用SIM卡1发送短信;如果发送失败,切换到SIM卡2并重新发送消息.)

Tap*_*ave 9

您可以使用MultiSim库从多SIM卡设备获取详细信息.

每张SIM卡的可用信息:IMEI,IMSI,SIM序列号,SIM状态,SIM运营商代码,SIM运营商名称,SIM国家iso,网络运营商代码,网络运营商名称,网络运营商iso,网络类型,漫游状态.

只需在应用级Gradle脚本中添加以下行:

dependencies {
    compile 'com.kirianov.multisim:multisim:2.0@aar'
}
Run Code Online (Sandbox Code Playgroud)

不要忘记在AndroidManifest.xml中添加所需的权限:

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
Run Code Online (Sandbox Code Playgroud)

在代码中使用类似的代码:

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);
Run Code Online (Sandbox Code Playgroud)


Gau*_*hah 8

有3个不同的类别......

  1. 功能支持和记录
  2. 功能可用且未记录
  3. 功能不可用

因此双SIM卡功能可用,但未记录,因此未得到官方支持.

说它并不意味着它不可用,它只是意味着android(或谷歌甚至manufaturer)不负责支持你的应用程序功能.

但它可能只是起作用,因为例如联系人是类似的事情.

然后你可能会问每个人如何知道这些功能,如果它没有记录的话.嘿android是开源的...去查看代码并找到它自己.多数民众赞成开发人员的确如此.


mgc*_*ioa 5

Android在API 22之前不支持多种SIM功能.但是从Android 5.1(API级别22)开始,Android开始支持多个SIM卡.有关Android文档的更多详情

参考本原始答案