我正在寻找一种方法来启用/禁用"常规同步设置"中的"自动同步"复选框.
股票电源控制小部件也具有此功能.如果这个小部件可以做,那么我也应该有一个解决方案,对吗?请各位帮助我,我正在拼命寻找网络上的解决方案但没有成功.
此操作是否可能必须进行用户交互?我知道我可以发送一个Intent打开同步视图,但这不是我的意图!
我不是在寻找特定帐户的同步设置,就像我在这个论坛中找到的那样
ContentResolver.setSyncAutomatically(Account account, String authority, boolean sync);
Run Code Online (Sandbox Code Playgroud) 我对android上的"USE_CREDENTIALS"权限有一些疑问:
它似乎用于使用你自己的syncadapter.它还可以用于与属于其他应用程序的其他syncaAdapter(或其内容提供商)进行通信吗?
如果#1的答案为否,那么为什么它存在于第一位,如果它是你自己的syncAdapter呢?
除syncAdapter之外还有其他用途吗?
如果我不需要任何身份验证,是否可以在没有此权限的情况下使用syncAdapter?
即使不使用syncAdapter,也可以访问已同步的帐户,使用他们的凭据并对其进行特殊处理(例如,收集最近同步的数据),假设您拥有此权限(和/或其他人)?
permissions android credentials android-contentprovider android-syncadapter
无论如何要告诉java rx使用observeOn函数中的当前线程?我正在为android syncadapter编写代码,我希望在同步适配器线程中观察结果,而不是在主线程中.
使用Retrofit + RX Java的示例网络调用看起来像这样:
MyRetrofitApi.getInstance().getObjects()
.subscribeOn(Schedulers.io())
.observeOn(<current_thread>)
.subscribe(new Subscriber<Object>() {
//do stuff on the sync adapter thread
}
Run Code Online (Sandbox Code Playgroud)
我尝试过使用
...
.observeOn(AndroidSchedulers.handlerThread(new Handler(Looper.myLooper())))
...
Run Code Online (Sandbox Code Playgroud)
这是相同的方式安卓RX创建主线程调度程序,但只要我代替不工作Looper.myLooper()的Looper.getMainLooper().
我可以使用Schedulers.newThread(),但作为其复杂的同步代码与许多服务器调用我将不断创建一个新的线程,只是为了触发新的网络调用,再次创建新的线程,以启动更多的网络调用.有没有办法做到这一点?或者我的方法本身是完全错误的?
我记得读过同步适配器的广播接收器接口或同步进度事件的一些ResultReceiver.SyncAdapter模式中是否有内置的东西,或者是自己种植的?
我正在创建一个自定义的Android SyncAdapter,并在SDK示例"SampleSyncAdapter"之后遇到麻烦.- 我正在创造我的相当于xml/syncadapter.xml.这是我困惑的部分:
android:contentAuthority="com.android.contacts"
android:accountType="com.example.android.samplesync"
Run Code Online (Sandbox Code Playgroud)
AbstractThreadedSyncAdapter的文档指出:
在
android:contentAuthority和android:accountType属性指出哪些内容权威,哪些帐户类型此同步适配器提供.
文档是循环的,它没有说明这个名称没有告诉你.我的印象是,两者都将从我公司的名字开始,com.acme.但从那里我不知道.我怀疑字符串可以是任何东西,只要它们是全局唯一的,以免与可能在同一设备上的任何其他应用程序冲突.我认为这意味着我需要在我的代码中的其他地方使用这些确切的字符串.但是,我想知道,我需要这些字符串?!我试图grep for com.android.contacts和前面提到的文件是它唯一使用的地方,我可以找到.因此,contentAuthority通过查看示例无法判断如何使用它.
如果是这样,我可以将它们都放在字符串资源中并在需要时通过资源ID引用它们吗?这些属性究竟是什么以及它们是如何使用的?有没有更好的方法来确定我应该为这些和其他领域的应用程序选择什么值?
所以,我重申的问题是,当您转到设置 - >帐户和同步并选择您SyncAdapter正在与云服务器同步创建的帐户时,并选择删除帐户,就您SyncAdapter而言会发生什么?将显示一个对话框,要求您确认,并且将删除与该帐户关联的电话上的数据.我不能轻易相信框架可以自动删除我SyncAdapter存储在本地数据库中的数据,但似乎暗示删除帐户将(并且我同意应该)删除该数据.我SyncAdapter是否会添加一些作为删除帐户的回调来处理从本地数据库中删除所有适当的数据?也许必须通过AccountManager反而完成; AccountManager当帐户被删除时我得到通知,从那里我可以触发数据删除而不用SyncAdapter.
编辑:在相关的说明中,同步管理员SyncAdapter是否为添加新帐户时同步的每个帐户调用我的帐户?我onPerformSync(...)在添加帐户时看到正在执行以前添加的帐户以及刚刚添加的帐户,并且想要停止该操作.
我创建了一个包含:users和关联的Rails服务器:comments.它用作Android客户端的后端API.在服务器上加载和存储数据的交换格式是JSON.以下是相关的迁移.
class CreateUsers < ActiveRecord::Migration
def change
create_table :users do |t|
t.string :name
t.timestamps
end
end
end
Run Code Online (Sandbox Code Playgroud)
...
class CreateComments < ActiveRecord::Migration
def change
create_table :comments do |t|
t.references :users
t.string :subject
t.text :message
t.timestamps
end
end
end
Run Code Online (Sandbox Code Playgroud)
所有用户都已导入.因此,仅为:users资源配置了读访问权限.因此,:comments应该可以添加新条目.这是可用的路线.
user_comments GET /users/:user_id/comments(.:format) comments#index
POST /users/:user_id/comments(.:format) comments#create
new_user_comment GET /users/:user_id/comments/new(.:format) comments#new
user_comment GET /users/:user_id/comments/:id(.:format) comments#show
users GET /users(.:format) users#index
user GET /users/:id(.:format) users#show
Run Code Online (Sandbox Code Playgroud)
在客户端,我使用Servicewith AsyncTasks来下载,解析并将用户存储到本地SQLite数据库中.A ContentProvider将缓存的用户提供给UI.从服务器下载的用户对象包含users …
我一直在尝试SyncAdapter上班.男人,多么荒谬的复杂一团糟.我甚至不知道从哪里开始,所以我想我只会转储所有相关的代码.如果我在下面的代码中随处可见断点,那么在启动时会调用以下两个东西(按此顺序):
StubContentProvider.OnCreate() AndroidApp.InitSyncService() (当我的应用程序启动时显式调用).就是这样.没有任何与之相关的东西SyncAdapter被调用(严重的是,我把断点放在与它相关的每个类的每个方法的顶部.)
我已经在应用程序的这个方面工作了大约一个半月,并且在不同的时间使它比现在更具功能性,但我不确定我是如何使它功能性降低的.我试过调整它的每个方面.我已经改变了ACCOUNT_TYPE,并AUTHORITY以各种值.当我阅读文档并了解更多信息时,我会在这里和那里进行调整,但它似乎并不想为我而来.
这是我们的应用程序的最后一个主要功能,所以我再也不能把它放在一边了.
AndroidApp.cs
public static class AndroidApp
{
public static string ACCOUNT_TYPE = "georgesmobile.android.backgroundservice";
public static string ACCOUNT = "mobile";
public static string AUTHORITY = "georgesmobile.android.provider";
public static Account SyncAccount { get; private set; }
public static void InitSyncService(Context context)
{
if (SyncAccount == null)
{
CreateSyncAccount(context);
ContentResolver.SetIsSyncable(AndroidApp.SyncAccount, AndroidApp.AUTHORITY, 1);
ContentResolver.SetSyncAutomatically(AndroidApp.SyncAccount, AndroidApp.AUTHORITY, true);
Bundle bund = new Bundle();
ContentResolver.AddPeriodicSync(AndroidApp.SyncAccount, AndroidApp.AUTHORITY, bund, 2);
}
}
private static Account …Run Code Online (Sandbox Code Playgroud) 我有一台运行php和mysql的服务器.有一些php脚本以json格式返回服务器上的数据.这个数据是我的Android应用程序消耗的.应用程序启动时会同步数据与服务器同步,第一次大约需要2分钟,之后大约需要20秒.我可以在我的应用程序中使用syncadapter,从而避免在启动时同步,并在应用程序运行时在后台同步数据吗?或者其他一些策略会更合适.
我使用齐射库实现了SyncAdapter.它正在工作,但后来我意识到Iam从onPerformSync方法调用异步(排球请求)代码.
@Override
public void onPerformSync(Account account, Bundle extras, String authority, ContentProviderClient contentProviderClient, SyncResult syncResult) {
JsonObjectRequest jsObjRequest = new JsonObjectRequest
(Request.Method.GET, url, null, new Response.Listener() {
@Override
public void onResponse(JSONObject response) {
// time consuming code
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
// TODO Auto-generated method stub
}
});
// Access the RequestQueue through your singleton class.
MySingleton.getInstance(this).addToRequestQueue(jsObjRequest);
// onPerformSync end reached before volley request processing ends
}Run Code Online (Sandbox Code Playgroud) concurrency multithreading android asynchronous android-syncadapter
android ×9
asynchronous ×1
c# ×1
concurrency ×1
credentials ×1
listener ×1
permissions ×1
rest ×1
reverse-dns ×1
rx-android ×1
rx-java ×1
xamarin ×1
xml ×1