android - 如何检索帐户的 'last sync' 时间?

标签 android sync android-syncadapter

是否可以检索帐户上次同步的时间,就像系统“设置”->“帐户与同步”应用程序所做的那样?我使用的是 Android 2.2。

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

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

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

最佳答案

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

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

关于android - 如何检索帐户的 'last sync' 时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6635790/

相关文章:

VMWare 上的 Android 屏幕旋转

java - Android 适配器未更新

frameworks - 同步框架 : How to specify the sync order of multiple tables?

android - 如何监控 Google Drive 上的文件并在 Android 应用程序中对该文件进行更改时得到通知

android - 使用 SyncAdapters 时登录两次

java - 我可以从编码的 UTF-8 字节数组创建 DOM 文档吗?

android - Android 上的 Hunspell

visual-studio-2010 - 在 Visual Studio 2010 中的计算机之间同步设置

android - 仅在 WIFI 上使用 SyncAdapter

android-syncadapter - SyncAdapter onPerformSync() 在模拟器上被调用,但在物理设备上运行时不会被调用