我需要一种方法来捕获 Android 设备的电话号码,以便将其发送回我的 web api 进行处理。
我已经阅读了有关getLine1Number函数的问题和不一致之处,所以我的问题是,是否有任何程序替代方案 或者它是检索设备电话号码的唯一可用方法?getLine1Number
需要明确的是,我不是在寻找 UUID,这是一个手机应用程序,我需要用户电话号码来进行数据关联。
我需要一种方法来捕获 Android 设备的电话号码,以便将其发送回我的 web api 进行处理。
我已经阅读了有关getLine1Number函数的问题和不一致之处,所以我的问题是,是否有任何程序替代方案 或者它是检索设备电话号码的唯一可用方法?getLine1Number
需要明确的是,我不是在寻找 UUID,这是一个手机应用程序,我需要用户电话号码来进行数据关联。
这是获取电话号码的代码片段:
....
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" />
您可以为此使用 getLine1Number ()。它将返回第 1 行的电话号码字符串,例如 GSM 电话的 MSISDN。如果不可用,则返回 null。
这是一个例子:
TelephonyManager tm = (TelephonyManager)getSystemService(TELEPHONY_SERVICE);
String number = tm.getLine1Number();
它需要在 Androidmanifest.xml 文件中添加 READ_PHONE_STATE 权限。