gpt4 book ai didi

Android双SIM卡API

转载 作者:IT老高 更新时间:2023-10-28 22:03:23 32 4
gpt4 key购买 nike

有几个关于通过 Android SDK 访问双 SIM 卡功能的问题,所有这些问题都通过简短的陈述来回答,即 Android 不支持此类功能。

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

所以,从那个确认开始,让我试着问一些更尖锐的问题:

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

(顺便说一句,这一切的目的只是为了实现这个算法:用SIM卡1发送短信;如果发送失败,则切换到SIM卡2并以这种方式重新发送消息。)

最佳答案

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

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

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

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);

用法:

// get info about slot 'i' by methods:
multiSimTelephonyManager.getSlot(i).

强制更新信息:

// force update phone info (needed on devices above android 6.0 after confirm permissions request)
multiSimTelephonyManager.update();

权限请求的句柄(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();
}
}

关于Android双SIM卡API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11305407/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com