如何从android中的给定电话号码获取电话号码类型标签

时间:2016-04-23 09:22:26

标签: android android-contacts phone-number

我试图打印联系人姓名(例如“Jose”)&联系电话号码类型值(例如“家庭”,“工作”等),来自电话联系人的特定电话号码(例如“9600515852”)

为此我使用了波纹管代码。但我只能获得联系人姓名。当我想要获取电话号码类型时,我正在收到应用程序崩溃。

请指导我。

String number = getContactName(this, "9600515852");
Toast.makeText(getApplicationContext(),number,Toast.LENGTH_LONG).show();

private String getContactName(Context context, String number) {
String TAG ="" ;
String name = null, label=null;
int type=0;

// define the columns I want the query to return
String[] projection = new String[] { ContactsContract.PhoneLookup.DISPLAY_NAME,ContactsContract.PhoneLookup._ID };

// encode the phone number and build the filter URI
   Uri contactUri = Uri.withAppendedPath(ContactsContract.PhoneLookup.CONTENT_FILTER_URI, Uri.encode(number));

// query time
Cursor cursor = context.getContentResolver().query(contactUri, projection, null, null, null);

        if(cursor != null) {
            if (cursor.moveToFirst()) {
                name =      cursor.getString(cursor.getColumnIndex(ContactsContract.PhoneLookup.DISPLAY_NAME));
               // type = cursor.getInt(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.TYPE));
            } else {
                Log.v(TAG, "Contact Not Found @ " + number);
            }
            cursor.close();
        }
        return name+" - "+number;
    }

3 个答案:

答案 0 :(得分:1)

试试这个:

type = cursor.getString(cursor.getColumnIndex(ContactsContract.PhoneLookup.TYPE));

答案 1 :(得分:1)

使用

name = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));

而不是

name = cursor.getString(cursor.getColumnIndex(ContactsContract.PhoneLookup.DISPLAY_NAME));

在我的情况下,在按钮上单击从联系人应用程序获取联系信息是这样的。它正在运作

调用意图

Intent intent = new Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI);
intent.setType(ContactsContract.CommonDataKinds.Phone.CONTENT_TYPE);
startActivityForResult(intent, 1);

处理结果

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    switch (requestCode) {
        case (1):
            if (resultCode == Activity.RESULT_OK) {
                Uri contactData = data.getData();

                Cursor c = managedQuery(contactData, null, null, null, null);

                if (c.moveToFirst()) {
                    String id = c.getString(c.getColumnIndex(ContactsContract.Contacts._ID));
                    String name = c.getString(c.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));

                    String resultedPhoneNum = pop.getContactNumber(id, MainActiv.this);
                    String resultedName=pop.getContactName(name, MainActiv.this);

                    contactName.setText(resultedName);
                }
            }
            break;
        }
    }

希望有所帮助!

答案 2 :(得分:1)

正确的方法是在投影查询中加入 Phone.TYPE 。它仅包含 DISPLAY_NAME ID ,并且因为没有字段而崩溃,因为"输入"包含在您的查询中。

这肯定会解决您的问题。