我想获得手机号码设备。我在Alex Volovoy's This Link
之后使用了以下代码参考TelephonyManager tMgr = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE);
String mPhoneNumber = tMgr.getLine1Number();
Log.d("msg", "Phone : "+mPhoneNumber);
Logcat中的OUTPUT:
02-01 17:22:45.472: D/msg(29102): Phone : null
02-01 17:22:45.472: D/msg(29102): Phone :
我还获得 <uses-permission android:name="android.permission.READ_PHONE_STATE"/>
AndroidManifest.xml
的许可
那我该怎么办?有错误吗?
答案 0 :(得分:16)
要从设备获取电话号码,首先您必须在设备上设置自己的电话号码,只需:
设置 - &gt;关于手机 - &gt;状态 - &gt;我的电话号码
每个运营商都没有SIM卡上的电话号码,例如印度的Sim在任何内存中都没有电话号码,所以我们无法通过这些连接获得电话号码。但是,一些国家和运营商已经在SIM卡上存储了电话号码,我们可以获得这些号码。为了使其适用于所有设备,我们可以采用两种策略:
为了避免这个问题,我们可以捕获错误并相应地工作。像:强>
TelephonyManager tMgr = (TelephonyManager)
ShowMyLocation.this.getSystemService(Context.TELEPHONY_SERVICE);
String MyPhoneNumber = "0000000000";
try
{
MyPhoneNumber =tMgr.getLine1Number();
}
catch(NullPointerException ex)
{
}
if(MyPhoneNumber.equals("")){
MyPhoneNumber = tMgr.getSubscriberId();
}
答案 1 :(得分:0)
当电话管理器返回空白时,我有另一个解决方案来获取电话号码。我希望它会帮助你。
以下是我的示例代码:
public static final String main_data[] = {
"data1", "is_primary", "data3", "data2", "data1", "is_primary", "photo_uri", "mimetype"
};
object object = (TelephonyManager) context.getSystemService("phone");
if (!TextUtils.isEmpty(((TelephonyManager) (object)).getLine1Number())) {
}
object = context.getContentResolver().query(Uri.withAppendedPath(android.provider.ContactsContract.Profile.CONTENT_URI, "data"), main_data, "mimetype=?", new String[]{
"vnd.android.cursor.item/phone_v2"
}, "is_primary DESC");
if (object != null) {
do {
if (!((Cursor) (object)).moveToNext()) {
break;
}
if (s.equals("vnd.android.cursor.item/phone_v2")) {
String s1 = ((Cursor) (object)).getString(4);
boolean flag1;
if (((Cursor) (object)).getInt(5) > 0) {
flag1 = true;
} else {
flag1 = false;
}
Toast.makeText(SampleActivity.this, "Phone:-" + s1, Toast.LENGTH_LONG).show();
}
} while (true);
((Cursor) (object)).close();
}
另外,请不要忘记添加这两项权限:
<uses-permission android:name="android.permission.READ_CONTACTS" />
<uses-permission android:name="android.permission.READ_PROFILE" />