2013-04-27 24 views
6

Nó rất dễ dàng để mở Android Liên App để hiển thị tất cả danh bạ và chọn một trong số họ:Mở Liên Picker với một Lọc

trong Hoạt động:

private int PICK_CONTACT = 853456; 

    // ... 

    // open contact list 
    void openContactPicker() { 
     Intent it= new Intent(Intent.ACTION_PICK, Contacts.CONTENT_URI); 
     startActivityForResult(it, PICK_CONTACT); 
    } 

    // when back from intent: use pick result 
    @Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     // ... 
     switch (requestCode) { 
     case PICK_CONTACT: 
      if (dataOk(data)) { 
       extractContactInfo(data); 
      } else { 
       showErrorMessage(); 
      } 
      break; 
     // ... 
    } 

Nhưng là nó có thể thiết lập một số bộ lọc tiêu chí, để Ứng dụng Liên hệ sẽ chỉ hiển thị những liên hệ có phần tử được chỉ định - ví dụ thông tin bưu chính đầy đủ hoặc email thích hợp hoặc số điện thoại?

My App cần các thông tin bưu chính, công việc dòng chảy hiện thực hiện là như thế:

  • Người dùng nhấp vào nút để mở danh bạ
  • Liên App được khởi động, hiển thị tất cả địa chỉ liên lạc
  • dùng chọn một
  • trở lại trong hoạt động của tôi liên lạc được kiểm tra
    • thông tin bưu điện có sẵn -> làm điều đúng
    • .210
    • thông tin bưu điện không có sẵn -> hộp thông báo

Vì nhiều địa chỉ liên lạc không có một thông tin bưu điện, trong hầu hết các trường hợp, một hộp thông báo 'xin lỗi không có thông tin bưu chính dành cho liên hệ này sẽ được hiển thị. Đây không phải là hành vi có thể chấp nhận được.

Một thay thế là - tôi chỉ thực hiện điều này - để truy vấn cơ sở dữ liệu địa chỉ liên lạc bên trong ứng dụng và làm các việc lọc trong mã của riêng tôi, nhưng sử dụng phương pháp này có một số ý nghĩa:

  • ứng dụng đòi hỏi sự đọc danh bạ cho phép, mà có thể là một không đi cho nhiều người sử dụng
  • một bảng chọn tiếp xúc đã được thực hiện, trong đó có thể trông khác so với cái người dùng quen thuộc với

vì vậy, thiết lập một số tiêu chí cho hệ Ứng dụng có vẻ như một chất nhầy h cách thanh lịch hơn để làm điều này.

Ứng dụng sẽ chạy trên Android 2.3.3 trở lên.

Câu hỏi:

  1. Có thể trên 2.3.3 để thiết lập các tiêu chí lọc cho hệ App, khi bắt đầu nó qua startActivityForResult (đặc biệt là sth như 'has_postal_information'.)?
  2. Nếu không: có thể có trên các phiên bản hệ điều hành sau này không?

Trả lời

4

Các thanh ghi hệ ứng dụng để lọc ý định này

<intent-filter> 
    <action android:name="android.intent.action.PICK" /> 
    <category android:name="android.intent.category.DEFAULT" /> 
    <data android:mimeType="vnd.android.cursor.dir/contact" /> 
    <data android:mimeType="vnd.android.cursor.dir/person" /> 
    <data android:mimeType="vnd.android.cursor.dir/phone_v2" /> 
    <data android:mimeType="vnd.android.cursor.dir/phone" /> 
    <data android:mimeType="vnd.android.cursor.dir/postal-address_v2" /> 
    <data android:mimeType="vnd.android.cursor.dir/postal-address" /> 
</intent-filter> 

Vì vậy, bạn có thể tạo ra ý định của bạn như thế này:

private int PICK_CONTACT = 853456; 

// ... 

// open contact list 
void openContactPicker() { 
    Intent it= new Intent(Intent.ACTION_PICK, Contacts.CONTENT_URI); 
    it.setType("vnd.android.cursor.dir/postal-address"); 
    startActivityForResult(it, PICK_CONTACT); 
} 
Các vấn đề liên quan