我需要一种方法来捕获Android设备的电话号码,以便将其发送回我的网络API进行处理。
我已经阅读了inconsistencies函数和问题的getLine1Number,所以我的问题是这样的,是否有getLine1Number
的任何编程替代方法,或者它是唯一可用的检索方法设备电话号码?
要明确,我不是在寻找UUID,这是一个手机应用程序,我需要用户的电话号码进行数据关联。
答案 0 :(得分:1)
这是获取电话号码的代码片段:
....
private final static String PHONE = "phone";
...
Map<String, String> contactDataMap = new HashMap<String, String>();
ContentResolver cr = context.getContentResolver();
Uri contactData = data.getData();
//Cursor cursor = managedQuery(contactData, null, null, null, null);
Cursor cursor = cr.query(contactData, null, null, null, null);
cursor.moveToFirst();
String name = cursor.getString(cursor.getColumnIndexOrThrow(ContactsContract.Contacts.DISPLAY_NAME));
String id = cursor.getString(cursor.getColumnIndexOrThrow(ContactsContract.Contacts._ID));
contactDataMap.put(NAME, (name != null)?name:"");
if (Integer.parseInt(cursor.getString(
cursor.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER))) > 0) {
Cursor pCur = cr.query(
ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
null,
ContactsContract.CommonDataKinds.Phone.CONTACT_ID +" = ?",
new String[]{id},
null);
while (pCur.moveToNext()) {
String number = pCur.getString(pCur.getColumnIndexOrThrow(ContactsContract.CommonDataKinds.Phone.NUMBER));
contactDataMap.put(PHONE, (number != null)?number:"");
break; // ? we want only 1 value
}
pCur.close();
}
通过这种方式,您可以获取电话号码。确保你有权限:
<uses-permission android:name="android.permission.READ_CONTACTS" />
答案 1 :(得分:1)
您可以使用getLine1Number()。它将返回第1行的电话号码字符串,例如GSM手机的MSISDN。如果不可用则返回null。
这是一个例子:
TelephonyManager tm = (TelephonyManager)getSystemService(TELEPHONY_SERVICE);
String number = tm.getLine1Number();
它需要在Androidmanifest.xml文件中添加READ_PHONE_STATE权限。