标签: android-syncadapter

SampleSyncAdapter断点不起作用

我正在使用Eclipse来了解SampleSyncAdapter示例的工作原理.我不能让我的断点工作.我在多个位置设置了一个断点但没有被击中.例如,AuthenticatorActivity.onCreate()永远不会被调用.谁知道为什么?

谢谢.

debugging android sample android-syncadapter

10
推荐指数
2
解决办法
3857
查看次数

Android日历提供程序:是否有可用于多个设备的事件的唯一标识符?

我正在使用Android日历提供程序来显示事件.我还通过使用事件的EVENT_ID作为参考,将事件与本地应用程序数据库中的图像相关联.

我现在想知道是否可以在多个设备上保留相同的引用?

我了解到,对于account_type ='com.google',GoogleCalendarSyncAdapter使用CalendarContract.EventsColumns.SYNC_DATA1来存储事件的googleID.但是,这似乎不是访问数据的可靠方法,因为SYNC_DATA列的使用可能随时发生变化,并且只能由SyncAdapter修改.

有没有其他方法可以跨设备保持对日历提供程序事件的引用?

android calendar android-contentprovider android-syncadapter

10
推荐指数
1
解决办法
735
查看次数

SyncAdapter完成后如何通知调用Activity?

在我的Android项目中,我使用自定义SyncAdapter来下载数据并将其存储在本地SQLite数据库中.

public class CustomSyncAdapter extends AbstractThreadedSyncAdapter {

    public CustomSyncAdapter(Context context, boolean autoInitialize) {
        super(context, autoInitialize);
    }

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

        // 1) Download data via AsyncTask
        // 2) Store data via ContentProvider
    }
}
Run Code Online (Sandbox Code Playgroud)

Activity使用ContentResolver诸如... 来安排主要的同步

ContentResolver.requestSync(account, Authentication.AUTHORITY, bundle);
Run Code Online (Sandbox Code Playgroud)

Activity在同步完成时是否有通用方式通知呼叫?

android synchronization callback android-contentresolver android-syncadapter

10
推荐指数
1
解决办法
4396
查看次数

Android:听取像WhatsApp这样的联系人更改

我正在构建一个严重依赖用户联系人的应用程序.

我已经创建了一个AccountRawContacts在需要时代表此帐户创建.
我使用SyncAdapter,事情很棒.

但我仍然错过了这个难题的一些部分:

我正在尝试实现类似于WhatsApp的行为.这样 -

当任何联系人的姓名或电话发生变化时 - 它将被发送到服务器进行评估.

这个联系人是否已经在"我的"中RawContacts,他是否刚刚由用户创建.

我知道有ContentObserver但是跟踪ContactsContract.Contacts.CONTENT_URI似乎是错误的事情,因为它没有给出具体的改变,加上它被提升到很多次,并且从许多不感兴趣的事件.

我知道WhatsApp正在使用SyncAdapter,但我认为他们可能会做更多的事情.

任何想法将不胜感激.

android android-contentresolver android-contentprovider android-syncadapter

10
推荐指数
1
解决办法
885
查看次数

捆绑包持续多长时间由SyncManager保留?

我有一个应用程序SyncAdapter.除了正常的同步之外,我还会触发一个USER_READ事件,我只需将它传递Bundle给适配器而不保留它:

Bundle settingsBundle = new Bundle();
settingsBundle.putString(SyncAdapter.USER_READ, uid);
ContentResolver.requestSync(account, authority, settingsBundle);
Run Code Online (Sandbox Code Playgroud)

这将在将来的某个时候正确调用我的同步例程.每个uid组中的Bundle将触发其自己的运行,一切都被预期同步.

如果现在连接不好,或者请求超时,那么我设置了一个软错误:

syncResult.stats.numIoExceptions += 1;
Run Code Online (Sandbox Code Playgroud)

这将导致请求稍后重复.这也很好用.


这些SyncRequests/Bundles持续多长时间?

该文件指出,该遇到软错误将导致exponentional补偿和同步将在以后运行一段时间.

  • 会在某个时候取消吗?多次软错误后?
  • 重启设备后会再次排队吗?

鉴于连接错误并且同步因软错误而多次失败:我想知道是否只是将同步请求排入队列,或者我是否必须自己提供某种持久性以确保在某些时候发送请求.

android android-syncadapter

10
推荐指数
1
解决办法
224
查看次数

SyncAdapter:已创建帐户,requestSync确定,但setSync自动无法正常工作

我刚为我的应用创建了一个帐户.

  • 该帐户在设置中可见
  • 我在XML中设置了syncable ="true"
  • 我可以通过按设置执行手动同步 - > onPerformSync被调用
  • 我可以通过调用ContentResolver.requestSync来执行"代码"同步 - > onPerformSync被调用
  • 当然,是的,在设置中启用了同步.我不使用任何节电器.

我也遵循了这里的所有步骤:https://stackoverflow.com/a/5255360/327402

这是我通过代码获取同步的代码

AccountManager am = AccountManager.get(this); 
Account[] accounts = am.getAccountsByType(ACCOUNT);
//Log.e("DEBUG", "Accounts: " + accounts.length);
if (accounts.length == 0) {
    Account account = new Account(getString(R.string.app_name), ACCOUNT);
    ContentResolver.setIsSyncable(account, AUTHORITY, 1);
    ContentResolver.addPeriodicSync(account, AUTHORITY, new Bundle(), 7200);
    ContentResolver.setSyncAutomatically(account, AUTHORITY, true);
    if (am.addAccountExplicitly(account, "pass1", null))
        Log.i("DEBUG", "account Created: " + account.name + ", " + account.type);
    else
        Log.i("DEBUG", "addAccountExplicitly returned false");
    }
else{
    ContentResolver.requestSync(accounts[0], AUTHORITY, new Bundle());// THIS …
Run Code Online (Sandbox Code Playgroud)

account android android-syncadapter

10
推荐指数
1
解决办法
1079
查看次数

如何在没有SyncAdapter的情况下在Android上实施帐户

我正在使用内置帐户系统(使用AccountManager API)为Android应用程序实现登录系统.

在Android 2.2+上一切都很好,但在Android 2.1上不包括SyncAdapter导致在帐户设置屏幕中重新启动(请参阅http://code.google.com/p/android/issues/detail?id=5009AccountManager没有SyncAdapter?)

为了解决这个问题,我实现了一个存根SyncAdapter,它只是null从中返回IBinder onBind(Intent intent),并将相关内容添加到清单中.这解决了Android 2.1上的重启问题.

然而,它引入了另一个问题:添加帐户后,Android系统稍后会启动帐户同步.虽然没有发生错误(事实上我的SyncAdapter什么都不做,但除非通过返回null,否则无法导致错误),同步图标仍然卡在顶部的通知栏中.这导致Android同步系统保持永久唤醒锁定,防止设备休眠.

该帐户未在帐户设置屏幕中列出任何可同步组件(在"数据和同步"标题下),并且始终在帐户列表中显示"同步已关闭"同步状态(即使同步图标在通知栏).禁用帐户同步不会消除此问题.删除帐户可以解决问题.

我的猜测是我不应该返回null.我应该返回ThreadedSyncAdapter的基本实现吗?任何帮助获得帐户系统没有关联同步在2.1和2.2+上正常工作非常感谢.

android user-accounts accountmanager android-syncadapter android-wake-lock

9
推荐指数
2
解决办法
4581
查看次数

使用SyncAdapter与*local*gmail和facebook app数据同步

对于我需要开发的应用程序,我需要能够使用SyncAdapter同步gmail和facebook数据.我希望与本地的facebook和gmail应用程序(如果可用)同步,而不是远程服务器.与本地应用程序同步意味着更少的电池使用,更少的网络使用,更快的同步等.当然,如果需要,我将设置正确的权限.

我的问题:

  • 如果有任何应用程序(gmail/facebook)可用,是否可以查询它们的数据(消息,事件等)?
  • 如果没有,是否有可能从他们那里得到认证令牌(或任何形式的凭证),将允许我查询服务器,而不需要用户把他们每个人的用户名和密码一次?
  • 如果可能的话,也可以在任一个facebook或gmail应用程序同步后立即自动同步,这样我就可以尽快获得新数据?

如果这些都不可用,我想我需要自己获取数据,这与这个问题无关.

gmail android facebook android-syncadapter

9
推荐指数
1
解决办法
1487
查看次数

Android OAuth2 Bearer令牌最佳做法

这个很好的教程非常好地介绍了Android上的帐户身份验证,并通过使用Android来实现AccountManager.

但是,我需要使用承载令牌为OAuth2 API创建客户端应用程序以进行身份​​验证.在获得令牌时,我收到了它的到期时间戳,但我不清楚存储的位置以及如何正确使用它.问题是,如果我不想不必要地去服务器,应用程序会意识到,只有在请求任何随机资源时从服务器收到HTTP 401错误后,承载才会变为无效.那么,解决这个问题的最佳做法是什么:

  1. 我的代码中的每个网络请求都应该具有重试机制,以防承载令牌在此期间变为无效吗?我可能会invalidateAuthToken在捕获异常时重试.
  2. 可以同步适配器以某种方式帮助吗?

由于我是Android开发的新手,我希望解决方案也可能与我预期的完全不同.

如果它是相关的,我打算使用Volley进行服务器通信.

android accountmanager oauth-2.0 android-syncadapter android-volley

9
推荐指数
1
解决办法
6100
查看次数

SyncAdapter未被调用"网络痒"

概观

我使用了Google的使用SyncAdapter 的教程而不使用ContentProvider,Authenticator ..等.onPerformSync(...)当我需要通过de SyncAdapter"上传"到服务器时,它可以正常工作.

现在,正如您可以想象的那样,我也需要从服务器下载(是的,我知道使用Google的Cloud Messaing系统会更好,但这是我给出的设置,我不能改变它).为此,我想利用"网络痒"Android系统在有网络可用的情况下进行定期同步.为此,我声明如下:

ContentResolver.setIsSyncable(accounts[0], AUTHORITY, 1);
ContentResolver.setSyncAutomatically(accounts[0], AUTHORITY, true); 
Run Code Online (Sandbox Code Playgroud)

但是我的SyncAdapter 没有被调用.查看其他stackOverFlow问题,如果使用SyncAdapter定位API 10或更低版本似乎存在问题,并且必须调用before方法之前显式添加帐户.所以我最终得到了这个:

AccountManager accountManager = (AccountManager) context.getSystemService(ACCOUNT_SERVICE);

    Account[] accounts = accountManager.getAccounts();
    if(accounts.length == 0){ //ADD DUMMY ACCOUNT
        Account newAccount = new Account(ACCOUNT, ACCOUNT_TYPE);
        ContentResolver.setIsSyncable(accounts[0], AUTHORITY, 1);
        ContentResolver.setSyncAutomatically(accounts[0], AUTHORITY, true); 
        accountManager.addAccountExplicitly(newAccount, null, null);
    }else{
         accounts = accountManager.getAccounts();
        ContentResolver.setIsSyncable(accounts[0], AUTHORITY, 1);   
        ContentResolver.setSyncAutomatically(accounts[0], AUTHORITY, true); 
    }
Run Code Online (Sandbox Code Playgroud)

现在,当用户登录时,或者如果应用程序被杀死并再次启动,则会执行此代码.我想知道,我应该打电话setIsSyncable,setSyncAutomatically只有当我第一次添加dummyAccount时?

此外,SyncAdapter的"良好"部分是它会在发生异常时继续进行调用.但我不太明白这是怎么回事,所以相反我有这个:

private void profileUpdate(){       
TableAccounts db = TableAccounts.getInstance(getContext());
boolean isRecordDirty …
Run Code Online (Sandbox Code Playgroud)

android android-syncadapter

9
推荐指数
1
解决办法
1181
查看次数