2025-02-10

 在我開發的每日短信程序中,有一個這樣的功能,就是點擊‘選擇聯系人’按鈕,會出現聯系人選擇界面,點擊選擇聯系人後,會將這個聯系人的手機號碼加入一個文本框中。關於這個程序介紹和界面可以參看:我的第一個Android程序
   關於選擇聯系人,可以直接使用Android的內置聯系人實現,網上也有些例子,但是有些代碼有點問題,有的在模擬器正常,手機上不行,有的手機OK,模擬器不行。原因是在聯系人URI使用瞭硬編碼,你可以使用ContactsContract.Contacts.CONTENT_URI常量來增強移植性。
   選擇聯系人部分代碼如下:
Java代碼 
mChooseContactButton.setOnClickListener(new Button.OnClickListener(){ 
 
    @Override 
    public void onClick(View v) { 
        // TODO Auto-generated method stub 
        Intent intent = new Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI); 
 
        SMSSendActivity.this.startActivityForResult(intent, 1); 
    } 
     
}); 

    接下來就是獲取選擇聯系人的手機號碼,首先需要通過函數onActivityResult獲取選擇的聯系人,然後通過Content Provider查詢聯系人的手機號碼,代碼片段如下:
Java代碼 
@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    // TODO Auto-generated method stub 
    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); 
 
        c.moveToFirst(); 
 
        String phoneNum=this.getContactPhone(c); 
        mPhoneNum.setText(phoneNum); 
         
        } 
         
        break; 
         
        } 
 
    } 
 
     
     
     

 
 
//獲取聯系人電話 
private String getContactPhone(Cursor cursor) 

 
    int phoneColumn = cursor.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER);   
    int phoneNum = cursor.getInt(phoneColumn);  
    String phoneResult=""; 
    //System.out.print(phoneNum); 
    if (phoneNum > 0) 
    { 
    // 獲得聯系人的ID號 
        int idColumn = cursor.getColumnIndex(ContactsContract.Contacts._ID); 
        String contactId = cursor.getString(idColumn); 
            // 獲得聯系人的電話號碼的cursor; 
            Cursor phones = getContentResolver().query( 
            ContactsContract.CommonDataKinds.Phone.CONTENT_URI, 
            null, 
            ContactsContract.CommonDataKinds.Phone.CONTACT_ID+ " = " + contactId,  
            null, null); 
            //int phoneCount = phones.getCount(); 
            //allPhoneNum = new ArrayList<String>(phoneCount); 
            if (phones.moveToFirst()) 
            { 
                    // 遍歷所有的電話號碼 
                    for (;!phones.isAfterLast();phones.moveToNext()) 
                    {                                             
                        int index = phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER); 
                        int typeindex = phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.TYPE); 
                        int phone_type = phones.getInt(typeindex); 
                        String phoneNumber = phones.getString(index); 
                        switch(phone_type) 
                        { 
                            case 2: 
                                phoneResult=phoneNumber; 
                            break; 
                        } 
                           //allPhoneNum.add(phoneNumber); 
                    } 
                    if (!phones.isClosed()) 
                    { 
                           phones.close(); 
                    } 
            } 
    } 
    return phoneResult; 

   這樣,就可以實現通過選擇聯系人來獲取它的手機號碼瞭,代碼是我從我程序代碼直接拷貝的,需要做部分修改,但是絕對可用。

作者“外行看熱鬧”
 

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *