我正在使用 SyncAdapter 进行一些服务器客户端同步。在official android developer guide提到有不同的方法来触发同步。
您只需调用:
ContentResolver.requestSync(ACCOUNT, AUTHORITY, null);
当服务器数据发生变化时(例如在 GCM 上)。
只需使用一个ContentObserver
public class TableObserver extends ContentObserver {
@Override
public void onChange(boolean selfChange) {
onChange(selfChange, null);
}
@Override
public void onChange(boolean selfChange, Uri changeUri) {
ContentResolver.requestSync(ACCOUNT, AUTHORITY, null);
}
}
执行以下操作:
ContentResolver.setSyncAutomatically(ACCOUNT, AUTHORITY, true)
现在,每当有一个打开的 TCP/IP 连接时,SyncAdapter 就会被触发以执行同步。
这对我来说是重要且有趣的部分。为此,您只需执行此操作(至少这是写在开发人员指南中的):
public static final long SECONDS_PER_MINUTE = 60L;
public static final long SYNC_INTERVAL_IN_MINUTES = 60L;
public static final long SYNC_INTERVAL = SYNC_INTERVAL_IN_MINUTES * SECONDS_PER_MINUTE;
ContentResolver.addPeriodicSync(
ACCOUNT,
AUTHORITY,
Bundle.EMPTY,
SYNC_INTERVAL);
解决方案 1、2 和 3 可以正常工作。定期同步没有。如果我只是按照第 4 点所述进行操作,则永远不会触发同步(是的,我确实在我的 Android 设备的系统设置中启用了自动同步)。
如果我执行以下操作:
ContentResolver.setIsSyncable(account, ContentProviderMeasure.AUTHORITY, 1);
ContentResolver.setSyncAutomatically(account, ContentProviderMeasure.AUTHORITY, true);
ContentResolver.addPeriodicSync(account, ContentProviderMeasure.AUTHORITY, new Bundle(), 3600);
SyncAdapter 同步刷新每分钟调用一次(应该是每小时/3600 秒 = 1 小时)。如果我执行以下操作:
ContentResolver.setIsSyncable(account, ContentProviderMeasure.AUTHORITY, 1);
ContentResolver.addPeriodicSync(account, ContentProviderMeasure.AUTHORITY, new Bundle(), 3600);
同步仅在创建时触发一次,之后再也不会触发。是的,正如我已经提到的,Android 设备设置中的自动同步已启用。
在 android 设备设置 accountmanager 中为我的应用程序手动触发同步工作正常。
那么为什么定期同步不起作用?
我在装有 Android 6.0 的 Nexus 4、装有 Android 4.4 的 Galaxy Ace 和装有 Android 4.1 的 Galaxy S3 Mini 上进行了测试。所有设备都不会定期同步。
最佳答案
我已经为 Calendar 实现了定期同步 权限。
添加 <uses-permission android:name="android.permission.WRITE_SYNC_SETTINGS" /> list 文件中的权限。
添加以下同步方法:
public void syncAllAccountsPeriodically(Context contextAct, long seconds) throws Exception {
AccountManager manager = AccountManager.get(contextAct);
Account[] accounts = manager.getAccountsByType("com.google");
String accountName = "";
String accountType = "";
for (Account account : accounts) {
accountName = account.name;
accountType = account.type;
break;
}
Account a = new Account(accountName, accountType);
ContentResolver.addPeriodicSync(a, "com.android.calendar", new Bundle(), seconds*1000);
}
希望对您有所帮助。
关于android - 定期同步从不触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35879056/
请帮助我理解范围运算符...和..之间的区别,作为Ruby中使用的“触发器”。这是PragmaticProgrammersguidetoRuby中的一个示例:a=(11..20).collect{|i|(i%4==0)..(i%3==0)?i:nil}返回:[nil,12,nil,nil,nil,16,17,18,nil,20]还有:a=(11..20).collect{|i|(i%4==0)...(i%3==0)?i:nil}返回:[nil,12,13,14,15,16,17,18,nil,20] 最佳答案 触发器(又名f/f)是
我正在学习Rails,并阅读了关于乐观锁的内容。我已将类型为integer的lock_version列添加到我的articles表中。但现在每当我第一次尝试更新记录时,我都会收到StaleObjectError异常。这是我的迁移:classAddLockVersionToArticle当我尝试通过Rails控制台更新文章时:article=Article.first=>#我这样做:article.title="newtitle"article.save我明白了:(0.3ms)begintransaction(0.3ms)UPDATE"articles"SET"title"='dwdwd
我有一个rubyonrails应用程序。我按照facebook的说明添加了一个像素。但是,要跟踪转化,Facebook要求您将页面置于达到预期结果时出现的转化中。即,如果我想显示客户已注册,我会将您注册后转到的页面作为成功对象进行跟踪。我的问题是,当客户注册时,在我的应用程序中没有登陆页面。该应用程序将用户带回主页。它在主页上显示了一条消息,所以我想看看是否有一种方法可以跟踪来自Controller操作而不是实际页面的转化。我需要计数的Action没有页面,它们是ControllerAction。是否有任何人都知道的关于如何执行此操作的gem、文档或最佳实践?这是进入布局文件的像素
文章目录一、概述简介原理模块二、配置Mysql使用版本环境要求1.操作系统2.mysql要求三、配置canal-server离线下载在线下载上传解压修改配置单机配置集群配置分库分表配置1.修改全局配置2.实例配置垂直分库水平分库3.修改group-instance.xml4.启动监听四、配置canal-adapter1修改启动配置2配置映射文件3启动ES数据同步查询所有订阅同步数据同步开关启动4.验证五、配置canal-admin一、概述简介canal是Alibaba旗下的一款开源项目,Java开发。基于数据库增量日志解析,提供增量数据订阅&消费。Git地址:https://github.co
最近因为项目需要,需要将Android手机系统自带的某个系统软件反编译并更改里面某个资源,并重新打包,签名生成新的自定义的apk,下面我来介绍一下我的实现过程。APK修改,分为以下几步:反编译解包,修改,重打包,修改签名等步骤。安卓apk修改准备工作1.系统配置好JavaJDK环境变量2.需要root权限的手机(针对系统自带apk,其他软件免root)3.Auto-Sign签名工具4.apktool工具安卓apk修改开始反编译本文拿Android系统里面的Settings.apk做demo,具体如何将apk获取出来在此就不过多介绍了,直接进入主题:按键win+R输入cmd,打开命令窗口,并将路
我有一个super简单的脚本,它几乎包含了FayeWebSocketGitHub页面上用于处理关闭连接的内容:ws=Faye::WebSocket::Client.new(url,nil,:headers=>headers)ws.on:opendo|event|p[:open]#sendpingcommand#sendtestcommand#ws.send({command:'test'}.to_json)endws.on:messagedo|event|#hereistheentrypointfordatacomingfromtheserver.pJSON.parse(event.d
我想写一点“Deprecate-It”库并经常使用“method_added”回调。但是现在我注意到在包含模块时不会触发此回调。是否有任何回调或变通方法,以便在某些内容包含到自身时通知类“Foobar”?用于演示的小Demo:#IncludingModulswon'ttriggermethod_addedcallbackmoduleInvisibleMethoddefinvisible"Youwon'tgetacallbackfromme"endendclassFoobardefself.method_added(m)puts"InstanceMethod:'#{m}'addedto'
我看到有关未找到文件min.map的错误消息:GETjQuery'sjquery-1.10.2.min.mapistriggeringa404(NotFound)截图这是从哪里来的? 最佳答案 如果ChromeDevTools报告.map文件的404(可能是jquery-1.10.2.min.map、jquery.min.map或jquery-2.0.3.min.map,但任何事情都可能发生)首先要知道的是,这仅在使用DevTools时才会请求。您的用户不会遇到此404。现在您可以修复此问题或禁用sourcemap功能。修复:获取文
类似的问题,但对于java,Keepingi18nresourcessynced如何保持i18nyamllocals的key同步?即,当将key添加到en.yml时,如何将它们添加到nb.yml或ru.yml?如果我在my_title:"atitle"旁边添加键my_label:"sometextinenglish"我想把它给我的其他本地人我指定,因为我不能做所有的翻译,它应该回到其他语言的英语例如en.ymlsomegroup:my_tile:"atitleinenglish"my_label:"sometextinenglish"othergroup:...我想发出命令,将整个键和
以下代码使用了触发器运算符。(1..10).each{|x|print"#{x},"ifx==3..x==5}为什么结果是3,4,5?我觉得应该是3,4。如教程中所述,此表达式在x==3时为真,并一直为真,直到x==5。如果“5”的计算结果为false,如何打印它?谁能为我澄清一下? 最佳答案 来自“TheRubyProgrammingLanguage”的重要链接是:4.6.9.1Booleanflip-flopsWhenthe..and...operatorsareusedinaconditional,suchasanifstat