在我的应用程序中,我使用的是联系人同步适配器,但它有很多与主应用程序共享的信息.有适配器需要工作的设置(如登录信息和用户更改任何同步设置),所以我目前在同一个进程中运行它,并与主ap通信使用getApplicationContext(),然后我有一些共享Application同步适配器在同步过程中使用的变量.
但是在培训文档和在线的一些教程中,示例适配器被设置为在其自己的进程中运行 - 它android:process=":sync"在清单中使用.这有必要吗?如果它确实在一个单独的进程中运行,我该如何与主应用程序进行通信?
我目前正在开发一个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
我在我的应用中实现了同步适配器,需要在设备帐户设置中添加帐户.我遵循Android文档中给出的相同方法.它工作正常,直到棉花糖,我可以在设备帐户中看到我的帐户.但在Android N预览中,帐户不会添加到设备帐户.AccountManager的addAccountExplicitly()方法始终返回false.有人遇到过这个问题吗?
android android-contentprovider android-syncadapter android-authenticator android-account
我正在制作一个字典类的应用程序使用SQLite.我有一个表保留一对外来单词及其翻译.我想将此表与Google文档中的特定电子表格同步.
我发现这个很棒的库可以检索和操作GoogleSpreadsheets,所以至少我已经被覆盖了.但我对同步感到不舒服.现在,
SyncAdapter来实现我SQLite和我之间的同步GoogleSpreadsheet吗?如果是的话,我该怎么做呢?我会检索并操纵电子表格中的行onPerformSync吗?在Google I/O vids上(特别是在Android REST客户端应用程序上),它们似乎非常有说服力,SyncAdapter但我不确定它是否可以帮助我没有实际的REST服务.
提前致谢..
android sync google-sheets android-service android-syncadapter
我想在ActionBar中显示ProgressBar,而我的SyncAdapter正在主动与Web同步内容.
我已尝试将SyncStatusObserver与ContentProvider.addStatusChangeListener一起使用.但是,我无法检查SyncAdapter是否正在运行.我只能检查:
可以组合这些标志:!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) 我正在试图找出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) 我正在尝试为Web服务创建一个Android To-Do客户端,具有脱机缓存和同步功能.
当您向服务器发送帖子消息时,Web服务以JSON格式返回有关服务器上的待办事项任务的数据.要在服务器上添加待办事项,您需要向服务器发送一个JSON包含任务详细信息的POST,然后它将为您返回一项任务UUID.
我想实现某种类型的同步,以便我在离线时添加的任务被发送到服务器,并且当Internet可用时,来自服务器的数据将同步到应用程序(双向同步).
目前,我已经编写了一个基于To-Do应用程序的基本内容提供程序,它不与服务器通信.我的问题是实现这种功能的最佳方法是什么?
我想我需要从服务器获取JSON,将其推送到本地SQLite DB,执行比较并查找未同步的项目并将它们推送到服务器.我想我可以通过在ContentProvider中添加异步查询来做到这一点(不确定这是否是最好的方法).
我应该编写自己的相同的实现还是可以SyncAdapter做所有这些魔术?我还应该考虑其他任何设计参数吗?
排除JobScheduler仅支持API> 21 的事实- JobSchedulers旨在完全取代SyncAdapters?或者SyncAdapter包含缺少的任何功能JobScheduler?
我的用例是每隔几个小时同步一次RSS提要.这对于JobScheduler来说是可行的 - 对吗?
android android-syncadapter android-5.0-lollipop android-jobscheduler
我目前将Android应用设置为使用Android的AccountManager功能,使用SyncAdapter和经过身份验证的帐户自动执行同步.
我只有一个同步适配器运行,它同步所有内容,但我想将其分开,以不同的间隔执行不同内容的同步.
我如何拥有像Google这样的多个同步项?

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


我正在获取所有联系人并将其发送到服务器,该服务器返回使用我的应用程序的联系人列表.只有那些联系人我必须在联系人应用程序中显示我的应用程序图标.
我读了很多资源,但直到现在还没有打到它.我创建了帐户并将其添加到设置中(因为这是第一步).然后我创建了SyncAdapter并尝试同步联系人但无法同步它.
在过去的3天里,我一直坚持这一点.
我还注意到,但是我的应用程序帐户已添加到"设置" - >"帐户"中,但未在"联系人"应用程序("联系人" - >"帐户")中添加,当我尝试在此处添加应用帐户时.它没有添加.