4

我有一部双卡安卓手机。我正在使用自定义广播接收器,它可以毫无问题地读取传入消息。我想知道是否有办法找出哪个 sim 收到了消息。

4

2 回答 2

1

您可以使用 TelephonyManager 获取活动 sim 的信息。例如,它是序列号。

TelephonyManager telephoneMgr = (TelephonyManager) ctx.getSystemService(Context.TELEPHONY_SERVICE);

String simSerial = telephoneMgr.getSimSerialNumber();

您还可以获得 line1Number,如果您的网络运营商已将您的号码放入其中,您可以将其与 SMS 消息中 to> 字段中的号码进行比较。

String phoneNumber = telephoneMgr.getLine1Number();

希望能帮助到你

于 2012-12-17T13:28:24.147 回答
0

我在这个问题上遇到了一些非常困难的时间,最后我找到了一个解决方案,尽管我只在 api 22 级以上对其进行了测试。

您必须查看收到的意图中的额外信息。在我的例子中,额外的 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
                */
            }
}

我没有找到有关此的文档,因此这可能取决于设备/制造商,我可以想象密钥是不同的或类似的东西。您可以通过转储捆绑包的密钥集来验证这一点:

Set<string> keyset = bundle.keySet();
于 2016-08-11T12:43:42.850 回答