Как получить время последней синхронизации для учетной записи? - PullRequest
6 голосов
/ 09 июля 2011

Можно ли получить время последней синхронизации учетной записи, как это делает системное приложение «Настройки-> Учетные записи и синхронизация»? Я использую Android 2.2.

Глядя на источник 2.2 для AccountSyncSettings.java, я вижу, что статус получен с помощью:

SyncStatusInfo status = ContentResolver.getSyncStatus(account, authority);

но SyncStatusInfo и getSyncStatus, похоже, не являются частью общедоступного API (помеченного @hide). Есть ли другой способ получить эту информацию?

Ответы [ 2 ]

3 голосов
/ 18 июля 2013

Вы можете использовать отражение для достижения этой цели. Вот мой код для реализации этого

private long getLasySyncTime() {
    long result = 0;
    try {
        Method getSyncStatus = ContentResolver.class.getMethod(
                "getSyncStatus", Account.class, String.class);
        if (mAccount != null && mSyncAdapter != null) {
            Object status = getSyncStatus.invoke(null, mAccount,
                    mSyncAdapter.authority);
            Class<?> statusClass = Class
                    .forName("android.content.SyncStatusInfo");
            boolean isStatusObject = statusClass.isInstance(status);
            if (isStatusObject) {
                Field successTime = statusClass.getField("lastSuccessTime");
                result = successTime.getLong(status);
                TLog.d(WeixinSetting.class, "get last sync time %d", result);
            }
        }
    } catch (NoSuchMethodException e) {

    } catch (IllegalAccessException e) {

    } catch (InvocationTargetException e) {
        TLog.d(WeixinSetting.class, e.getMessage() + e.getCause().getMessage());

    } catch (IllegalArgumentException e) {

    } catch (ClassNotFoundException e) {

    } catch (NoSuchFieldException e) {

    } catch (NullPointerException e) {

    }
    return result;
}
2 голосов
/ 15 июля 2011

Приложение настроек использует ContentResolver.getSyncStatus(account, authority). Однако это не является частью общедоступного API. Вы можете использовать его, но он может сломаться с любым будущим выпуском.

...