设备电话号码

时间:2013-08-19 20:33:56

标签: android android-2.3-gingerbread

我需要一种方法来捕获Android设备的电话号码,以便将其发送回我的网络API进行处理。

我已经阅读了inconsistencies函数和问题的getLine1Number,所以我的问题是这样的,是否有getLine1Number的任何编程替代方法,或者它是唯一可用的检索方法设备电话号码?

要明确,我不是在寻找UUID,这是一个手机应用程序,我需要用户的电话号码进行数据关联。

2 个答案:

答案 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权限。

相关问题