2012-01-15 65 views
1

我正在嘗試在我的應用程序中提取聯繫人號碼,但它只顯示ID和顯示名稱。任何人都可以糾正它?我不知道如何獲取聯繫號碼。我只想獲取聯繫號碼而不添加聯繫號碼。如何在android中獲取聯繫人號碼?

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

}

回答

0

您需要使用其他內容提供商的URI。我會指給你一個我的答案,這樣我就不會在計算器中重複自己:https://stackoverflow.com/a/8646827/1108032。在這個答案中,我從電話號碼中取出了名字,但我真的相信你可以輕鬆地恢復它。

1

修改您的查詢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(); 
} 
相關問題