标签: android-syncadapter

如何向Android SyncManager发送sync-complete信号?

我在我的SyncAdapter中使用了cancelRequest(),就在它退出线程之前,但我决定只打算用另一个想要取消正在进行同步的实体(UI)(花太长时间,哎呀,等等.)

现在我的同步认为总有一个待处理请求 - 我用它来忽略新请求.

我要做的另一件事是Service中的侦听器线程正在侦听ContactsContract.AUTHORITY的更改,以便它可以启动我的聚合的同步.

更新:此侦听器线程正在泄漏.当我完成它时,我发出了一个.stop(),然而,我认为有一个处理程序可以保持活动并使服务停止运行.

我想将SyncResults发送到一些实体(即SyncManager),它跟踪这些事情以进行待处理,回收等.

我错过了什么?

android android-syncadapter

5
推荐指数
2
解决办法
3120
查看次数

Google帐户所需的可同步功能

我正在查看JumpNotes的代码,有一件事我无法理解. JumpNotes:AccountList.java

public static final String[] GOOGLE_ACCOUNT_REQUIRED_SYNCABILITY_FEATURES =
        new String[]{ "service_ah" };
Run Code Online (Sandbox Code Playgroud)

这用于获取谷歌帐户,如下所示:

mAccountManager.getAccountsByTypeAndFeatures(SyncAdapter.GOOGLE_ACCOUNT_TYPE,
            SyncAdapter.GOOGLE_ACCOUNT_REQUIRED_SYNCABILITY_FEATURES,
Run Code Online (Sandbox Code Playgroud)

这个功能是什么"service_ah"?这是什么意思?有什么方法可以获得Android上谷歌帐户的身份验证服务的来源吗?

android google-authentication google-account android-syncadapter

5
推荐指数
1
解决办法
366
查看次数

帐户同步每分钟

在我AccountAuthenticatorActivity尝试addAccountExplicitly使用以下行后,为帐户设置同步选项:

ContentResolver.setIsSyncable(account, authority, 1);
ContentResolver.setSyncAutomatically(account, authority, true);
int seconds = getResources().getInteger(R.integer.syncFrequencySeconds);
ContentResolver.addPeriodicSync(account, authority, new Bundle(), seconds);
Run Code Online (Sandbox Code Playgroud)

syncFrequencySeconds设置为86400(每24小时).但我的同步适配器仍然每分钟触发一次.我究竟做错了什么?(同步本身没有任何问题)

android android-syncadapter

5
推荐指数
1
解决办法
1768
查看次数

同一个应用程序中的多个Syncadapter

我需要在我的应用程序中有两个单独的同步.一个是每12小时完成一次.另一个是每周完成的.我希望它们都在相同的"帐户"下,因此可以单独启用/禁用每种类型的同步.

实际上,帐户是虚拟的 - 我不需要那个功能,所以我的所有验证方法都返回null.

但我只能让一个syncadapter显示一个帐户.知道我怎么能做到这一点?

android android-syncadapter

5
推荐指数
0
解决办法
387
查看次数

SyncAdapter是否支持在同步期间上传和下载?

我想写一个Android SyncAdapter,我有点困惑.在同步(即in onPerformSync())期间,我希望能够从远程服务器提取数据,但也将数据推送到远程服务器(是双向同步?还是在服务器也是双向同步)启动同步?).

无论如何,我猜我需要android:supportsUploading="true"在清单文件中设置.但是,根据我的理解,文档说这只适用于上传.是否无法在与SyncAdapter?的同步操作中进行上传和下载.

谢谢.

编辑:看起来样本SyncAdapter有双向同步(虽然我不是100%肯定) - 但仅限于API 11+.我想支持早期的API级别 - 这不可能吗?

android synchronization android-syncadapter

5
推荐指数
1
解决办法
839
查看次数

使用一个SyncAdapter同步多个提供程序

我想将com.android.contacts和com.android.calendar与一个SyncAdapter同步.这可能吗?

如果是,我如何编辑以下行?

<sync-adapter
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:contentAuthority="com.android.contacts"
    android:accountType="com.package.account"
    android:supportsUploading="false"
    android:userVisible="true" />
Run Code Online (Sandbox Code Playgroud)

android android-syncadapter

5
推荐指数
1
解决办法
2376
查看次数

First time sync loops indefinitely

I'm having a situation with SyncAdapter I don't know how to fix.

I'm using periodic syncs. The onPerformSync method just logs some info for me to know that the process is working (no calls to notifyChanges in content providers or anything else).

The project consists of two apps: The first one creates a user account (for testing purposes only). The second holds the sync adapter. Note that this is perfectly legal for the scope of the project.

I first install …

android android-syncadapter

5
推荐指数
0
解决办法
760
查看次数

AccountManager.addAccount在某些Android手机中显式返回false

在我的应用程序中,登录后有一个帐户创建部分,通常用于将应用程序数据与远程数据同步.

但是如果手机处于不稳定状态,它就不会创建帐户而且AccountManager.addAccount明确地返回false.但是当我检查帐户[]时,它返回的长度为1

 AccountManager accountManager = AccountManager.get(this);
                Account[] accounts = accountManager.getAccountsByType("com.sample.account");
                if (accounts.length == 0)
                {
                    addAccountAndSync();
                }
Run Code Online (Sandbox Code Playgroud)

但应用程序未显示在"电话设置"的"帐户"中. 有人遇到过这种情况.

android accountmanager android-syncadapter

5
推荐指数
1
解决办法
831
查看次数

Android Flavors,ContentProviders,SyncAdapters和AccountManager

我为我的Android应用程序定义了一些flavor和buildTypes

productFlavors {
    X {
        applicationId = "com.x.xxxx"
    }
    Y {
        applicationId = "com.y.yyyy"
    }
}

buildTypes {
    release {
        minifyEnabled true
        proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard_rules.txt'                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     
    }

    debug {
        applicationIdSuffix ".debug"
    }
}
Run Code Online (Sandbox Code Playgroud)

这样做可以创建不同的flavor/buildType组合.

现在为了确保ContentProviders工作而我没有收到Failure [INSTALL_FAILED_CONFLICTING_PROVIDER]错误,我已将代码中的android:authorities="${applicationId}"AUTHORITY引用更改为BuildConfig.APPLICATION_ID.

这使得ContentProvider工作正常,即当我在同一部手机上安装两种不同类型时,它不会引发错误.它让我安装它们.

下一步是错误发生的地方.我使用SyncAdapterAccountManager控制一些事情.我已修改ACCOUNT_TYPE使用了APPLICATION_ID.因为不能够使用gradle这个问题的${applicationId}非清单XML资源文件,我已经创造了每味不同的目录结构和复制syncadapter.xml,并authenticator.xml有相应的authorityaccount type字符串.

我也尝试过这个博客中描述的技术 - http://blog.jensdriller.com/android-gradle-workaround-for-missing-placeholder-support-in-resource-files/

最受欢迎的答案是在Gradle中使用构建类型来运行在一台设备上使用ContentProvider的相同应用程序但事情似乎不起作用.

有人能够最近上班吗?

xml android gradle android-syncadapter android-productflavors

5
推荐指数
0
解决办法
314
查看次数

Android App被SyncAdapter杀死

我有一个SyncAdapter,它在初始入门过程(登录/注册)期间被调用,该过程处理联系人以查找已经使用该系统的用户联系人.

当SyncAdapter运行时,应用程序在特定设备(Moto G)上几乎每次都被杀死(10次中有9次).

我最初的想法是,由于设备的可用RAM有限,应用程序正在被杀死.所以,我试着证实这个理论:

@Override
public void onPerformSync(Account account, Bundle extras, String authority,
                          ContentProviderClient provider, SyncResult syncResult) {
    ActivityManager.MemoryInfo mi = new ActivityManager.MemoryInfo();
    ActivityManager activityManager = (ActivityManager) getContext()
            .getSystemService(Context.ACTIVITY_SERVICE);
    activityManager.getMemoryInfo(mi);
    long availableMegs = mi.availMem / 1048576L;
    Log.d(TAG, "Available: " + availableMegs);
    Log.d(TAG, "Low Memory: " + mi.lowMemory);
}
Run Code Online (Sandbox Code Playgroud)

事实证明RAM可能不是问题,因为日志看起来像这样:

03-09 11:38:34.444 19193-21339/mypackage.sandbox D/SyncAdapter: Available: 252
03-09 11:38:34.445 19193-21339/mypackage.sandbox D/SyncAdapter: Low Memory: false
Run Code Online (Sandbox Code Playgroud)

在日志中我发现了这个:

 03-09 11:38:35.233 865-1610/? I/ActivityManager: Killing 19193:mypackage.sandbox/u0a579 (adj 0): depends on provider …
Run Code Online (Sandbox Code Playgroud)

android android-syncadapter

5
推荐指数
0
解决办法
725
查看次数