gpt4 book ai didi

android - 如何为多个权限使用一个 SyncAdapter 类?

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:32:01 26 4
gpt4 key购买 nike

我想为多个权限重用我的 SyncAdapter。方法onPerformSync(Account account, Bundle extras, String authority, ContentProviderClient provider, SyncResult syncResult) 将权限作为参数传递。但是我怎样才能这样注册呢?

我从 AndroidManifest.xml 中的以下内容开始:

<service
android:name=".sync.SyncService" >
<intent-filter>
<action android:name="android.content.SyncAdapter" />
</intent-filter>

<meta-data
android:name="android.content.SyncAdapter"
android:resource="@xml/syncadapter1" />
</service>

我尝试了不同的方法来注册 @xml/syncadapter2 但没有成功。在没有为每个权限派生 SyncAdapter 类的情况下实现该目标的任何想法?

最佳答案

这个问题是几个月前提出的,但我还是想回答...

onPerformSync() 在启动新的 SyncThread 以执行同步操作时调用。每个 SyncAdapter 都会启动一个 SyncThread,该线程绑定(bind)到 sync-adapter.xml 中定义的权限,并且不能在此 xml 文件中定义多个权限。

AbstractThreadedSyncAdapter(SyncAdapter 父类(super class))根本不是为处理多个授权而编写的。它包含一个作为单例实现的最终 ISyncAdapterImpl 类,因此每次调用 startSync() 时,都会使用相同的权限进行同步。

或者,您最初是否尝试将 @xml/syncadapter2 添加为 SyncService 中的附加元数据?这相当于将多个 SyncAdapter 注册到单个 SyncService。它在技术上是可行的(因为您可以在服务标签中定义多个元数据标签)但是操作系统本身是在您的服务运行时调用 service.onBind(Intent intent) 的罪魁祸首同步,您无法轻易控制它传递的 Intent 。如果您可以控制它,您可以在 Intent 的包中放置一个 key ,该 key 将确定要绑定(bind)哪些已注册的 syncAdapter。甚至这似乎也很难。

总而言之,为每个权限(也使用它们自己的服务)实现不同的 SyncAdapter 并将类似的操作抽象到一个在 onPerformSync() 中调用的 Utility 类中会更容易。无论如何,从长远来看,这种策略更易于维护,因为如果需要删除其中一个 ContentProvider,则删除其对应的 SyncAdapter 和 SyncService 会更容易。

关于android - 如何为多个权限使用一个 SyncAdapter 类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12510603/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com