1

連絡先とカレンダーを扱うアプリを開発しています。

特定のデバイス、Sony Xperia SP で苦労していますが、同じ問題を抱えている人を見つけることができませんでした。

Android API で利用可能なエンティティ URI を使用して、デバイスの連絡先の表示名と電話番号を取得しようとしています: http://developer.android.com/reference/android/provider/ContactsContract.RawContacts.Entity。 html

残念ながら、このコードは、Samsung Galaxy S4 アドバンスでうまく機能しており、クエリしているすべての詳細を取得できます。しかし、Sony Xperia SP では、不正な引数の例外が発生しています。名前。

以下は私が使用しているコードです:

ContentResolver cr = context.getContentResolver();
Uri rawUri = RawContacts.CONTENT_URI;
String[] rawProjection = { RawContacts._ID };
String rawSelection = RawContacts.ACCOUNT_NAME + " = ? AND " + RawContacts.ACCOUNT_TYPE + " = ?";
String[] rawSelectionArgs = new String[] { account.name, account.type };

    Cursor rawCursor = cr.query(rawUri, rawProjection, rawSelection, rawSelectionArgs, null);

    while (rawCursor.moveToNext()) {

        long contactId = rawCursor.getLong(0);

        Uri entityUri = Uri.withAppendedPath(ContentUris.withAppendedId(rawUri, contactId), Entity.CONTENT_DIRECTORY);
        String[] entityProjection = new String[] { Data.DISPLAY_NAME, CommonDataKinds.Phone.NORMALIZED_NUMBER };
        String entitySelection = Entity.MIMETYPE + " = ?";
        String[] entitySelectionArgs = new String[] { CommonDataKinds.Phone.CONTENT_ITEM_TYPE };
        Cursor entityCursor = cr.query(entityUri, entityProjection, entitySelection, entitySelectionArgs, null);

        while (entityCursor.moveToNext()) {
            String name = entityCursor.getString(entityCursor.getColumnIndex(Data.DISPLAY_NAME));
            String number = entityCursor.getString(entityCursor.getColumnIndex(CommonDataKinds.Phone.NORMALIZED_NUMBER));
        }

        entityCursor.close();

    }

このクエリによって返されるフィールドを探すために、entityQuery のプロジェクションを null に設定しようとしましたが、実際には、返されるフィールドはデバイスによって異なります。

これらのフィールドが Sony Xperia SP で表示されない理由と、そこで使用できる回避策を知っている人はいますか?

4

1 に答える 1

-1

連絡先の読み取り権限を付与していることを確認してください。連絡先を選択するときに、同じ問題があります。

<uses-permission android:name="android.permission.READ_CONTACTS" />
于 2015-04-01T18:32:34.597 に答える