hai*_*zal 8 sms android telephonymanager
我正在开发一个项目,将Android手机中收到的短信同步到在线数据库.我可以通过调用getOriginatingAddress()
方法获取发件人的号码.但我找不到任何解决方案来确定我的设备中的哪个SIM卡收到了短信.
我在网上搜索了它,但找不到解决这个问题的方法.有没有办法获得短信接收者的号码?
Lev*_*sök 15
我有一些非常困难的时间来解决这个问题,最后我找到了一个解决方案,尽管我只在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
*/
}
}
Run Code Online (Sandbox Code Playgroud)
我没有找到关于Bundle中的密钥的文档,所以这可能是设备/制造商的依赖,我可以想象密钥是不同的或类似的东西.您可以通过转储捆绑包的密钥集来验证这一点:
Set<string> keyset = bundle.keySet();
Run Code Online (Sandbox Code Playgroud)
编辑:
有关SIM卡电话号码的信息可能根本不可用,因为如果SIM卡未存储在SIM卡上,则可能无法查询,但所有其他信息都可通过SubscriptionManager获得:
SubscriptionManager manager = SubscriptionManager.from(appContext);
SubscriptionInfo = manager.getActiveSubscriptionInfo(sub);
Run Code Online (Sandbox Code Playgroud)
要么
SubscriptionInfo = manager.getActiveSubscriptionInfoForSimSlotIndex(slot);
Run Code Online (Sandbox Code Playgroud)
SubscriptionInfo中有一些有用的信息,例如电话号码,如上所述,我们不保证可以使用这些信息.
我也忘了提到,从api级别22添加了双重SIM支持库存android.
归档时间: |
|
查看次数: |
9180 次 |
最近记录: |