как получить контактный номер в Android? - PullRequest
1 голос
/ 15 января 2012

Я пытаюсь получить контактные номера в моем приложении, но оно показывает только идентификатор и отображаемое имя. Кто-нибудь может это исправить? Я не знаю, как получить контактные телефоны. Я только пытаюсь получить контактные номера, чтобы не добавлять контактные номера.

package com.data;

import android.app.Activity;
import android.content.Intent;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.provider.ContactsContract;
import android.util.Log;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.CompoundButton.OnCheckedChangeListener;
import android.widget.ListView;
import android.widget.SimpleCursorAdapter;

public final class ContactManager extends Activity
{

public static final String TAG = "ContactManager";

private Button mAddAccountButton;
private ListView mContactList;
private boolean mShowInvisible;
private CheckBox mShowInvisibleControl;

/**
 * Called when the activity is first created. Responsible for initializing the UI.
 */
@Override
public void onCreate(Bundle savedInstanceState)
{
    Log.v(TAG, "Activity State: onCreate()");
    super.onCreate(savedInstanceState);
    setContentView(R.layout.contact_manager);

    // Obtain handles to UI objects
//    mAddAccountButton = (Button) findViewById(R.id.addContactButton);
    mContactList = (ListView) findViewById(R.id.contactList);
    mShowInvisibleControl = (CheckBox) findViewById(R.id.showInvisible);

    // Initialize class properties
    mShowInvisible = false;
    mShowInvisibleControl.setChecked(mShowInvisible);

    // Register handler for UI elements

    mShowInvisibleControl.setOnCheckedChangeListener(new OnCheckedChangeListener() {
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
            Log.d(TAG, "mShowInvisibleControl changed: " + isChecked);
            mShowInvisible = isChecked;
            populateContactList();
        }
    });

    // Populate the contact list
    populateContactList();
}



private void populateContactList() {

    Cursor cursor = getContacts();
   String[] pno=new String[cursor.getCount()];
      if(cursor.getCount()>0)
      {
        int i=0;
        if(cursor.moveToFirst())
        {
            do
            {
        pno[i++]=(String)cursor.getString(0).toString() +"  "+       (String)cursor.getString(1);

            }while(cursor.moveToNext());
        }

    }

    ArrayAdapter<String> adapter=new ArrayAdapter<String>(ContactManager.this,android.R.layout.simple_list_item_1,pno);
    mContactList.setAdapter(adapter);


}


private Cursor getContacts()
{
    // Run query
    Uri uri = ContactsContract.Contacts.CONTENT_URI;
    String[] projection = new String[] {
            ContactsContract.Contacts._ID,
            ContactsContract.Contacts.DISPLAY_NAME,
    };
    String selection = ContactsContract.Contacts.IN_VISIBLE_GROUP + " = '" +
            (mShowInvisible ? "0" : "1") + "'";
    String[] selectionArgs = null;
    String sortOrder = ContactsContract.Contacts.DISPLAY_NAME + " COLLATE LOCALIZED ASC";

    return managedQuery(uri, projection, selection, selectionArgs, sortOrder);
}

}

Ответы [ 3 ]

1 голос
/ 15 января 2012

Измените запрос projection, включив в него также столбец ContactsContract.Contacts.HAS_PHONE_NUMBER.

Затем внутри цикла do-while вы можете выполнить:

String contactId = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID));
String hasPhone = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER));
if (Integer.parseInt(hasPhone) > 0) {
    Cursor phones = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,  null, ContactsContract.CommonDataKinds.Phone.CONTACT_ID + "=" + contactId, null, null);
    String phoneNumber;
    while (cursor.moveToNext()) { //iterate over all contact phone numbers
        phoneNumber = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
    }
    phones.close();
}
0 голосов
/ 15 января 2012

Вы должны использовать Phone Uri или новый PhoneLookUp Uri, чтобы получить отображаемое имя и все номера телефонов с идентификатором контакта.

http://developer.android.com/reference/android/provider/ContactsContract.PhoneLookup.html

0 голосов
/ 15 января 2012

Вам необходимо использовать другой контент-провайдер uri.Я укажу вам один мой ответ, чтобы я не повторял себя в stackoverflow: https://stackoverflow.com/a/8646827/1108032. В этом ответе я выбираю имя из номера телефона, но я действительно верю, что вы можете легко вернуть его.

...