2011-09-07 22 views
8

Tôi đang tạo ứng dụng tin nhắn văn bản và muốn truy cập danh bạ trong ứng dụng Android của mình .cách truy cập danh bạ trong chương trình Android của tôi

Tôi muốn truy cập các liên hệ như thể họ ở đâu trong danh sách liên hệ thực. Khi được chọn, tôi cần quay lại hoạt động của mình, trong đó tôi có thể gửi SMS cho người đó. Hoặc là có thể truy cập cơ sở dữ liệu trong đó danh bạ được lưu trữ?

Mã của tôi được hiển thị dưới đây:

String contactId = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID)); 
String name = cursor.getString(cursor.getColumnIndexOrThrow(ContactsContract.Contacts.DISPLAY_NAME)); 
String no = cursor.getString(cursor.getColumnIndexOrThrow(ContactsContract.CommonDataKinds.Phone.NUMBER)); 

LogCat tôi trông như thế này:

09-07 12:46:15.458: DEBUG/AndroidRuntime(473): Shutting down VM 
09-07 12:46:15.458: WARN/dalvikvm(473): threadid=1: thread exiting with uncaught exception (group=0x40015560) 
09-07 12:46:15.478: ERROR/AndroidRuntime(473): FATAL EXCEPTION: main 
09-07 12:46:15.478: ERROR/AndroidRuntime(473): java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=0, result=-1, data=Intent { dat=content://com.android.contacts/contacts/lookup/0r1-512D3F3D533B/1 flg=0x1 (has extras) }} to activity {task.list/task.list.Msgactivity}: java.lang.IllegalArgumentException: column 'data1' does not exist 
09-07 12:46:15.478: ERROR/AndroidRuntime(473):  at android.app.ActivityThread.deliverResults(ActivityThread.java:2532) 
09-07 12:46:15.478: ERROR/AndroidRuntime(473):  at android.app.ActivityThread.handleSendResult(ActivityThread.java:2574) 
09-07 12:46:15.478: ERROR/AndroidRuntime(473):  at android.app.ActivityThread.access$2000(ActivityThread.java:117) 
09-07 12:46:15.478: ERROR/AndroidRuntime(473):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:961) 
09-07 12:46:15.478: ERROR/AndroidRuntime(473):  at android.os.Handler.dispatchMessage(Handler.java:99) 
09-07 12:46:15.478: ERROR/AndroidRuntime(473):  at android.os.Looper.loop(Looper.java:123) 
09-07 12:46:15.478: ERROR/AndroidRuntime(473):  at android.app.ActivityThread.main(ActivityThread.java:3683) 
09-07 12:46:15.478: ERROR/AndroidRuntime(473):  at java.lang.reflect.Method.invokeNative(Native Method) 
09-07 12:46:15.478: ERROR/AndroidRuntime(473):  at java.lang.reflect.Method.invoke(Method.java:507) 
09-07 12:46:15.478: ERROR/AndroidRuntime(473):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839) 
09-07 12:46:15.478: ERROR/AndroidRuntime(473):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597) 
09-07 12:46:15.478: ERROR/AndroidRuntime(473):  at dalvik.system.NativeStart.main(Native Method) 
09-07 12:46:15.478: ERROR/AndroidRuntime(473): Caused by: java.lang.IllegalArgumentException: column 'data1' does not exist 
09-07 12:46:15.478: ERROR/AndroidRuntime(473):  at android.database.AbstractCursor.getColumnIndexOrThrow(AbstractCursor.java:314) 
09-07 12:46:15.478: ERROR/AndroidRuntime(473):  at android.database.CursorWrapper.getColumnIndexOrThrow(CursorWrapper.java:99) 
09-07 12:46:15.478: ERROR/AndroidRuntime(473):  at task.list.Msgactivity.onActivityResult(Msgactivity.java:99) 
09-07 12:46:15.478: ERROR/AndroidRuntime(473):  at android.app.Activity.dispatchActivityResult(Activity.java:3908) 
09-07 12:46:15.478: ERROR/AndroidRuntime(473):  at android.app.ActivityThread.deliverResults(ActivityThread.java:2528) 
09-07 12:46:15.478: ERROR/AndroidRuntime(473):  ... 11 more 
09-07 12:46:15.489: WARN/ActivityManager(61): Force finishing activity task.list/.Msgactivity 

bất cứ ai có thể giúp tôi?

+0

tôi có phải thêm quyền – sajith

+0

ya u không cần phải thêm quyền. –

Trả lời

13

sử dụng mã này để nhận liên hệ:

Button button = (Button)findViewById(R.id.pickcontact); 

    button.setOnClickListener(new OnClickListener() 
     { 
      @Override 
      public void onClick(View v) 
      { 
       Intent intent = new Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI); 
       startActivityForResult(intent, PICK_CONTACT); 
      } 
     }); 



    @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 id = c.getString(c.getColumnIndexOrThrow(ContactsContract.Contacts._ID)); 

      String hasPhone = 
      c.getString(c.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER)); 

      if (hasPhone.equalsIgnoreCase("1")) 
      { 
     Cursor phones = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,null, 
      ContactsContract.CommonDataKinds.Phone.CONTACT_ID +" = "+ id,null, null); 
      phones.moveToFirst(); 
      String cNumber = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)); 
      // Toast.makeText(getApplicationContext(), cNumber, Toast.LENGTH_SHORT).show(); 
      setCn(cNumber); 
      } 
     } 
     } 
    } 
    } 
+0

cảm ơn bạn nhưng làm thế nào tôi có thể lưu số liên lạc đã chọn vào một biến số – sajith

+0

kiểm tra bài đăng đã chỉnh sửa .... – swan

+0

Điều gì sẽ xảy ra nếu có nhiều hơn một số cho ID đã chọn. Theo mã trên, điều này lấy số đầu tiên. Không có bất kỳ tùy chọn nào cho người dùng để chọn số anh ta muốn không? – AnujAroshA

8
2

thử mã này. điều này lưu trữ tất cả các liên hệ trong ArrayList

ArrayList<HashMap<String,String>> contactData=new ArrayList<HashMap<String,String>>(); 
ContentResolver cr = getContentResolver(); 
Cursor cursor = getContentResolver().query(ContactsContract.Contacts.CONTENT_URI,null, null, null, null); 
while (cursor.moveToNext()) { 
    try{ 
    String contactId = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID)); 
    String name=cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME)); 
    String hasPhone = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER)); 
    if (Integer.parseInt(cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER))) > 0) { 
     Cursor phones = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, ContactsContract.CommonDataKinds.Phone.CONTACT_ID +" = "+ contactId, null, null); 
     while (phones.moveToNext()) { 
      String phoneNumber = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)); 
      HashMap<String,String> map=new HashMap<String,String>(); 
      map.put("name", name); 
      map.put("number", phoneNumber); 
      contactData.add(map); 
     } 
     phones.close(); 
    } 
}catch(Exception e){} 
} 

nếu bạn muốn lưu trữ liên hệ cụ thể, hãy sử dụng điều kiện if.

+0

hasPhone trả về giá trị 1, nhưng lỗi xảy ra khi chuỗi phoneNumber = phones.getString (phones.getColumnIndex (ContactsContract.CommonDataKinds.Phone.NUMBER)); thực hiện, những gì sẽ là vấn đề – sajith

+0

những gì nó có nghĩa là "hasPhone trả về giá trị 1". không nhận được sự cố ur –

+0

Chuỗi hasPhone = c.getString (c.getColumnIndex (ContactsContract.Contacts.HAS_PHONE_NUMBER)); – sajith

Các vấn đề liên quan