2012-02-02 106 views
0

如何获取从QuickContact对话框打开应用程序的联系人数据?我正在开发一个短信应用程序,并且我想在应用程序启动时使用此联系人的号码填充收件人的字段。Android QuickContact对话框

回答

0

排序它。
要获取联系人的号码使用:

String launchContactNo = getIntent().getDataString(); 

这将返回:

smsto:5556 

(这是联系人的号码)

0

您可以在自己的列表视图中获取电话簿中的所有数据,以便您可以从列表中选择联系人并直接显示在收件人字段中。

这里是代码检索所有联系方式进入你自己的列表视图如下:

public class ContactListDemo extends ListActivity implements Runnable{ 

private List<Contact> contacts = null; 
private Contact con; 
private ContactArrayAdapter cAdapter; 
private ProgressDialog prog = null; 
private Context thisContext = this; 

/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    prog = ProgressDialog.show(this, "ContactListDemo", "Getting Contacts", true, false); 
    Thread thread = new Thread(this); 
    thread.start(); 
} 

public void run() { 
    if (contacts == null) 
    { 
     contacts = fillContactsList(); 
    } 
    handler.sendEmptyMessage(0); 
} 

private List<Contact> fillContactsList() { 
    List<Contact> tmpList = new ArrayList<Contact>(); 
    Cursor c = getContentResolver().query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null); 
    while(c.moveToNext()){ 
     String ContactID = c.getString(c.getColumnIndex(ContactsContract.Contacts._ID)); 
     String name = c.getString(c.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME)); 
     String hasPhone =c.getString(
       c.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER)); 
     if(Integer.parseInt(hasPhone) == 1){ 

      Cursor emails = getContentResolver().query(ContactsContract.CommonDataKinds.Email.CONTENT_URI,null, 
        ContactsContract.CommonDataKinds.Email.CONTACT_ID+ " = " + ContactID, null, null); 
      while (emails.moveToNext()) 
      { 
       // This would allow you get several email addresses 
       String emailAddress = emails.getString(emails.getColumnIndex(ContactsContract.CommonDataKinds.Email.DATA)); 
       con = new Contact(); 
       con.setName(name); 
       con.setEmail(emailAddress); 

       tmpList.add(con); 
       emails.close();   
      } 
     } 

    } 
    c.close(); 
    Collections.sort(tmpList); 
    return tmpList; 
} 

private Handler handler = new Handler() { 
    @Override 
    public void handleMessage(Message msg) { 
     prog.dismiss(); 
     cAdapter = new ContactArrayAdapter(thisContext, R.layout.listitemlayout, contacts); 

     cAdapter.setNotifyOnChange(true); 
     //ContactArrayAdapter(thisContext, android.R.layout.simple_list_item_multiple_choice, contacts); 
     getListView().setFastScrollEnabled(true); 
     setListAdapter(cAdapter); 

    } 
}; 

@Override 
protected void onListItemClick(ListView l, View v, int position, long id) { 
    super.onListItemClick(l, v, position, id); 
    TextView label = ((TwoLineListItem) v).getText2(); 
    TextView label1 = ((TwoLineListItem) v).getText1(); 
    String phoneNumber = label.getText().toString(); 
    String name = label1.getText().toString(); 
    // int phoneNumber1 = label.getId(); 
    Toast.makeText(this, "Selected " + name +"id" + phoneNumber, Toast.LENGTH_SHORT).show(); 
} 
+0

对不起,如果我没有说清楚。我试图从QuickContact对话框中获取启动应用的个人号码。就像默认的SMS应用程序如何使用从QuickContact对话框启动撰写邮件的联系人姓名和电话号码填充收件人字段一样。尽管为代码欢呼。 – jakedemus 2012-02-02 06:20:04

+0

嗨smit,为什么'ContactsContract.Contacts.CONTENT_URI'不在我的应用程序中工作? – 2012-02-02 06:21:27

+1

肯定确保你已经添加了android.permission.READ_CONTACTS到你的AndroidManifest.xml @Swan – OnkarDhane 2012-02-02 06:23:33