電話番号で連絡先を検索する

アプリケーションの1つで、電話番号で連絡先を検索するという質問が発生しました(SMSの受信時)。 タスクはそれほど単純ではないことが判明しました-連絡先のデータベースでは、電話はしばしば任意の(ユーザーフレンドリーな)形式で記述されています:ここでは、国コードの代わりに8を使用し、数字の一部を角かっこやスペースで区切ります。 次に、オペレータは創造性を追加し、作成者の番号をより読みやすい形式でSMSに変換しました。国コード、オペレータのコード、電話番号自体はスペースで区切られています。 数値を国際形式に変換する機能は誠実に対応できず、時間がかかりすぎました。 ドキュメント内の回答を検索しても特定の結果は得られませんでしたが、ソースの調査は役に立ちました。 SQLiteクエリでは、PHONE_NUMBERS_EQUAL関数(NUMBER1、NUMBER2、STRICT)を使用できることが判明しました。 3番目のパラメーターは省略できます。 この方法はうまく機能します。
String[] projection = new String[] { ContactsContract.Data.CONTACT_ID, ContactsContract.Contacts.LOOKUP_KEY, ContactsContract.Contacts.DISPLAY_NAME, ContactsContract.Contacts.STARRED, ContactsContract.Contacts.CONTACT_STATUS, ContactsContract.Contacts.CONTACT_PRESENCE }; String selection = "PHONE_NUMBERS_EQUAL(" + Phone.NUMBER + ",?) AND " + Data.MIMETYPE + "='" + Phone.CONTENT_ITEM_TYPE + "'"; String selectionArgs = new String[] { phoneNumber }; Cursor cursor = getContentResolver().query(ContactsContract.Data.CONTENT_URI, projection, selection, selectionArgs, null);
      
      



検索する前に、ソース番号自体をより単純な形式にすることが望ましいです。
 String phoneNumber = PhoneNumberUtils.stripSeparators(sourcePhoneNumber);
      
      



たぶん誰かが助けて時間と労力を節約するでしょう。



All Articles