-->

Android双SIM卡APIAndroid双SIM卡API(Android dual SIM ca

2019-06-14 13:27发布

大约有通过Android SDK访问的双卡功能的几个问题,所有这些都回答简短发言,这样的功能在Android中不支持的。

尽管如此,双卡手机确实存在,像应用MultiSim的似乎能够在某种独立于厂商的方式来检测这一点。

因此,与确认开始,让我试着问一些尖锐的问题:

  • 难道“Android SDK中不支持多SIM卡功能”意味着这些功能不存在,或者说,它仅仅是一个坏主意,尝试使用它们?
  • 是否有一个Android的内容提供商或内包装(com.android ......),它提供的SIM卡信息? (TelephonyManager,据我可以在文档和代码中看到,有没有提到的多个SIM卡)
  • 是否有任何生产厂家暴露多个SIM功能,开发人员的任何报告?
  • 如果我找无证功能从制造商,我会怎样呢?

(顺便说一句,这一切的点仅仅是为了实现该算法:用SIM卡1发送SMS;如果传送失败,切换到SIM卡2并重新发送消息方式)

Answer 1:

Android不API 22之前支持多个SIM卡的功能,但在Android 5.1(API级别22)日起,Android的开始支持多个SIM。 有关详细信息Android文档

从这个参考原来的答案



Answer 2:

您可以使用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();
    }
}


Answer 3:

有3个不同的类别...

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

因此,双卡双待的功能也有,但没有记录,因此没有正式支持。

话虽如此,这并不意味着它不会是可用的,它只是意味着机器人(或为此事谷歌甚至manufaturer)不承担责任来支持你的应用程序的功能。

但它可能只是工作,例如为触点是类似的事情。

然后,您可能会问了如何将每个人都知道的功能如果万一它不是记录..嘿Android是开源..去看看代码,并发现它自己。 那是什么我想多SIM开发商做到了。



Answer 4:

 <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                //

    }
   }
}

这是双卡的工作也和你不需要调用这个接收器,因为它会远程运行



文章来源: Android dual SIM card API