如何检索帐户的“上次同步”时间?

时间:2011-07-09 15:47:06

标签: android sync android-syncadapter

是否可以检索帐户上次同步的时间,例如系统设置 - >帐户和同步应用程序?我正在使用Android 2.2。

查看AccountSyncSettings.java的2.2源代码,我看到状态是使用以下方法检索的:

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

但是SyncStatusInfo和getSyncStatus似乎不是公共API的一部分(用@hide标记)。有没有其他方法来获取此信息?

2 个答案:

答案 0 :(得分:3)

您可以使用反射来实现此目的。这是我实现此代码的代码

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;
}

答案 1 :(得分:2)

“设置”应用使用ContentResolver.getSyncStatus(account, authority)。但是,这不是公共API的一部分。你可以使用它,但它可能会破坏任何未来版本。