ContactsContract.RawContacts.SYNC2 всегда нулевой на реальном устройстве, отлично работает на эмуляторе SDK - PullRequest
1 голос
/ 08 января 2012

Я пишу SyncProvider на основе демонстрации Сэма Стила .

Однако я столкнулся с серьезной проблемой. Я записываю метки времени в поле ContactsContract.RawContacts.SYNC2. На эмуляторе SDK это работает просто отлично. На моем Galaxy Nexus, однако, это не ... Кто-нибудь знает, почему или как это исправить?

Вот мой код:

Запись метки времени:

builder = ContentProviderOperation.newUpdate(ContactsContract.RawContacts.CONTENT_URI);
builder.withSelection(ContactsContract.RawContacts.CONTACT_ID + " = '" + rawContactId + "'", null);
builder.withValue(ContactsContract.RawContacts.SYNC2, String.valueOf(timestamp));
operationList.add(builder.build());
mContentResolver.applyBatch(ContactsContract.AUTHORITY, operationList);

Чтение:

    Uri rawContactUri = RawContacts.CONTENT_URI.buildUpon()
            .appendQueryParameter(RawContacts.ACCOUNT_NAME, account.name)
            .appendQueryParameter(RawContacts.ACCOUNT_TYPE, account.type)
            .build();
    mContentResolver = context.getContentResolver();
    Cursor c1 = mContentResolver.query(rawContactUri, new String[] { BaseColumns._ID, UsernameColumn, ContactsContract.RawContacts.SYNC2 }, null, null, null);
    while (c1.moveToNext()) {
        SyncEntry entry = new SyncEntry();
        entry.raw_id = c1.getLong(c1.getColumnIndex(BaseColumns._ID));
        long oldTimestamp = -1;
        if (!c1.isNull(c1.getColumnIndex(ContactsContract.RawContacts.SYNC2))){
            oldTimestamp = Long.valueOf(c1.getString(c1.getColumnIndex(ContactsContract.RawContacts.SYNC2)));
            Log.i("READ TIMESTAMP", String.valueOf(oldTimestamp));
        }
        entry.photo_timestamp = oldTimestamp;
        localContacts.put(c1.getString(1), entry);
    }
    c1.close();

По какой-то причине c1.isNull всегда кажется верным на Галактическом Нексусе. Что я делаю не так?

ОБНОВЛЕНИЕ: Судя по всему, оно иногда записывается для нескольких контактов (1-5 из> 100), так что я теперь еще больше запутался ...

ОБНОВЛЕНИЕ: Я проверил базу данных SQL ContactProvider и поле sync2 действительно пустое, поэтому, похоже, проблема в том, как я пишу метку времени.

...