我正在使用Eclipse来了解SampleSyncAdapter示例的工作原理.我不能让我的断点工作.我在多个位置设置了一个断点但没有被击中.例如,AuthenticatorActivity.onCreate()永远不会被调用.谁知道为什么?
谢谢.
我正在使用Android日历提供程序来显示事件.我还通过使用事件的EVENT_ID作为参考,将事件与本地应用程序数据库中的图像相关联.
我现在想知道是否可以在多个设备上保留相同的引用?
我了解到,对于account_type ='com.google',GoogleCalendarSyncAdapter使用CalendarContract.EventsColumns.SYNC_DATA1来存储事件的googleID.但是,这似乎不是访问数据的可靠方法,因为SYNC_DATA列的使用可能随时发生变化,并且只能由SyncAdapter修改.
有没有其他方法可以跨设备保持对日历提供程序事件的引用?
android calendar android-contentprovider android-syncadapter
在我的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
我正在构建一个严重依赖用户联系人的应用程序.
我已经创建了一个Account并RawContacts在需要时代表此帐户创建.
我使用SyncAdapter,事情很棒.
但我仍然错过了这个难题的一些部分:
我正在尝试实现类似于WhatsApp的行为.这样 -
当任何联系人的姓名或电话发生变化时 - 它将被发送到服务器进行评估.
这个联系人是否已经在"我的"中RawContacts,他是否刚刚由用户创建.
我知道有ContentObserver但是跟踪ContactsContract.Contacts.CONTENT_URI似乎是错误的事情,因为它没有给出具体的改变,加上它被提升到很多次,并且从许多不感兴趣的事件.
我知道WhatsApp正在使用SyncAdapter,但我认为他们可能会做更多的事情.
任何想法将不胜感激.
android android-contentresolver android-contentprovider android-syncadapter
我有一个应用程序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补偿和同步将在以后运行一段时间.
鉴于连接错误并且同步因软错误而多次失败:我想知道是否只是将同步请求排入队列,或者我是否必须自己提供某种持久性以确保在某些时候发送请求.
我刚为我的应用创建了一个帐户.
我也遵循了这里的所有步骤: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) 我正在使用内置帐户系统(使用AccountManager API)为Android应用程序实现登录系统.
在Android 2.2+上一切都很好,但在Android 2.1上不包括SyncAdapter导致在帐户设置屏幕中重新启动(请参阅http://code.google.com/p/android/issues/detail?id=5009和AccountManager没有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
对于我需要开发的应用程序,我需要能够使用SyncAdapter同步gmail和facebook数据.我希望与本地的facebook和gmail应用程序(如果可用)同步,而不是远程服务器.与本地应用程序同步意味着更少的电池使用,更少的网络使用,更快的同步等.当然,如果需要,我将设置正确的权限.
我的问题:
如果这些都不可用,我想我需要自己获取数据,这与这个问题无关.
这个很好的教程非常好地介绍了Android上的帐户身份验证,并通过使用Android来实现AccountManager.
但是,我需要使用承载令牌为OAuth2 API创建客户端应用程序以进行身份验证.在获得令牌时,我收到了它的到期时间戳,但我不清楚存储的位置以及如何正确使用它.问题是,如果我不想不必要地去服务器,应用程序会意识到,只有在请求任何随机资源时从服务器收到HTTP 401错误后,承载才会变为无效.那么,解决这个问题的最佳做法是什么:
invalidateAuthToken在捕获异常时重试.由于我是Android开发的新手,我希望解决方案也可能与我预期的完全不同.
如果它是相关的,我打算使用Volley进行服务器通信.
android accountmanager oauth-2.0 android-syncadapter android-volley
概观
我使用了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)