7

是否可以像系统 Settings->Accounts&Sync 应用程序那样检索帐户上次同步的时间?我使用的是安卓 2.2。

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

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

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

4

2 回答 2

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;
}
于 2013-07-18T04:21:05.620 回答
2

设置应用程序使用ContentResolver.getSyncStatus(account, authority). 但是,这不是公共 API 的一部分。您可以使用它,但它可能会在未来的任何版本中中断。

于 2011-07-15T01:11:05.467 回答