0

発信者番号が連絡先リストにあるかどうかを調べようとしています。だから私はそのために使用しているコード:

    ContentResolver resolver = this.service.getContentResolver();
    String number = PhoneLookup.NUMBER;
    String[] projections = { number };
    String selectionClause = number + " = ?";
    String[] selectionClauseArgs = { callerId };
    Cursor people = resolver.query(
            ContactsContract.Contacts.CONTENT_URI, projections,
            selectionClause, selectionClauseArgs, null);
    return people.getCount() > 0 ? true : false;

ContentResolverすべてを取得し、それらを繰り返し処理して 1 つずつチェックするのではなく、フィルタリング機能をそれ自体に与えています。

しかし、何らかの理由で次のエラーが表示されます (多くのコードがありますが、誰かが呼び出しているときに発信者 ID を受信するためにテレフォニー イベントをサブスクライブしているだけなので、問題なく動作しています!")

08-28 19:20:05.903: E/AndroidRuntime(737): java.lang.IllegalArgumentException: Invalid column number

何が無効なのかわかりません。PhoneLookup.NUMBER定数である右の列名を使用しています。同様の質問が以前にここで尋ねられました: Android 2.0で連絡先を読み取る方法。

4

1 に答える 1

0

この表には電話番号がありません。別の場所からクエリする必要があります。これが高速スクラッチです(もっと良い方法があると思います):

boolean hasPhoneNumber = (people.getInt(people.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER)) > 0);
        if (hasPhoneNumber) {
            String id = people.getString(people.getColumnIndex(ContactsContract.Contacts._ID));
            String num = getNumber(id);
        }


public String getNumber(String id) {
    String number = null;
    String name = null;
    Cursor pCur = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null,
            ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = ?", new String[] { id }, null);
    if (pCur.moveToFirst()) {
        number = pCur.getString(pCur.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
        name = pCur.getString(pCur.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
    }
    pCur.close();
    return number;
}
于 2012-08-29T11:21:01.180 に答える