android - 如何在android中获取联系电话?

标签 android contacts

我试图在我的应用程序中获取联系电话,但它只显示 ID 和显示名称。任何人都可以纠正它吗?我不知道如何获取联系电话。我只是想获取联系电话而不是添加联系电话。

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);
}

最佳答案

修改您的查询 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();
}

关于android - 如何在android中获取联系电话?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8868487/

相关文章:

android - 返回 Activity (但不是通过 finish())

java - 如何修复 Exchange Web 服务 (EWS) 的客户端协议(protocol)异常

android - react-native-plaid-link-sdk 错误 : Module was compiled with an incompatible version of Kotlin

java - 安卓 HAS_PHONE_NUMBER

android - 为什么在 google play store 上发布 android map 应用程序后 google map 不显示?

java - Android:在某些情况下禁用 AlertDialogBu​​ilder 的“确定”按钮

android - 如何获取 whatsapp 或 android 中其他应用程序中使用的联系人

android - Telegram 发送未保存的联系人

c++ - 我必须使用 C++ 中的链接列表构建联系人列表。目前无限循环第三个联系人

java - 显示对话框以从单击的电话号码添加新联系人