TelecomManager Android

时间:2016-07-22 21:34:03

标签: android

我正在使用此功能从SIM卡中取出手机,

TelecomManager tm = (TelecomManager) getSystemService(TELEPHONY_SERVICE);
String simphonenumber = tm.getLine1Number();

但我得到一个错误:

'getLine1Number(PhoneAccountHandle) in TelecomManager cannot be applied to     0'

我也无法访问:

tm.getDeviceId();
tm.getSimSerialNumber();

2 个答案:

答案 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)。