13

Tôi đang làm việc trên ứng dụng Android Honeycomb (v3.0) có yêu cầu hiển thị TẤT CẢ các liên hệ được lưu trữ trong tài khoản Google được đăng ký trên thiết bị. Một trong những vấn đề tôi gặp phải là tôi chỉ có thể truy xuất các liên hệ có sẵn trong "Danh sách liên hệ của tôi", "Được gắn dấu sao trong Android" và "Người liên hệ khác". Tôi cũng muốn có thể lấy danh bạ từ "Thư mục". Tôi tin rằng phần "Thư mục" là một tính năng do Google cung cấp cho các tổ chức và công ty muốn cung cấp thư mục của tất cả thành viên/nhân viên trong miền của họ cho người khác. Xin vui lòng xem hình dưới đây:Android 3.0 - Cách truy xuất TẤT CẢ các liên hệ qua ContactsContract

Directory

Cho đến nay, tôi có dòng sau trong file manifest của tôi:

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

Tôi đã cố gắng sử dụng mã này:

Cursor cursor = getContentResolver().query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null); 
while (cursor.moveToNext()) { 
    String name = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME)); 
} 
cursor.close(); 

Trong trường hợp của tôi, "Danh bạ của tôi" và "Được gắn dấu sao trong Android" đều trống. Tuy nhiên, (1) liên hệ trong "Danh sách liên hệ khác" thu được. Tuy nhiên, "Thư mục" chứa hàng trăm địa chỉ liên hệ không được truy xuất.

Câu hỏi của tôi: Có cách nào để đảm bảo rằng các liên hệ trong "Thư mục" cũng được truy lục không? Tôi biết rằng tôi có thể chỉ cần sao chép danh bạ qua trình duyệt web và sau đó đồng bộ hóa chúng với thiết bị, nhưng nếu một liên hệ mới được thêm vào "Thư mục", tôi sẽ phải thực hiện việc này theo cách thủ công mọi lúc, vì vậy đây không phải là một lựa chọn tuyệt vời cho tôi. Xin cho biết.

+0

http://developer.android.com/resources/samples/ContactManager/index.html – VicVu

+0

Tôi vừa thử đoạn code trong phương thức GetContacts() chức năng (ContactManager. tệp java), nhưng cuối cùng sẽ không có mục nào cho dù tôi đặt mShowInvisible thành gì. – BVB

+0

Đặt 'String selection = null;' trả lại kết quả tương tự như tôi đã có với mã tôi đã đề cập. – BVB

Trả lời

3

nhìn vào đoạn mã sau

import android.app.Activity; 
import android.content.ContentResolver; 
import android.database.Cursor; 
import android.os.Bundle; 
import android.provider.ContactsContract; 
      public class TestContacts extends Activity { 
/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    ContentResolver cr = getContentResolver(); 
    Cursor cur = cr.query(ContactsContract.Contacts.CONTENT_URI, null, 
      null, null, null); 
    if (cur.getCount() > 0) { 
     while (cur.moveToNext()) { 
      String id = cur.getString(cur 
        .getColumnIndex(ContactsContract.Contacts._ID)); 
      String name = cur 
        .getString(cur 
          .getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME)); 
     if (("1") 
        .equals(cur 
          .getString(cur 
            .getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER)))) { 
       Cursor pCur = cr.query(
         ContactsContract.CommonDataKinds.Phone.CONTENT_URI, 
         null, 
         ContactsContract.CommonDataKinds.Phone.CONTACT_ID 
           + " = ?", new String[] { id }, null); 
       int i = 0; 
       int pCount = pCur.getCount(); 
       String[] phoneNum = new String[pCount]; 
       String[] phoneType = new String[pCount]; 
       while (pCur.moveToNext()) { 
        phoneNum[i] = pCur 
          .getString(pCur 
            .getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)); 
        phoneType[i] = pCur 
          .getString(pCur 
            .getColumnIndex(ContactsContract.CommonDataKinds.Phone.TYPE)); 

        i++; 
       } 
      } 
+0

Tôi nghĩ 'Cursor cur = cr.query (ContactsContract.Contacts.CONTENT_URI, null, null, null, null);' sẽ không thể truy vấn "Directory". Tôi tin rằng tôi đã thử điều này trước đây. – BVB

+0

Tôi không thể tìm thấy giải pháp thân thiện cho vấn đề này. Cách giải quyết mà tôi đã sử dụng là thêm các địa chỉ liên hệ theo cách thủ công từ "Thư mục" vào "Danh bạ của tôi". Điều này sẽ làm cho mã bạn đăng chỉ hoạt động tốt (tôi đã kết thúc một chút khác nhau, nhưng ý tưởng là như nhau). Tất nhiên, nếu có một mục mới trong "Thư mục", nó sẽ phải được di chuyển bằng tay. Tôi sẽ báo cáo lại nếu tôi tìm cách làm tốt hơn. – BVB

+0

@BVB Bạn có tìm thấy giải pháp tốt hơn trong thời gian chờ đợi không? –

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