2016-11-10 6 views
1

私はAndroidの機能を実装しようとしています。数字のユーザーキーとして、電話帳の番号を徐々に検索して結果を表示したいのですが。このためAndroidのコード番号を検索するコード

、私は

Uri.withAppendedPath(ContactsContract.CommonDataKinds.Phone.CONTENT_FILTER_URI、Uri.encode(aNumber))を使用しています。

これは、ほとんどの場合のために働くようだと私は解決することはできませんよ2つの問題があります「」などの検索

を処理している:

  1. は、それが国を無視しません。コード。

などです。 + 9199776xx123 検索文字列が+9199の場合、結果が表示されます。私の検索文字列が9977ならば、それは出てこない。

  1. 間を検索しません。 検索文字列が776の場合は、結果も表示されません。

電話のCONTENT_FILTER_URIの動作が私にはっきりと分かりません。

P.S.私はPhoneLookupを試しましたが、なんらかの理由で結果をスローしません。私の信念は、部分的な数字を検索することができないかもしれないということです。

答えて

0

Phone.CONTENT_FILTER_URIはスピードのために作られていますが、あなたが気づいたように完璧ではありません。 平文Phone.CONTENT_URIを使用して、任意の種類の要求を処理することができます。

例えば:

String partialPhone = "9977"; 
String[] projection = new String[] {Phone.DISPLAY_NAME, Phone.NUMBER, Phone. NORMALIZED_NUMBER}; 
String selection = "(" + Phone.NUMBER + " LIKE %" + partialPhone + "%) OR (" + Phone.NORMALIZED_NUMBER + " LIKE %" + partialPhone + "%)"; 
Cursor c = cr.query(Data.CONTENT_URI, projection, selection, null, null); 
0

はかなりかの研究の後、私は答えを見つけることができました。ここでは、Numberと正規化された数値の両方の列を検索します。正規化された数値には国番号が含まれているため、これは両方のケースを処理します。

マイセレクション文字列は次のようになります。

  String selection = ContactsContract.CommonDataKinds.Phone.NUMBER + " LIKE ? OR " 
       + ContactsContract.CommonDataKinds.Phone.NORMALIZED_NUMBER + " LIKE ?";