标签: android-syncadapter

在Android中,联系人同步适配器应该在单独的进程中运行吗?

在我的应用程序中,我使用的是联系人同步适配器,但它有很多与主应用程序共享的信息.有适配器需要工作的设置(如登录信息和用户更改任何同步设置),所以我目前在同一个进程中运行它,并与主ap通信使用getApplicationContext(),然后我有一些共享Application同步适配器在同步过程中使用的变量.

但是在培训文档和在线的一些教程中,示例适配器被设置为在其自己的进程中运行 - 它android:process=":sync"在清单中使用.这有必要吗?如果它确实在一个单独的进程中运行,我该如何与主应用程序进行通信?

android sync contacts android-syncadapter

12
推荐指数
1
解决办法
3256
查看次数

SyncAdapter始终处于挂起状态

我目前正在开发一个Android应用程序,它依赖于SyncAdapter从服务器刷新其内容.我基本上遵循了这些说明:https://developer.android.com/training/sync-adapters/creating-sync-adapter.html

直到最近,这仍然很好.我知道这可能听起来很愚蠢,但老实说我不知道​​我是怎么搞砸的:(


设置

我有一个ContentProvider,因此SyncAdapter我想要同步的所有项目的一个和一个帐户.我使用整数标志来确定哪个项目必须同步:

public static final int EVENTS = 0x1;
public static final int NEWS = 0x2;
public static final int SUBSTITUTIONS = 0x4;
public static final int TEACHERS = 0x8;
public static final int ALL = 0xF;
Run Code Online (Sandbox Code Playgroud)

所以在我看来onPerformSync我有类似的东西:

ArrayList<ContentProviderOperation> batchList = new ArrayList<>();

int which = extras.getInt(SYNC.ARG, SYNC.ALL);
if((which & SYNC.NEWS) == SYNC.NEWS) { syncNews(provider, batchList, syncResult, 0, 1); }
if((which & SYNC.EVENTS) == SYNC.EVENTS) { syncEvents(provider, …
Run Code Online (Sandbox Code Playgroud)

android synchronization android-contentresolver android-syncadapter swiperefreshlayout

12
推荐指数
1
解决办法
1122
查看次数

AccountManager不会在Android N预览中添加自定义帐户

我在我的应用中实现了同步适配器,需要在设备帐户设置中添加帐户.我遵循Android文档中给出的相同方法.它工作正常,直到棉花糖,我可以在设备帐户中看到我的帐户.但在Android N预览中,帐户不会添加到设备帐户.AccountManager的addAccountExplicitly()方法始终返回false.有人遇到过这个问题吗?

android android-contentprovider android-syncadapter android-authenticator android-account

12
推荐指数
1
解决办法
1269
查看次数

Android Sync Sqlite

我正在制作一个字典类的应用程序使用SQLite.我有一个表保留一对外来单词及其翻译.我想将此表与Google文档中的特定电子表格同步.

我发现这个很棒的库可以检索和操作GoogleSpreadsheets,所以至少我已经被覆盖了.但我对同步感到不舒服.现在,

  1. 我可以使用a SyncAdapter来实现我SQLite和我之间的同步GoogleSpreadsheet吗?如果是的话,我该怎么做呢?我会检索并操纵电子表格中的行onPerformSync吗?
  2. 这种情况的其他替代方案可能是什么?我可以使用普通服务在用户请求时进行检查(例如,在主要活动中)吗?

在Google I/O vids上(特别是在Android REST客户端应用程序上),它们似乎非常有说服力,SyncAdapter但我不确定它是否可以帮助我没有实际的REST服务.

提前致谢..

android sync google-sheets android-service android-syncadapter

11
推荐指数
1
解决办法
2120
查看次数

SyncAdapter运行动画 - 如何知道SyncAdapter是否正在主动同步

我想在ActionBar中显示ProgressBar,而我的SyncAdapter正在主动与Web同步内容.

我已尝试将SyncStatusObserverContentProvider.addStatusChangeListener一起使用.但是,我无法检查SyncAdapter是否正在运行.我只能检查:

  1. SyncAdapter正在使用ContentResolver.isSyncPending挂起
  2. SyncAdapter正在等待或正在使用ContentResolver.isSyncActive正在工作

可以组合这些标志:!isSyncPending && isSyncActive这样就可以检查SyncAdapter是否正在正常工作,并且没有任何待处理的工作.但是,在某些情况下,SyncAdapter正在正常工作,并有第二个等待它的待处理请求.

看起来很简单,但我无法找到解决这个问题的方法.在SyncAdapter未运行时显示ProgressBar会让用户感觉同步非常慢.让它不显示ProgressBar会让用户认为没有任何事情发生.

代码中的上述解决方案如下所示.我们在activity.onResume中注册观察者:

 int mask = ContentResolver.SYNC_OBSERVER_TYPE_PENDING | ContentResolver.SYNC_OBSERVER_TYPE_ACTIVE;
 syncHandle = ContentResolver.addStatusChangeListener(mask, syncObserver);
Run Code Online (Sandbox Code Playgroud)

syncObserver在这里定义为:

syncObserver = new SyncStatusObserver()
{
    @Override
    public void onStatusChanged(int which)
    {
        Account account = getSomeAccount();
        boolean syncActive = ContentResolver.isSyncActive(account, CONTENT_AUTHORITY);
        boolean syncPending = ContentResolver.isSyncPending(account, CONTENT_AUTHORITY);
        boolean isSynchronizing = syncActive && !syncPending;
        updateRefreshButtonState();
    }
}
Run Code Online (Sandbox Code Playgroud)

android android-contentresolver android-syncadapter

11
推荐指数
1
解决办法
5165
查看次数

SyncAdapter periodicsync()不会触发

我正在试图找出syncAdapter是如何工作的,我使用了sampleSync Adapter作为示例/起点,我基于它进行了第一次测试.唯一的区别是我没有使用默认的联系人提供程序,但我需要一个我自己的.

这个方法与sampleSyncAdapter演示中的方法相同(在AccountAuthenticatorActivity中),我刚刚添加了周期性同步.

    public void finishLogin(String authToken) {
    Log.i(TAG, "finishLogin()");
    final Account account = new Account(mUsername, "be.company.syncAdapterTest");
    if(mRequestNewAccount) {
        mAccountManager.addAccountExplicitly(account, mPassword, null);
        ContentResolver.setIsSyncable(account, MY_AUTHORITY, 1);

        Bundle params = new Bundle();
        params.putBoolean(ContentResolver.SYNC_EXTRAS_EXPEDITED, false);
        params.putBoolean(ContentResolver.SYNC_EXTRAS_DO_NOT_RETRY, false);
        params.putBoolean(ContentResolver.SYNC_EXTRAS_MANUAL, false);           
        ContentResolver.addPeriodicSync(account, MY_AUTHORITY, params, 30);
        ContentResolver.setSyncAutomatically(account, MY_AUTHORITY, true);
        ContentResolver.requestSync(account,MY_AUTHORITY,params);
    } else {
        mAccountManager.setPassword(account, mPassword);
    }
    final Intent intent = new Intent();
    intent.putExtra(AccountManager.KEY_ACCOUNT_NAME, "ACCOUNT_TEST");
    intent.putExtra(AccountManager.KEY_ACCOUNT_TYPE, "be.company.syncAdapterTest");
    setAccountAuthenticatorResult(intent.getExtras());
    setResult(RESULT_OK, intent);
    finish();
}
Run Code Online (Sandbox Code Playgroud)

在perfomSync()方法中,我有以下方法:

    @Override
public void onPerformSync(Account account, Bundle extras, String authority,
        ContentProviderClient provider, SyncResult syncResult) { …
Run Code Online (Sandbox Code Playgroud)

android android-contentprovider android-syncadapter

11
推荐指数
4
解决办法
1万
查看次数

使用离线同步设计Android应用程序.我应该使用SyncAdapter吗?

我正在尝试为Web服务创建一个Android To-Do客户端,具有脱机缓存和同步功能.

当您向服务器发送帖子消息时,Web服务以JSON格式返回有关服务器上的待办事项任务的数据.要在服务器上添加待办事项,您需要向服务器发送一个JSON包含任务详细信息的POST,然后它将为您返回一项任务UUID.

我想实现某种类型的同步,以便我在离线时添加的任务被发送到服务器,并且当Internet可用时,来自服务器的数据将同步到应用程序(双向同步).

目前,我已经编写了一个基于To-Do应用程序的基本内容提供程序,它不与服务器通信.我的问题是实现这种功能的最佳方法是什么?

计划尝试

我想我需要从服务器获取JSON,将其推送到本地SQLite DB,执行比较并查找未同步的项目并将它们推送到服务器.我想我可以通过在ContentProvider中添加异步查询来做到这一点(不确定这是否是最好的方法).

阙:

我应该编写自己的相同的实现还是可以SyncAdapter做所有这些魔术?我还应该考虑其他任何设计参数吗?

android android-syncadapter

11
推荐指数
2
解决办法
1万
查看次数

SyncAdapter与JobScheduler

排除JobScheduler仅支持API> 21 的事实- JobSchedulers旨在完全取代SyncAdapters?或者SyncAdapter包含缺少的任何功能JobScheduler

我的用例是每隔几个小时同步一次RSS提要.这对于JobScheduler来说是可行的 - 对吗?

android android-syncadapter android-5.0-lollipop android-jobscheduler

11
推荐指数
2
解决办法
3460
查看次数

Android多个同步适配器项目,如Google帐户?

我目前将Android应用设置为使用Android的AccountManager功能,使用SyncAdapter和经过身份验证的帐户自动执行同步.

我只有一个同步适配器运行,它同步所有内容,但我想将其分开,以不同的间隔执行不同内容的同步.

我如何拥有像Google这样的多个同步项?

Google帐户截图

android sync accountmanager android-syncadapter

11
推荐指数
1
解决办法
2947
查看次数

如何在原生Android联系人应用程序中添加自定义应用程序标

我正在开发一个应用程序,要求是在Android的原生联系人应用程序中显示应用程序图标,用于同时使用我的应用程序的联系人,即他们已在我的应用程序上安装和注册.我想在联系人中显示WhatsApp类型标签.

请参阅这两张图片以供参考

在此输入图像描述

在此输入图像描述

我正在获取所有联系人并将其发送到服务器,该服务器返回使用我的应用程序的联系人列表.只有那些联系人我必须在联系人应用程序中显示我的应用程序图标.

我读了很多资源,但直到现在还没有打到它.我创建了帐户并将其添加到设置中(因为这是第一步).然后我创建了SyncAdapter并尝试同步联系人但无法同步它.

在过去的3天里,我一直坚持这一点.

我还注意到,但是我的应用程序帐户已添加到"设置" - >"帐户"中,但未在"联系人"应用程序("联系人" - >"帐户")中添加,当我尝试在此处添加应用帐户时.它没有添加.

android android-syncadapter android-account

11
推荐指数
1
解决办法
788
查看次数