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