我正在使用此功能从SIM卡中取出手机,
TelecomManager tm = (TelecomManager) getSystemService(TELEPHONY_SERVICE);
String simphonenumber = tm.getLine1Number();
但我得到一个错误:
'getLine1Number(PhoneAccountHandle) in TelecomManager cannot be applied to 0'
我也无法访问:
tm.getDeviceId();
tm.getSimSerialNumber();
答案 0 :(得分:0)
您是否在清单中声明了此权限?
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
您正在使用的方法是SDK的唯一一部分, 并且仅适用于存储在SIM卡上的号码的设备, 只有一些运营商才这样做。对于所有其他运营商,您将不得不这样做 要求用户手动输入电话号码,因为号码是 根本不存储在您可以检索的设备上的任何位置 它
答案 1 :(得分:0)
您需要传递PhoneAccountHandle作为tm.getLine1Number();
有很多方法可以使用phoneAccountHandle:
PhoneAccountHandle phoneAccountHandle = tm.getSimCallManager();
或
ComponentName componentName = new ComponentName("package name here", "your connection service class here");
PhoneAccountHandle phoneAccountHandle = new PhoneAccountHandle(componentName, "just a label");`
然后你可以调用tm.getLine1Number(phoneAccountHandle);
但是要注意空指针异常(如果它没有找到任何数字,它会返回null)。