2014-02-27 129 views
1

我正在使用應用程序,在此我必須搜索聯繫人,當按鈕單擊並從手機聯繫人中選擇一個聯繫人時。最後,我想將其設置爲edittext。我可以從手機通訊錄中搜索聯繫人,但無法從手機通訊錄中獲取聯繫人。搜索聯繫人並從android手機聯繫人中獲取聯繫人號碼

活動:

searchBtn.setOnClickListener(new OnClickListener() { 

@Override 
public void onClick(View v) { 
// TODO Auto-generated method stub 
Intent intent = new Intent(Intent.ACTION_GET_CONTENT); 
intent.setType(ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE); 
startActivityForResult(intent,1); 

} 
}); 
@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
// TODO Auto-generated method stub 
super.onActivityResult(requestCode, resultCode, data); 

if(requestCode==RESULT_OK){ 
Uri contactData = data.getData(); 
Cursor cursor = managedQuery(contactData, null, null, null, null); 
cursor.moveToFirst(); 
String number = cursor.getString(cursor.getColumnIndexOrThrow 
(ContactsContract.CommonDataKinds.Phone.NUMBER)); 

//contactName.setText(name); 
ephoneNumber.setText(number); 
//contactEmail.setText(email); 
} 
} 

回答

6

爲StartActivityForResult第一組意向篩選

private void pickContact() { 
    Intent pickContactIntent = new Intent(Intent.ACTION_PICK, Uri.parse("content://contacts")); 
    pickContactIntent.setType(Phone.CONTENT_TYPE); // Show user only contacts w/ phone numbers 
    startActivityForResult(pickContactIntent, PICK_CONTACT_REQUEST); 
} 

然後用結果處理什麼意圖攜帶來自本地聯繫人應用

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    // Check which request it is that we're responding to 
    if (requestCode == PICK_CONTACT_REQUEST) { 
     // Make sure the request was successful 
     if (resultCode == RESULT_OK) { 
      // Get the URI that points to the selected contact 
      Uri contactUri = data.getData(); 
      // We only need the NUMBER column, because there will be only one row in the result 
      String[] projection = {Phone.NUMBER}; 

      // Perform the query on the contact to get the NUMBER column 
      // We don't need a selection or sort order (there's only one result for the given URI) 
      // CAUTION: The query() method should be called from a separate thread to avoid blocking 
      // your app's UI thread. (For simplicity of the sample, this code doesn't do that.) 
      // Consider using CursorLoader to perform the query. 
      Cursor cursor = getContentResolver() 
        .query(contactUri, projection, null, null, null); 
      cursor.moveToFirst(); 

      // Retrieve the phone number from the NUMBER column 
      int column = cursor.getColumnIndex(Phone.NUMBER); 
      String number = cursor.getString(column); 

      // Do something with the phone number... 
     } 
    } 
} 

看到另一個參考鏈接

Link 1 Link 2

1

巴拉特,

都需要這樣的權限 -

android:name="android.permission.READ_CONTACTS"/> 

然後,呼叫聯繫人選擇器

Intent intent = new Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI); 

然後,

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

switch (reqCode) { 
case (PICK_CONTACT) : 
    if (resultCode == Activity.RESULT_OK) { 
    Uri contactData = data.getData(); 
    Cursor c = managedQuery(contactData, null, null, null, null); 
    if (c.moveToFirst()) { 
     String name = c.getString(c.getColumnIndexOrThrow(People.NAME)); 
     // TODO Whatever you want to do with the selected contact name. 
    } 
    } 
    break; 
    } 
} 

,或者在其他的方式可以使用

Cursor cursor = null; 
try { 
    cursor = context.getContentResolver().query(Phone.CONTENT_URI, null, null, null, null); 
    int contactIdIdx = cursor.getColumnIndex(Phone._ID); 
    int nameIdx = cursor.getColumnIndex(Phone.DISPLAY_NAME); 
    int phoneNumberIdx = cursor.getColumnIndex(Phone.NUMBER); 
    int photoIdIdx = cursor.getColumnIndex(Phone.PHOTO_ID); 
    cursor.moveToFirst(); 
    do { 
     String idContact = cursor.getString(contactIdIdx); 
     String name = cursor.getString(nameIdx); 
     String phoneNumber = cursor.getString(phoneNumberIdx); 
     //... 
    } while (cursor.moveToNext()); 
} catch (Exception e) { 
    e.printStackTrace(); 
} finally { 
    if (cursor != null) { 
     cursor.close(); 
    } 
} 

上述方案是簡單和聯繫號碼獲取工作。

1

試試這個

CursorLoader cursorLoader = new CursorLoader(mActivity, 
      CallLog.Calls.CONTENT_URI, null, null, null, null); 
managedCursor = cursorLoader.loadInBackground(); 
int number = managedCursor.getColumnIndex(CallLog.Calls.NUMBER); 
int name = managedCursor.getColumnIndex(CallLog.Calls.CACHED_NAME); 
String conTactnumber=managedCursor.getString(number);    
String contactname=managedCursor.getString(name); 

set permission 
<uses-permission android:name="android.permission.READ_CONTACTS" > 
</uses-permission>