为什么ContentResolver.requestSync不会触发同步?

时间:2011-03-09 23:56:42

标签: android android-contentprovider android-syncadapter

我正在尝试实现内容提供商同步适配器模式,如Google IO所述 - 幻灯片26.我的内容提供商正在运行,当我从Dev Tools Sync Tester应用程序触发它时,我的同步工作正常,但是,当我从ContentProvider调用ContentResolver.requestSync(帐户,权限,捆绑)时,我的同步永远不会被触发。

ContentResolver.requestSync(
        account, 
        AUTHORITY, 
        new Bundle());

编辑 - 添加了清单摘要 我的清单xml包含:

<service
    android:name=".sync.SyncService"
    android:exported="true">
    <intent-filter>
        <action
            android:name="android.content.SyncAdapter" />
    </intent-filter>
    <meta-data android:name="android.content.SyncAdapter"
    android:resource="@xml/syncadapter" />
</service>

- 编辑

与我的同步服务关联的我的syncadapter.xml包含:

<?xml version="1.0" encoding="utf-8"?>
<sync-adapter xmlns:android="http://schemas.android.com/apk/res/android"  
    android:contentAuthority="AUTHORITY"
    android:accountType="myaccounttype"
    android:supportsUploading="true"
/>

不确定其他代码会有用。传递给requestSync的帐户是“myaccounttype”,传递给调用的AUTHORITY与我的syc适配器xml匹配。

ContentResolver.requestSync是否是请求同步的正确方法?看起来同步测试工具直接绑定到服务并调用start sync,但这似乎违背了与同步架构集成的目的。

如果这是请求同步的正确方法,那么同步测试器为什么会工作,而不是我对ContentResolver.requestSync的调用?我需要在捆绑中传递一些内容吗?

我正在运行2.1和2.2的设备上的模拟器中进行测试。

2 个答案:

答案 0 :(得分:278)

答案 1 :(得分:0)

我在使用AccountManager setIsSyncable方法之后对setAuthToken进行了校准。但是setAuthToken在到达setIsSyncable之前返回了函数。更改订单后,一切正常!