- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在开展一个项目,将 Android 手机中收到的短信同步到在线数据库。我可以通过调用 getOriginatingAddress()
方法获取发件人的号码。但是我找不到任何解决方案来确定我设备中的哪个 SIM 卡收到了短信。
我在网上搜索了相关内容,但找不到解决这个问题的方法。有什么办法可以得到短信接收者的号码吗?
最佳答案
我在解决这个问题上遇到了一些困难,最后我找到了解决方案,尽管我只在 api 级别 22 以上对其进行了测试。
您必须查看接收到的 Intent 中的额外信息。在我的例子中, Intent 的额外 Bundle 中有两个有用的键:“slot”和“subscription”。
例子如下:
public class IncomingSms extends BroadcastReceiver {
public void onReceive(Context context, Intent intent) {
// Retrieves a map of extended data from the intent.
Bundle bundle = intent.getExtras();
int slot = bundle.getInt("slot", -1);
int sub = bundle.getInt("subscription", -1);
/*
Handle the sim info
*/
}
}
我没有在 bundle 中找到有关 key 的文档,因此这可能取决于设备/制造商,我可以想象 key 是不同的或类似的东西。您可以通过转储 bundle 的 key 集来验证这一点:
Set<string> keyset = bundle.keySet();
编辑:
有关 SIM 卡电话号码的信息可能根本不可用,因为如果它没有存储在 SIM 卡上,则可能无法查询,但所有其他信息都可以通过 SubscriptionManager 获得:
SubscriptionManager manager = SubscriptionManager.from(appContext);
SubscriptionInfo = manager.getActiveSubscriptionInfo(sub);
或
SubscriptionInfo = manager.getActiveSubscriptionInfoForSimSlotIndex(slot);
SubscriptionInfo 中有一些有用的信息例如电话号码,如我上面所解释的,不能保证可用。
我还忘了提到,stock android 中的双 SIM 卡支持是从 api 级别 22 添加的。
关于android - 如何找出哪个 SIM 卡在双卡 Android 设备中收到短信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35968766/
我一直在寻找适用于 Android 的 Android 双卡双待 API,但或多或少我一无所获。据我了解,Google/Android 没有公共(public) API,只有每个制造商的具体实现。
我看到很多帖子说android文档不支持双卡手机。 在我的例子中,我想识别设备,以便我可以将其 IMEI 存储在我的服务器上。但是因为手机可能有双卡,将使用代码 android.telephony.T
我是一名优秀的程序员,十分优秀!