2013-03-01 45 views
7

Mục tiêu của tôi là chỉ hiển thị danh bạ có số điện thoại cho người dùng và cho phép người dùng chọn vài địa chỉ liên hệ mà tôi muốn lưu trữ cục bộ.Chỉ hiển thị danh bạ bằng số điện thoại sử dụng mục đích ACTION_PICK trong thiết bị Android

Tôi đã sử dụng các tùy chọn khác nhau thay cho ContactsContract.Contacts.CONTENT_URI theo phương thức bên dưới. Nhưng tôi nhận được rất nhiều địa chỉ liên lạc (nhiều người là rác chỉ với id email) được hiển thị.

public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     setContentView(R.layout.contact_selector); 

     ((Button)findViewById(R.id.btnphonecontactlist)).setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      // TODO Auto-generated method stub 
      Intent contactIntent = new Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI); 
      startActivityForResult(contactIntent, 1); 
       } 
      }); 
    } 

Nếu tôi vượt qua ContactsContract.Contacts.CONTENT_URI như tham số cho phương pháp trên và trong trường hợp dưới đây phương pháp xử lý nào, String [] cho phương pháp truy vấn như các thông số dự báo (được hiển thị nhận xét), phương pháp này không thành công với java.lang.IllegalArgumentException. Nếu tôi vượt qua null trong phương thức dưới đây, thì bất kỳ liên hệ nào tôi chọn, tôi không tìm thấy bất kỳ cột nào liên quan đến số điện thoại hoặc email.

@Override 
    public void onActivityResult(int requestCode, int resultCode, Intent data) { 

     if(data != null) 
     { 
      Uri uri = data.getData(); 

      if(uri != null) 
      { 
       Cursor c = null; 

       try 
       { 
        c = getContentResolver().query(uri, null 
               // new String[] { 
          //ContactsContract.CommonDataKinds.Phone.NUMBER, 
          //ContactsContract.CommonDataKinds.Phone.TYPE}, 
          , null, null, null); 

        if(c != null && c.moveToFirst()) 
        { 
         String number = c.getString(0); 
         String type = c.getString(1); 
        }    
       } 
       finally 
       { 
        if(c != null && !c.isClosed()) 
         c.close(); 
       } 
      } 
     } 
    } 

Có cách nào để chỉ hiển thị liên hệ hiển thị với người dùng thường khi người dùng truy cập danh bạ và số điện thoại có sẵn không?

Tôi đã cố gắng xem xét tất cả các luồng trong stackoverflow và các trang web khác, nhưng không thể tìm thấy giải pháp nào giải quyết vấn đề xung quanh điều này mặc dù nhiều người đã đăng sự cố. Tôi đã không làm việc nhiều với nền tảng Android và tôi có thể đã bỏ lỡ một số chi tiết nhỏ nhất định và tôi tin rằng phải có một cách dễ dàng để đạt được điều này.

Vui lòng đề xuất. Đánh giá cao sự giúp đỡ của bạn.

Cảm ơn.

+0

đã ans tôi giúp? –

Trả lời

18

Vui lòng sử dụng mã dưới đây

Intent intent = new Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI); 
    intent.setType(ContactsContract.CommonDataKinds.Phone.CONTENT_TYPE); 
    startActivityForResult(intent, 1); 
+0

tốt .. + 1 là cần thiết cho nỗ lực của bạn –

+0

Cảm ơn. Nó đã làm việc. Tôi chỉ cần nhảy vào mã hóa mà không cần đọc nhiều điều cơ bản. Tôi đã sử dụng ContactsContract.Contacts.CONTENT_TYPE nhưng bây giờ tôi thấy có những lựa chọn khác và sự khác biệt giữa chúng. – Jit

+1

Mặc dù tôi không thấy thông tin email được trả về cho số liên lạc. Không có bất kỳ thông số chuỗi nào có thể mang lại tất cả thông tin liên quan đến liên hệ, bao gồm số điện thoại nhà riêng, số điện thoại di động và email? – Jit

1

Tiếp theo mã sẽ làm những gì bạn muốn.

Intent intent = new Intent(Intent.ACTION_PICK,ContactsContract.CommonDataKinds.Phone.CONTENT_URI); 
startActivityForResult(Intent.createChooser(intent, "Contact"), PICK_CONTACT); 
1
Uri uri = Uri.parse("content://contacts"); 
Intent intent = new Intent(Intent.ACTION_PICK, uri); 
intent.setType(Phone.CONTENT_TYPE); 
startActivityForResult(intent, REQUEST_CODE); 
0

Sử dụng này:

Intent intent = new Intent(Intent.ACTION_PICK, Uri.parse("content://contacts/people")); 
intent.setType(ContactsContract.CommonDataKinds.Phone.CONTENT_TYPE); 
startActivityForResult(intent, 1); 
2
*-> Add a permission to read contacts data to your application manifest. 

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

-> Use Intent.ACTION_PICK in your Activity 

Intent contactPickerIntent = new Intent(Intent.ACTION_PICK, 
       ContactsContract.CommonDataKinds.Phone.CONTENT_URI); 
     startActivityForResult(contactPickerIntent, RESULT_PICK_CONTACT); 

-> Then Override the onActivityResult() and retrieve the ID,Phone number and Name in the data. 

@Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     // check whether the result is ok 
     if (resultCode == RESULT_OK) { 
      // Check for the request code, we might be usign multiple startActivityForReslut 
      switch (requestCode) { 
      case RESULT_PICK_CONTACT: 
       Cursor cursor = null; 
     try { 
      String phoneNo = null ; 
      String name = null;   
      Uri uri = data.getData();    
      cursor = getContentResolver().query(uri, null, null, null, null); 
      cursor.moveToFirst();   
      int phoneIndex =cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER); 
      phoneNo = cursor.getString(phoneIndex); 

      textView2.setText(phoneNo); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
       break; 
      } 
     } else { 
      Log.e("MainActivity", "Failed to pick contact"); 
     } 
    } 

This will work check it out* 
Các vấn đề liên quan