标签: android-syncadapter

为什么AccountManager.addAccount明显返回false?

Google的Android文档(http://developer.android.com/reference/android/accounts/AccountManager.html#addAccountExplicitly(android.accounts.Account,java.lang.String,android.os.Bundle))说:

返回

如果帐户已成功添加,则为True;如果帐户已存在,则为false,帐户为空,或发生其他错误

我变得虚假.具体来说,还有哪些其他错

android android-syncadapter android-authenticator android-account

19
推荐指数
1
解决办法
2089
查看次数

Android SyncAdapter用例

我们目前在做什么?
我们在使用Web服务(RESTful)公开的服务器上有一些结构化的文本数据.我的应用程序定期轮询此服务器(AlarmManagerService)以获取数据并将其保存在本地数据库(sqlite)上.此外,用户事先经过身份验证和授权以进行访问.

问题:

  1. SDK中有一个SyncAdapter/AccountManager类,我想知道它是否可以在我的应用程序中用于实现上述同步?

  2. 如果是,后端需要什么样的基础设施才能支持使用此适配器进行同步设置?链接到文章等,提供使用此适配器和其他信息的详细信息表示赞赏.

android android-syncadapter

18
推荐指数
1
解决办法
8103
查看次数

使用SyncAdapters时登录两次

我正在创建一个新的Android应用程序,SyncAdapter用于处理数据库同步.我有一切就绪,应用程序工作正常,但我注意到我登录了两次.

AuthenticatorActivity类(它扩展AccountAuthenticatorActivity)验证用户和密码时,首次登录.

如果用户和密码正确,AuthenticatorActivity那么:

  • 如果account不存在则使用它创建它mAccountManager.addAccountExplicitly()
  • authToken使用保存intent.putExtra(AccountManager.KEY_AUTHTOKEN, authToken);

这基本上是从Android样本中复制/粘贴的,所以我猜它没关系.

问题在于SyncAdapter启动和使用时

authtoken = mAccountManager.blockingGetAuthToken(account,
          AuthenticatorActivity.PARAM_AUTHTOKEN_TYPE, true);
Run Code Online (Sandbox Code Playgroud)

调用扩展类中的getAuthToken()方法.在这个方法中,我再次访问登录端点.AuthenticatorAbstractAccountAuthenticator

从那时起,登录端点在authToken到期之前不会再次被击中.

这不是困扰我的东西,但我想知道是否有办法避免两次登录.

android android-syncadapter

16
推荐指数
1
解决办法
1793
查看次数

Android SyncAdapter自动初始化同步

我有一个SyncAdapter用于我的应用程序,以及AccountManager将我的应用程序帐户添加到Android帐户管理器.我向帐户管理器添加帐户的代码如下所示:

Bundle data = new Bundle(5);
data.putString(_PEOPLE_ID, people_id);
data.putString(_FIRST_NAME, first_name);
data.putString(_LAST_NAME, last_name);
data.putString(_PLAN, plan);
data.putString(_BIRTHDAY, birthday);
Account account = new Account(username, _ACCOUNT_TYPE);
try {
    boolean created;
    created = _account_manager.addAccountExplicitly(account,
                                   _cryptography.encrypt(_SEED, password), data);
    response.accountCreated(created);
    _account_manager.setAuthToken(account, _TOKEN_TYPE, session_token);
    _model.updateActiveAccount(people_id, username, password);
    SharedPreferences.Editor settings = _settings.edit();
    settings.putString(_ACCOUNT_TYPE, account.name);
    settings.putString(_TOKEN_TYPE, session_token);
    settings.commit();
    // Tells the content provider that it can sync this account
    ContentResolver.setIsSyncable(account, AUTHORITY, 1);
    final Bundle extras = new Bundle(1);
    extras.putBoolean(SYNC_EXTRAS_INITIALIZE, true);
    ContentResolver.addPeriodicSync(account, AUTHORITY, extras, 900);
} catch …
Run Code Online (Sandbox Code Playgroud)

android accountmanager android-syncadapter

15
推荐指数
3
解决办法
1万
查看次数

SyncAdapter替代品

我认为众所周知,在最糟糕的主题列表中,SyncAdapter像钻石一样闪亮!根据http://udinic.wordpress.com/2013/07/24/write-your-own-android-sync-adapter/ SyncAdapter带来4个主要好处: A)电池效率 B)接口C)内容意识D)重试机制;

如果在任何情况下都需要将sqlite数据库与远程SQL数据库同步,并且不需要这些优势,那么还有什么其他选择**?它可以很容易地管理带有php的数据库之间的服务,我为上传部分同步过程做了这个,但对于下载部分我觉得如果我使用查询填充方法很傻,因为在不久的将来远程数据库可能变得越来越大.我想到的唯一解决方案就是自己编写同步活动/服务,但我不知道如何访问SQLite数据库/表的最后更新日期(除了在每个表中指定_date),以检查是否有必要再次同步?我觉得我的头在两个地方之间!

sql sqlite android android-syncadapter

15
推荐指数
1
解决办法
1592
查看次数

在Android ContentProvider中从网络同步时防止网络同步循环

我正在编写自己的ContentProvider,它将使用SyncAdapter同步到Web服务.

当同步适配器正在修改内容提供程序的数据时,问题发生在内部调用getContentResolver().notifyChange导致同步循环时,提供程序触发网络同步.

客户端应用程序执行修改时需要带有网络同步标志的notifyChange,但在同步适配器修改时应避免使用.

如何在内容提供者内部轻松判断客户端应用程序(应该在修改时触发网络同步)或同步适配器(不应触发网络同步)使用它.

目前我正在使用不同的CONTENT_URI(同步适配器使用CONTENT_URI_NO_SYNC访问数据,使用CONTENT_URI访问客户端应用程序)以便能够区分这两种类型的访问并相应地设置网络同步标志.

java android android-contentprovider android-syncadapter

14
推荐指数
1
解决办法
2826
查看次数

在Android应用的帐户和同步菜单下显示设置

我正在为Android应用程序实现一个syncadapter,并希望在"帐户和同步"菜单下对该帐户进行设置.我已经在DropBox应用程序中看到了这一点(如下所示),但我无法找到有关如何执行此操作的文档.我添加了帐户,只想在此菜单中添加指向帐户设置的链接.

在此输入图像描述

android accounts android-syncadapter

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

在android中联系同步适配器

我想在我的应用程序中使用同步适配器来同步本机和第三方联系人(FB除外)与服务器.(只有客户端到服务器单向同步)

我有两个疑问 -

1)如果设备中有多个同步适配器,并且如果另一个同步适配器已清除脏位,我的同步适配器是否能够立即检测到联系人更改/更新.

2)我用过

ContentResolver.setIsSyncable(account, ContactsContract.AUTHORITY, 1);
ContentResolver.setSyncAutomatically(account, ContactsContract.AUTHORITY, true);     
Run Code Online (Sandbox Code Playgroud)

将联系人与服务器同步.

它确实每隔30秒开始同步.

但是我想让它在添加或删除或更新联系人时立即得到通知以启动perfromSync操作.

我是否也需要使用观察者?

android sync android-syncadapter

13
推荐指数
1
解决办法
5872
查看次数

在SyncAdapter中提交的SharedPreference未在Activity中更新?

我在同步成功后在SyncAdapter中更改并提交SharedPreference,但是当我在Activity中访问首选项时,我没有看到更新的值(相反,我看到的是旧值).我究竟做错了什么?不同的上下文?

我在SyncAdapter中更新首选项:

class SyncAdapter extends AbstractThreadedSyncAdapter {
    private int PARTICIPANT_ID;
    private final Context mContext;
    private final ContentResolver mContentResolver;

    public SyncAdapter(Context context, boolean autoInitialize) {
        super(context, autoInitialize);
        mContext = context;
        mContentResolver = context.getContentResolver();
    }

    public SyncAdapter(Context context, boolean autoInitialize, boolean allowParallelSyncs) {
        super(context, autoInitialize, allowParallelSyncs);
        mContext = context;
        mContentResolver = context.getContentResolver();
    }

    @Override
    public void onPerformSync(Account account, Bundle extras, String authority,
                              ContentProviderClient provider, SyncResult syncResult) {

        final SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(mContext);
        PARTICIPANT_ID = Integer.parseInt(prefs.getString("participant_id", "0"));

        if (success) {
            // save and …
Run Code Online (Sandbox Code Playgroud)

android sharedpreferences android-syncadapter

13
推荐指数
1
解决办法
2771
查看次数

跨多个进程的Otto/EventBus

是否可以post在一个进程中进行事件(例如,SyncAdapter其中包含android:process=":sync"manifest属性)并使用OttoEventBus在另一个进程中(在常规应用程序UI中)接收它?

我知道,IntentBroadcastReceiver跨多个进程通信工作得很好,但我想有简单性和灵活性奥托/ EventBus.

android android-syncadapter otto greenrobot-eventbus

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