我想在Android应用程序和服务器之间同步数据(例如数据库记录,媒体).如果您已经看过Evernote
或类似的应用程序,您当然明白我的意思.
我有一些问题(想象一下我们想要同步DB记录):
每个用户都有自己的一部分服务器空间(例如Evernote
或Dropbox
).也许用户通过手机创建新记录并在服务器中创建新记录.我如何将这些记录匹配在一起?如果有相同ID的记录你建议我使用哪种算法?
除了JSON,手机设备和服务器之间有没有办法发送数据?
如果SyncAdapter和ContentProvider可以解决我的问题,请完全为我解释.(如果您可以向我提供一些示例或教程或任何建议或关键字,以帮助扩大/指导我的搜索也将受到赞赏).
我正在尝试实现Google IO中讨论的内容提供商同步适配器模式- 幻灯片26.我的内容提供商正在工作,当我从Dev Tools Sync Tester应用程序触发它时,我的同步工作,但是当我调用ContentResolver时.来自我的ContentProvider的requestSync(帐户,权限,捆绑),我的同步永远不会被触发.
ContentResolver.requestSync(
account,
AUTHORITY,
new Bundle());
Run Code Online (Sandbox Code Playgroud)
编辑 - 添加的清单片段我的清单xml包含:
<service
android:name=".sync.SyncService"
android:exported="true">
<intent-filter>
<action
android:name="android.content.SyncAdapter" />
</intent-filter>
<meta-data android:name="android.content.SyncAdapter"
android:resource="@xml/syncadapter" />
</service>
Run Code Online (Sandbox Code Playgroud)
- 编辑
与我的同步服务关联的syncadapter.xml包含:
<?xml version="1.0" encoding="utf-8"?>
<sync-adapter xmlns:android="http://schemas.android.com/apk/res/android"
android:contentAuthority="AUTHORITY"
android:accountType="myaccounttype"
android:supportsUploading="true"
/>
Run Code Online (Sandbox Code Playgroud)
不确定其他代码会有用.传递给requestSync的帐户是"myaccounttype",传递给调用的AUTHORITY与我的syc适配器xml匹配.
ContentResolver.requestSync是否是请求同步的正确方法?看起来同步测试工具直接绑定到服务并调用启动同步,但这似乎违背了与同步架构集成的目的.
如果这是请求同步的正确方法,那么同步测试器为什么会工作,而不是我对ContentResolver.requestSync的调用?我需要在捆绑中传递一些东西吗?
我正在运行2.1和2.2的设备上的模拟器中进行测试.
我尝试了解Android同步逻辑.我不明白的是syncadapter.xml
Android SDK示例项目中包含的文件SampleSyncAdapter
.如果您下载了SDK示例,则它应位于以下文件夹中:
SDK/android-sdk-PLATFORM/samples/android-VERSION/SampleSyncAdapter/res/xml/syncadapter.xml
Run Code Online (Sandbox Code Playgroud)
我读过,内容提供者的权限应该是字符串或对资源的引用.内容权限到底是什么com.android.contacts
?以下是文件的内容(没有许可证信息和注释,API级别16).
<sync-adapter xmlns:android="http://schemas.android.com/apk/res/android"
android:contentAuthority="com.android.contacts"
android:accountType="com.example.android.samplesync"
android:supportsUploading="false"
android:userVisible="true"
/>
Run Code Online (Sandbox Code Playgroud) 我想为我想要与服务器同步的内容实现SyncAdapter.看来要这样做,您需要为SyncAdapter XML属性文件中指定的权限注册ContentProvider.
由于我不希望手机的其余部分可以访问此内容,因此我没有实现自己的ContentProvider并使用个人实现来存储此内容.
您是否知道在不提供ContentProvider的情况下是否可以使用SyncAdapter提供同步?
非常感谢你.
我正在开发一个销售点应用程序,需要非常好的同步机制.我们有Magento数据库.安卓设备有SQLite本地Db.现在我们需要以下列方式进行同步:
本地------同步到--------------->服务器(向上同步)
服务器------同步到--------------->本地(向下同步)
有两件事:
1)写(如何保重?)
对于我在本地进行的每个更改,它将直接将本地同步到服务器
2)回写(如何保养???)
每当服务器发生变化时,我们都需要将所有本地服务器与服务器同步.
因此,任务是:识别服务器更新
并同步我们的当地人.就像有4个设备在商店中运行,我们通过一个设备添加了一个新客户.现在我希望其他三个设备本地数据库也更新了有关该客户和服务器的信息也已更新.
我听说过后台线程并在一段时间后运行线程.但是,这样做的最佳方法是什么,不会影响应用程序.此外,所有Big Retail商店都使用同步过程.他们用的是什么?
任何帮助表示赞赏.
android synchronization background-process point-of-sale android-syncadapter
我创建了一个带有虚拟帐户的同步适配器,我不希望它出现在"设置"应用程序的"帐户"列表中,也不希望用户按下"设置"中的"添加帐户"按钮.我在同步适配器定义中尝试了android:userVisible ="false",但仍然显示该帐户.我在仿真器和3个物理设备上试过这个.一切都正常工作,它同步我需要的所有数据,唯一的错误是我在列表上看到帐户,我不想.
我的authenticator.xml是:
<account-authenticator xmlns:android="http://schemas.android.com/apk/res/android"
android:accountType="net.astagor.android.hhp.account"
android:icon="@drawable/ic_launcher"
android:smallIcon="@drawable/ic_launcher"
android:label="@string/app_name"
/>
Run Code Online (Sandbox Code Playgroud)
我的syncadapter.xml是:
<sync-adapter xmlns:android="http://schemas.android.com/apk/res/android"
android:contentAuthority="net.astagor.android.hhp"
android:accountType="net.astagor.android.hhp.account"
android:userVisible="false"
android:supportsUploading="true"
android:allowParallelSyncs="false"
android:isAlwaysSyncable="true"
/>
Run Code Online (Sandbox Code Playgroud)
我添加我的adpater像这样:
Account account = AuthenticatorService.GetAccount();
AccountManager accountManager = (AccountManager) context
.getSystemService(Context.ACCOUNT_SERVICE);
if (accountManager.addAccountExplicitly(account, null, null)) {
ContentResolver.setIsSyncable(account, StubProvider.AUTHORITY, 1);
ContentResolver.setSyncAutomatically(account,
StubProvider.AUTHORITY, true);
ContentResolver.addPeriodicSync(account, StubProvider.AUTHORITY,
new Bundle(), SYNC_FREQUENCY);
}
Run Code Online (Sandbox Code Playgroud)
我在帐户列表和添加帐户列表中获取帐户.
请帮忙!:)
我使用odoo移动框架.如何在应用启动时启用同步选项?(默认情况下禁用该选项.)
Android 2.0的新闻稿指出新版本支持同步适配器,因此电子邮件和日历不仅可以与gmail和交换同步.但是,在线没有可用的信息如何编写这样的同步适配器.有没有人试过它和一些示例代码?
假设我的应用程序实现了SyncAdapter功能,并没有定义定期同步.在这种情况下会发生同步吗?我可能会想到的第一个场景是本地ContentProvided /数据库内容更改.什么是服务器更改?SyncAdapter将如何了解这一点?
我观看了Google I/O REST演讲并阅读了幻灯片:http://www.google.com/events/io/2010/sessions/developing-RESTful-android-apps.html
关于如何很好地处理远程服务器引发的更新错误,我仍然有点不清楚.我已经实现了自己的ContentProvider和SyncAdapter.考虑这种情况:
通过REST调用更新用户的联系人详细信息:
我的问题是,SyncAdapter向我的ContentProvider发出信号的最佳方式是,这个更改需要从应用程序的本地数据库中退出,并向我的Activity发出更新请求失败的信号(并传递返回的错误消息)从服务器)?
我的活动需要在等待结果时显示进度微调器,并知道请求是成功还是失败.
为了使用来自服务器的内容更新本地应用程序数据库,SyncAdapter模式对我来说非常有意义,而且我的工作正常.但是对于从应用程序到服务器的更新,我似乎无法找到处理上述方案的好方法.
另一件事......;)
假设我调用ContentResolver.notifyChange(uri,null,true); 来自我的ContentProvider的update()方法.true
以及android:supportsUploading="true"
将导致我的SyncAdapter的onPerformSync()被调用.太棒了,但是在onPerformSync()中,如何判断我应该同步哪个URI?每次收到Sync请求时,我都不想简单地刷新整个数据库.但是你甚至无法将Bundle传递给notifyChangeCall()以传递给onPerformSync().
我在onPerformSync()上看到的所有例子都非常简单,并没有使用自定义的ContentProvider,那里有任何现实世界的例子吗?而且文档有点像燕窝.先生,维吉尔·多布扬斯基(Virgil Dobjanschi),你没有划桨就把我留在了小溪里.
rest android sync android-contentprovider android-syncadapter