18

電話をかけBroadcastReceiverてきた人の電話番号を受け取ります

<intent-filter>
<action
    android:name="android.intent.action.PHONE_STATE" />
</intent-filter>
  1. 受信した電話番号が連絡先リストにあるかどうかを確認するにはどうすればよいですか?
    この電話番号が連絡先リストをロードせずに連絡先リストに存在するかどうかを知るためのヒントはありますか?
    この電話番号が存在する場合でも、これ以上の情報は必要ありません。

  2. それが不可能で、連絡先リストをロードする必要がある場合、どのようにそれを行うのBroadcastReceiverですか?
    私がやろうとするとgetContentResolver、私が上にいて、中にいないので、それは機能してBroadcastReceiverいませんActivity...

ご協力いただきありがとうございます

4

4 に答える 4

36
public boolean contactExists(Context context, String number) {
    // number is the phone number
    Uri lookupUri = Uri.withAppendedPath(PhoneLookup.CONTENT_FILTER_URI, Uri.encode(number));
    String[] mPhoneNumberProjection = { PhoneLookup._ID, PhoneLookup.NUMBER, PhoneLookup.DISPLAY_NAME };
    Cursor cur = context.getContentResolver().query(lookupUri, mPhoneNumberProjection, null, null, null);
    try {
        if (cur.moveToFirst()) {
            cur.close();
            return true;
        }
    } finally {
        if (cur != null)
            cur.close();
        }
   }

   return false;
}
于 2010-08-17T19:00:08.507 に答える
9

マニフェストファイルに以下を追加する必要があると言うことが重要だと思います。

<uses-permission android:name="android.permission.READ_CONTACTS" /> 
于 2011-03-04T18:26:15.377 に答える
3

PhoneLookupは空である可能性があり、時々結果が得られないため、Phone.CONTENT_FILTER_URI代わりに使用することをお勧めします (LG-P500、フローズンヨーグルトでテスト済み)PhoneLookup.CONTENT_FILTER_URI

私のデバイスの問題は、たとえば次の場合に発生します。

  1. 機内モードに切り替えます
  2. デフォルトのメッセージアプリケーションを使用してSMSを送信します(キューに入れられます)。
  3. PhoneLookup.CONTENT_FILTER_URI連絡先のクエリに使用

すべてのデバイスが影響を受けているわけではないようです

返されたカーソルの使用PhoneLookup.CONTENT_FILTER_URIは常に空です。すべてを使用しPhone.CONTENT_FILTER_URIても問題ありません(連絡先がある場合はそれを見つけます)。

したがってPhone.*、本当に使用する必要がある場合を除いて、常にUrisを使用することをお勧めしますPhoneLookup.*...これは通常、名簿の同期に関連するものです(ほとんどの場合、興味のあるものではありません)。

于 2011-03-06T14:24:04.617 に答える
3

1の場合、推奨されるContactsContract.PhoneLookupプロバイダーを確認する必要があります

発信者IDなどの電話番号を検索した結果を表すテーブル。ルックアップを実行するには、検索する番号をCONTENT_FILTER_URIに追加する必要があります。このクエリは高度に最適化されています。

Uri uri = Uri.withAppendedPath(PhoneLookup.CONTENT_FILTER_URI, Uri.encode(phoneNumber));
Cursor mycursor=resolver.query(uri, new String[]{PhoneLookup.DISPLAY_NAME,...
if (mycursor!=null && mycursor.moveToFirst()) {
// record exists
}

2の場合context、onReceiveメソッドを使用して、Contextに属するメソッドを呼び出すことができます。

ContentResolver cr=context.getContentResolver();
于 2010-08-17T18:54:04.513 に答える