> MSISDN基本上是电话号码
>不是IMSI
我需要进一步了解的是:
> MSISDN号码是否烧录(存储在SIM卡中)?如果是,所有提供商都确保SIM卡中有MSISDN信息?如果没有,要澄清,编程代码中没有一个可以获取MSISDN号码?
有些人建议以下面的代码获取MSISDN.但是如果设备中未设置“我的电话号码”,则代码将返回null.另一方面,如果设置了它,它将返回“我的电话号码”.
因此,问题是:“我的电话号码”等于MSISDN?
TelephonyManager.getLine1Number(); – >适用于Android
Phone.getDevicePhoneNumber(真); – >对于黑莓
>作为上面的代码,返回String数据是从设备本身还是从SIM卡中获取的?
解决方法
> MSISDN可以存储在SIM卡上,但大多数网络提供商(南非的所有提供商)都不会将SIMIS存储在SIM卡上.这有几个原因,最显着的是:
>动态MSISDN分配:首次使用预付卡时,MSISDN有时会被分配.这意味着网络有一个可用的MSISDN池,并且每当一个新的预付费SIM卡在线时分配它们.这意味着,当SIM卡发货时,它们还没有MSISDN,这意味着在发送SIM卡之前无法存储MSISDN.某些网络在一段时间不活动之后会过期MSISDN分配,特别是当它们的可用数量很低时,并将这些数字返回到可用池.
>移动号码可移植性:有些国家允许移动用户保留他们的MSISDN,但是改变网络.这意味着MSISDN将从用于1个网络的SIM卡移动到另一个网络的SIM卡.
因此,用户通常最终将SIM卡上的MSISDN条目设置为空白.用户仍然可以将MSISDN存储在SIM卡上,但这也允许它们存储任意数字,并且不能保证被设置,甚至不是用户实际的电话号码.
2.您询问有关提取存储在SIM卡中的号码的电话.如果号码未设置,您将无法获取,如果用户的号码设置错误,则您将收到不正确的详细信息.
正确的是,这个字符串是从SIM卡中取出的.
检测MSISDN的唯一半可靠的方法是通过WAP / WEB,当移动操作符在头文件中包含MSISDN(您可以做一些webview的欺骗,看看哪些头是通过的) – 但是你只看到这些网络支持它,如果用户在移动数据 – 即如果用户在WiFi上将不起作用.
我可以想到的另一个机制(唯一可以保证的机制)是通过USSD会话,因为你总是从操作符那里得到正确的MSISDN,但是我还没有找到一种方式来编程地打开USSD会话和阅读响应(至少在Android中).我有一个USSD服务,其唯一的输出是MSISDN,但不幸的是,这还没有被证明对我有用.