标签: android-syncadapter

使用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

我正在尝试为我的Android应用创建一个SyncAdapter,以显示来自某个特定频道的YouTube视频.这些视频属于公共领域,因此我不希望用户登录,创建帐户,验证自己,上传数据或使用联系人数据库.我只是希望SyncAdapter定期使用该频道的最新视频元数据更新我的应用程序数据库.我已经构建了一个ContentProvider来访问我的数据库.我确实喜欢这样一个事实,即SyncProvider将处理关闭同步,调度和重试退避机制以进行更新的能力.

我早些时候问过SyncAdapter是不是我的用例的好选择,我被告知它是.我观看了Google I/O视频,阅读了文档,阅读了博客......(参见下面的列表).我一直都无法工作.我得到的最好的方法是让SyncAdapter帐户显示在全局"帐户和同步设置"中,但不起作用.即使这有效,但它还不够理想,因为我更喜欢用户除了从我的应用程序内部看不到帐户.如果没有其他选项,这是可以接受的,只要他们不需要访问它来设置它,因为一切都会默认为每天一次自动同步.

我甚至试图按原样使用SampleSyncAdapter并在验证代码部分中放置断点.没有一个断点被击中,所以我看不到触发调用的内容或包含的数据.我原本以为我至少会得到那么多.

尽管有这样的建议,我开始认为使用SyncAdapter是一个坏主意.我还没有找到一个接近我想要的例子,更不用说教程或完整,有组织和清晰的文档了.这似乎应该是许多应用程序想要做的常见任务.

请在此帖子上添加有关此用例的任何好文档.我什么都找不到.
如果没有这个,我认为建议所有人不要在这个用例中使用SyncAdapters是公平的.我不是在为其他用例说话,所以如果它不像我的那样,请不要继续使用它对你的用例有用.

了解为黄金时段准备的API级别的版本也很有帮助.有关版本号的问题已经发布了很多.我试图保持尽可能低的最多用户.我目前的API目标是7.

这里是我尝试无效的链接列表,其他人可能会发现这些更有帮助:

http://developer.android.com/resources/samples/SampleSyncAdapter/index.html

http://www.google.com/events/io/2010/sessions/developing-RESTful-android-apps.html

http://naked-code.blogspot.com/2011/05/revenge-of-syncadapter-synchronizing.html

http://www.c99.org/2010/01/23/writing-an-android-sync-provider-part-1/

http://www.c99.org/2010/01/23/writing-an-android-sync-provider-part-2/

http://www.finalconcept.com.au/article/view/android-account-manager-step-by-step

http://www.finalconcept.com.au/article/view/android-account-manager-step-by-step-1

http://www.finalconcept.com.au/article/view/android-account-manager-step-by-step-2

没有身份验证和Android服务的Android SyncAdapter

为什么ContentResolver.requestSync不会触发同步?

android accountmanager android-syncadapter

8
推荐指数
2
解决办法
4991
查看次数

如何正确设置syncAdapter?

我是syncAdapter的新手.我已经观看了谷歌IO视频(这里的讲座演示),我已经阅读了2篇关于它的教程(这里这里).

我也试过了教程的代码,令人沮丧的是我无法弄清楚如何正确实现syncAdapter.

我认为有些偏好(在清单或xml文件中)都是错误的,但我找不到原因.

我成功地允许添加同步帐户并显示它的图标.

但是,我面临一些奇怪的问题,我无法弄清楚它们为什么会发生:

  1. 允许帐户同步.最终用户无法按下同步按钮.即使我在添加帐户时尝试添加此类内容,它似乎也不会自动同步.

  2. 添加帐户后,最终用户可以看到帐户的奇怪描述:"res/xml/authenticator.xml".不知道它的设置在哪里.

  3. 当点击帐户(添加后),我看到一个空列表(这是问题.如何在那里添加更多项目?将来,我还需要与facebook和gmail同步,但我不能成功将我自己的contentProvider添加到此列表中.

我不需要进行真正的授权,所以我只是在从AccountAuthenticatorActivity扩展的活动中使用下一个代码:

accountManager.addAccountExplicitly(account, PASSWORD, null);
final Intent intent = new Intent();
intent.putExtra(AccountManager.KEY_ACCOUNT_NAME, USERNAME);
intent.putExtra(AccountManager.KEY_ACCOUNT_TYPE, accountType);
setAccountAuthenticatorResult(intent.getExtras());
setResult(RESULT_OK, intent);
finish();
Run Code Online (Sandbox Code Playgroud)

我还尝试使用此处描述的内容设置自动同步并启用同步.

android synchronization android-contentprovider android-syncadapter

8
推荐指数
1
解决办法
3576
查看次数

在不创建帐户的情况下使用SyncAdapter

我的应用程序允许人们使用和管理他们的数据,无论他们是否已登录.但是,由于我唯一地标识每个设备,我想同步来自我的匿名用户(不是已登录的用户)的数据.因此,我想知道在这种情况下创建匿名帐户是否是一个好习惯,因为SyncAdapters仅适用于帐户.

我应该为我的匿名用户创建一个帐户,还是应该将他们的数据与threads/AsyncTasks/Loaders同步?特别是,有没有办法让ContentResolver.requestSync()在不需要帐户的情况下工作?

android asynchronous android-syncadapter android-account

8
推荐指数
1
解决办法
1207
查看次数

更改android自定义帐户的用户名和密码

我已经为android创建了同步适配器,它可以与我的服务器同步数据.我工作正常,但现在我希望能够更改我的用户名和密码,而无需再次删除和添加帐户.我怎样才能做到这一点?

我有一个登录屏幕,其中包含用于输入用户名和密码的编辑文本,但是如何将这些更改应用到帐户?

编辑:

找到了如何更改密码的方法:

AccountManager.get(mContext).setPassword(account, password );
Run Code Online (Sandbox Code Playgroud)

帐户是我的帐户,密码是新密码.

所以现在我的问题是:如何更改USERNAME?

android accountmanager android-syncadapter android-account

8
推荐指数
1
解决办法
4269
查看次数

如何让我的自定义帐户类型显示在Android联系人应用程序中?

我已经创建了一个自定义帐户类型,我可以在android ContactsContract ContentProvider中成功创建该类型的联系人.但是,在编辑默认联系人应用程序中的联系人时,我很难弄清楚如何获取我的自定义帐户标签和图标.

编辑自定义联系人类型时,标签应为"联系人",右侧是应用程序图标.相反,编辑我的类型的联系人始终显示"仅限电话,未同步的联系人"标签.有关示例,请参见下面的第一个屏幕截图

奇怪的是,它确实提取了我的帐户名称,您可以在错误标签下面的屏幕截图中看到它(以"+1415"开头).

我已经在帐户下的设置应用程序中成功显示了我的应用程序的标签和图标,所以我知道我正在做正确的事情.请参阅下面的第二个屏幕截图,以获取相关证明(帐户标签为"Bolt").

在Android联系人应用中编辑自定义联系人 设置应用程序具有自定义帐户标签和图标

我有以下authenticator.xml:

<account-authenticator xmlns:android="http://schemas.android.com/apk/res/android"
    android:accountType="@string/account_type"
    android:label="@string/app_name"
    android:icon="@drawable/app_icon"
    android:smallIcon="@drawable/app_icon" />
Run Code Online (Sandbox Code Playgroud)

这是我的syncadapter.xml:

<sync-adapter xmlns:android="http://schemas.android.com/apk/res/android"
    android:contentAuthority="@string/contacts_content_authority"
    android:accountType="@string/account_type"
    android:userVisible="true"
    android:allowParallelSyncs="false"
    android:isAlwaysSyncable="true"
    android:supportsUploading="false" />
Run Code Online (Sandbox Code Playgroud)

任何人都可以指出我哪里出错吗?我可以根据需要提供更多信息.我尝试使用CLIENT_IS_SYNCADAPTER参数从我的SyncAdapter中创建联系人但没有改变任何内容.我也尝试过其他一些东西,但还没有任何工作.

android android-syncadapter android-contacts android-account

8
推荐指数
1
解决办法
2136
查看次数

使用addPeriodicSync时,停止同步适配器最初同步

我在我的项目中使用同步适配器,它将定期同步.要为同步适配器创建帐户,我使用以下代码.

我面临的问题是此代码触发了初始同步.文档中没有提到此代码将使同步最初运行.

事实上即使在谷歌示例项目中也有额外的代码用于触发我已删除的初始同步.

我使用了此示例中的代码:http: //developer.android.com/samples/BasicSyncAdapter/index.html

即使我添加命令ContentResolver.cancelSync(account,null); 同步适配器仍然运行.

如何阻止同步适配器最初同步.它应该在同步间隔周期过去后第一次同步.

Account account = new Account(context.getPackageName(), context.getPackageName());

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

if (accountManager.addAccountExplicitly(account, null, null)) {

        // Inform the system that this account supports sync
        ContentResolver.setIsSyncable(account, context.getPackageName(), 1);

        // Inform the system that this account is eligible for auto sync when the network is up
        ContentResolver.setSyncAutomatically(account, context.getPackageName(), true);

        // Recommend a schedule for automatic synchronization. 
        // The system may modify this based
        // on other scheduled syncs and network utilization. …
Run Code Online (Sandbox Code Playgroud)

android android-contentresolver android-syncadapter

8
推荐指数
1
解决办法
969
查看次数

firebase适用于我的Android应用程序吗?

我有一个Android应用程序,目前使用Retrofit来检索/添加/更新和删除云后端的数据.我在我的应用程序中实现了SyncAdapter模式.在后端,数据存储在关系数据库表中,而servlet则存储JSON结构.我正在考虑使用Firebase.我知道firebase不使用关系表,数据存储在JSON树之类的结构中.

  1. Firebase是否使Retrofit网络库无关紧要?
  2. 编写SyncAdapter需要大量的样板代码(除了XML之外,还需要内容提供者,帐户,绑定服务等).但是,Firebase使用回调,当服务器上的数据自动更改时,会通知您的应用.Firebase是比SyncAdapter更好的选择吗?

android android-syncadapter firebase retrofit

8
推荐指数
0
解决办法
471
查看次数

同步适配器中的ContentResolver.requestSync在Android中不起作用

我正在尝试使用'StubProvider'和'StubAuthenticator'编写同步适配器,我遵循了官方指南,我的代码运行没有任何错误,但'onPerformSync()'没有被调用,我尝试了一切但没有用.

我的完整项目可以从https://www.dropbox.com/s/48bgj3wweehaieu/MyApplication.zip?dl=0下载

这是我正在使用的类:

类MainActivity

public class MainActivity extends FragmentActivity implements View.OnClickListener {

    // Constants
    // The authority for the sync adapter's content provider
    public static final String AUTHORITY = "com.syncadaptertest.StubProvider";
    // An account type, in the form of a domain name
    public static final String ACCOUNT_TYPE = "com.syncadaptertest";
    // The account name
    public static final String ACCOUNT = "dummyaccount";
    // Instance fields
    Account mAccount;

    private ImageButton mRefreshBtn = null;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);

        mRefreshBtn …
Run Code Online (Sandbox Code Playgroud)

java android stub background-process android-syncadapter

8
推荐指数
2
解决办法
6085
查看次数