我正在开发一个需要获取IMSI的应用程序。我用:
TelephonyManager mTelephonyMgr = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
String imsi = mTelephonyMgr.getSubscriberId();
适用于大多数手机,但有些手机仅返回6位而不是15位。这是错误的。
任何人都知道以编程方式检索IMSI的另一种方法吗?其他APIS?方法
此致
答案 0 :(得分:7)
根据this post,你可以使用
String imsi = android.os.SystemProperties.get(android.telephony.TelephonyProperties.PROPERTY_IMSI);
但SystemProperties无法直接访问,因此您需要在此问题的答案中使用其中一个技巧:Where is android.os.SystemProperties
您可能还需要SystemProperties
source。
答案 1 :(得分:5)
第一次
IMSI通常以15表示 数字长,但可以更短
short指的是14位数的旧版imsi模型。这与此无关
第二:它不取决于手机而是取决于网络
它返回6位数,因为该特定手机上的Android软件配置为仅返回imsi的非个人识别部分 - 定义国家和网络运营商的前6位数字
答案 2 :(得分:5)
此代码在我的项目中运作良好。
TelephonyManager telephonyManager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
String imsi = telephonyManager.getSubscriberId();
并且不要忘记许可:
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>