2013-04-17 52 views
0

我正在開發一個應用程序,我需要將所有聯繫人顯示給用戶。 應該給用戶一個選擇多個聯繫人的選項,當他按下完成時,所有的聯繫人都必須存儲在數據庫中。從Android手機中提取選定的聯繫人

誰能幫我用代碼來顯示,並提取選定的聯繫人?? {沒有一個必須選擇,即使THR是多個同名的無}

如果妳可以只讓選定的聯繫人的名字要顯示在舉杯{我會做我自己的DB部分},我會很感激......

plz幫助.......

回答

0

您需要創建自己的ListView與CHOICE_MODE_MULTIPLE聯繫,並使用CheckTextView作爲單個項目佈局。下面是一個完整的例子。它在操作欄上有完成按鈕。

public class PickContactsActivity extends ListActivity { 
    private SimpleCursorAdapter mAdapter; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     getListView().setItemsCanFocus(false); 
     getListView().setChoiceMode(ListView.CHOICE_MODE_MULTIPLE); 
     Cursor cursor = getContentResolver().query(ContactsContract.Contacts.CONTENT_URI, 
       new String[] { ContactsContract.Contacts._ID, 
       ContactsContract.Contacts.DISPLAY_NAME}, 
       null, null, "UPPER(" + ContactsContract.Contacts.DISPLAY_NAME + ") ASC"); 
     mAdapter = new SimpleCursorAdapter(this, 
       android.R.layout.simple_list_item_multiple_choice, 
       cursor, 
       new String[] { ContactsContract.Contacts.DISPLAY_NAME }, 
       new int[] { android.R.id.text1 }, 0); 
     setListAdapter(mAdapter); 
    } 

    private List<Uri> pickContacts() { 
     SparseBooleanArray a = getListView().getCheckedItemPositions(); 
     List<Uri> contacts = new ArrayList<Uri>(); 
     for (int i=0; i<a.size(); i++) { 
      if (a.valueAt(i)) { 
       Cursor c = (Cursor)mAdapter.getItem(a.keyAt(i)); 
       Long id = c.getLong(c.getColumnIndex(ContactsContract.Contacts._ID)); 
       contacts.add(ContentUris.withAppendedId(ContactsContract.Contacts.CONTENT_URI, id)); 
      } 
     } 
     return contacts; 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     getMenuInflater().inflate(R.menu.main, menu); 
     return true; 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     switch(item.getItemId()) { 
     case R.id.action_pick: 
      List<Uri> contacts = pickContacts(); 
      StringBuilder sb = new StringBuilder("Selected Contacts\n"); 
      for(Uri c : contacts) 
       sb.append(c).append("\n"); 
      Toast.makeText(this, sb.toString(), Toast.LENGTH_SHORT).show(); 
      return true; 
     } 
     return false; 
    } 
} 

完成動作在RES /菜單/ main.xml中定義

<menu xmlns:android="http://schemas.android.com/apk/res/android" > 
    <item android:id="@+id/action_pick" android:showAsAction="ifRoom" android:title="Done"/> 
</menu> 

最後,確保你有閱讀接觸的權限。這種加入AndroidManifest.xml中

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

只是刪除,顯示敬酒消息的代碼,並使用URI的列表執行數據庫操作。

+0

非常感謝:)它像一個魅力:)感謝噸:) :) – worried

+0

先生,有一個prblm ..正在顯示的聯繫人的順序不是按字母順序..它的聯繫人的順序有已被添加...你可以幫助嗎? – worried

+0

我編輯了答案,將Order By子句添加到查詢中。這將通過DISPLAY_NAME對聯繫人進行排序。 Plz接受我的答案,如果它適合你。 –

相關問題