2010-09-20 24 views
10

Tôi hiện đang viết một ứng dụng cho phép lưu bản nháp (sử dụng phiên bản android> = 2.0). Mỗi bản nháp được kết nối với một số liên lạc qua số ContactsContract.Contacts.LOOKUP_KEY. Vấn đề của tôi là nếu tôi thay đổi tên liên hệ của tôi, khóa tra cứu cũng sẽ thay đổi. Đó có phải là cách làm việc này?Android: Quản lý danh bạ bằng phím tra cứu

Vì vậy, đối với những gì tôi cần một khóa tra cứu? Tôi nghĩ rằng chìa khóa tra cứu không bao giờ thay đổi và bây giờ nó thay đổi anyway. Tôi bối rối về hành vi đó ...

Ai đó có thể giải thích cho tôi cách liên kết vĩnh viễn với một liên hệ? Tôi có nên sử dụng ID thay vì khóa tra cứu không?

Xin cảm ơn trước.

Trả lời

15

Tôi hiểu rằng khóa tra cứu là khóa có cấu trúc/phân cấp. Do đó nói đúng nó có thể thay đổi, nhưng vẫn được sử dụng để tìm liên lạc của bạn trở lại, bằng cách sử dụng các phương pháp thích hợp:

Uri lookupUri = Uri.withAppendedPath(ContactsContract.Contacts.CONTENT_LOOKUP_URI, lookupKey); 
    Uri res = ContactsContract.Contacts.lookupContact(getContentResolver(), lookupUri); 
+0

Vâng, có vẻ như nó hoạt động. Bằng cách nào đó tôi đã không chú ý đến phương thức 'ContactsContract.Contacts.lookupContact()'. Cảm ơn câu trả lời của bạn. – dotcs

+0

Mã đầy đủ cho điều này là gì? Tôi không thể có được nó để làm việc. – user123321

+1

Tôi đang làm việc với Android 2.2. Tôi đã truy cập một khóa tra cứu để liên hệ với nó là 0r12-2982324852 sau đó tôi đã đổi tên và lưu liên hệ và tra cứu là 0r12-2982324852365430403C4638. Vì vậy, nó cũng tương tự cho Android 2.2, nhưng khi tôi thêm số điện thoại vào cùng một phím tra cứu liên hệ vẫn giữ nguyên 0r12-2982324852365430403C4638. Vì vậy, chúng ta có thể kết luận những gì @BoD nói là chính xác. –

4

được sửa đổi:

Tại sao bạn không tìm thấy id liên lạc hoặc chìa khóa tra cứu qua sử dụng nguyên id liên hệ? đây là lỗi trong 2.1.

Khóa tìm kiếm được dựa trên tên liên hệ cho địa chỉ liên hệ chưa được đồng bộ hóa.

http://comments.gmane.org/gmane.comp.handhelds.android.devel/130677

========================================= =========================

Tôi chưa thử. Nhưng tôi đã tìm thấy một số thông tin về điều này.

http://developer.android.com/resources/articles/contacts.html

....

Nếu hiệu suất là một mối quan tâm cho các ứng dụng của bạn, bạn có thể muốn để lưu trữ tất cả các tra cứu và ID dài của một số liên lạc và xây dựng một tra cứu URI ra của cả hai ID , như thể hiện ở đây:

Uri lookupUri = getLookupUri(contactId, lookupKey) 

Khi cả hai ID có mặt trong URI, hệ thống sẽ cố gắng sử dụng ID dài đầu tiên. Đó là một truy vấn rất nhanh. Nếu không tìm thấy số liên lạc hoặc nếu tìm thấy liên hệ có khóa tra cứu không chính xác, nhà cung cấp nội dung sẽ phân tích khóa tra cứu và theo dõi các liên hệ thô thành phần. Nếu ứng dụng xử lý hàng loạt liên hệ, bạn nên duy trì cả hai ID. Nếu ứng dụng của bạn hoạt động với một liên hệ trên mỗi hành động của người dùng, có thể bạn không cần phải bận tâm với việc lưu trữ ID dài.