我有一个工作正常的同步适配器.它不需要互联网连接,因为它需要将地址簿与另一个本地存储(我的应用程序)同步.当Wifi关闭且设备没有任何互联网连接时,Android会在"帐户和同步"设置活动中禁用同步.
即使连接关闭,有没有办法保持我的同步适配器开启?
我已经为android编写了自己的Sync Adapter.我可以将联系人显示在联系人应用中.但我无法使用android中的默认联系人应用程序为此帐户类型创建新的.
在创建联系人时,很难找到有关如何在默认联系人应用程序中列出要创建的自己的帐户类型的任何信息
onPerformSync(...) {
// building status bar notification here
}
<service android:name=".SyncService" android:exported="false"> ...
Run Code Online (Sandbox Code Playgroud)
这对我有用(4.4.2 SGN3)。出现通知。这两个requestSync()和addPeriodicSync()。
有没有人有一些想法?
是否需要出口SyncAdapter服务?
我真正想知道的是是否有任何其他(敌人)应用程序可以启动我的exported服务。如果可以,我不需要导出该服务,希望 Android 不是那么自由。
我在 Android 开发指南/api 中没有找到任何说明。我是新手,我希望我的问题是正确的,并且足够好理解:)
我需要编写一个 Android 服务来轮询服务器以获取数据,解析数据,然后通过意图将其发送到应用程序。轮询必须频繁发生(每隔几秒)。根据我的阅读,不推荐这样的轮询(由于电池寿命问题)。这是我第一次在 Android 上开发,在做了大量研究之后,有一些事情我还不清楚。
我不确定服务、同步适配器或警报管理器是否更适合我的需求。在这个问题的上下文中,哪一个最有意义?
此服务需要在启动时启动并继续在后台运行。轮询服务器后,数据通过意图发送到另一个应用程序。该服务应该根本没有用户交互。从我读过的内容来看,Android 似乎试图阻止人们由于恶意软件问题而编写此类内容。有没有可能做到这一点?
我正在为我的应用程序开发一个小部件.窗口小部件名称是历史记录,当用户浏览任何URL时,我将其存储在本地数据库中,从中列出该窗口小部件.
当我打开小部件时,它从本地数据库中获取所有细节并在小部件的列表视图中显示它.
1)当我打开小部件,第一的onUpdate方法WidgetProvider被称为
2)然后onUpdate()将调用服务WidgetService
3)然后服务将调用Widget Factory使用本地存储的db更新列表视图.
在小部件工厂中,它将获取db值并更新小部件中的lisviews.
以上是设置窗口小部件时发生的过程.
第一堂课:
public class WidgetProviderFavorite extends AppWidgetProvider {
@SuppressWarnings("deprecation")
@Override
public void onUpdate(Context ctxt, AppWidgetManager appWidgetManager,int[] appWidgetIds) {
for (int i=0; i<appWidgetIds.length; i++) {
Intent svcIntent=new Intent(ctxt, WidgetServiceFavorite.class);
svcIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetIds[i]);
svcIntent.setData(Uri.parse(svcIntent.toUri(Intent.URI_INTENT_SCHEME)));
RemoteViews widget=new RemoteViews(ctxt.getPackageName(),R.layout.widget_favorite);
widget.setRemoteAdapter(appWidgetIds[i], R.id.listFavoriteLogin,svcIntent);
Intent clickIntent=new Intent(ctxt, WidgetActivityFavorite.class);
PendingIntent clickPI=PendingIntent.getActivity(ctxt, 0,clickIntent,PendingIntent.FLAG_UPDATE_CURRENT);
widget.setPendingIntentTemplate(R.id.listFavoriteLogin, clickPI);
appWidgetManager.updateAppWidget(appWidgetIds[i], widget);
}
super.onUpdate(ctxt, appWidgetManager, appWidgetIds);
}
Run Code Online (Sandbox Code Playgroud)
第二课:
public class WidgetServiceFavorite extends RemoteViewsService {
@Override
public RemoteViewsFactory onGetViewFactory(Intent intent) {
return(new WidgetFactoryFavorite(this.getApplicationContext(),intent));
} …Run Code Online (Sandbox Code Playgroud) 我已经在 Xamarin 中编写了一个同步适配器,但在小米 MiUI 下存在问题。
同步适配器启动有两种方法:一种是通过电话“设置->帐户->同步”,另一种是在应用程序中借助ContentResolver.RequestSync()。
首先,我必须为我的应用程序打开 MiUI AutoStart。否则安全系统将错误记录下来。
I/AutoStartManagerService: MIUILOG-拒绝服务:Intent { act=android.content.SyncAdapter cmp=com.fingrad.dashboard/.AdapterService (has extras) } userId : 0 uid : 10186 E/SyncManager: 绑定尝试失败 - 目标: ComponentInfo {com.fingrad.dashboard/com.fingrad.dashboard.AdapterService}
然而,除非应用程序已经在手机内存中,否则第一种方法不起作用。如果 SyncAdapterService 没有清空 Process 属性,则第二种方法不起作用。请参阅下面的示例。
[Service(Name = "com.fingrad.dashboard.SyncAdapterService"
, Exported = true, Process = ":sync")]
[IntentFilter(new[] { "android.content.SyncAdapter" })]
[MetaData("android.content.SyncAdapter", Resource = "@xml/syncadapter")]
class SyncAdapterService : Service
Run Code Online (Sandbox Code Playgroud)
换句话说,如果任何条件为真,适配器就不起作用。1) Adapter 服务有 Process 属性 2) 手机内存中没有应用实例。
很明显,问题的根源在于MiUI安全。MiUI 启动同步适配器,启动另一个没有自动启动权限的进程。我尝试设置“Process="application default process name”,但没有帮助。
更新PS 时间过去了,但问题仍然存在。红米 Note 4、MIUI 9.5、Android 7 和红米 Note 3、MIUI 9.5、Android 6。
我想将我的本地数据库与我的服务器同步。在 Android 中,我们有同步适配器来完成工作并使生活更轻松。我想知道我们在 Flutter 中是否有类似的东西,或者我如何在 Flutter 中做到这一点。
我尝试了一个伟大的Google示例来同步来自Web服务的联系人,并且工作正常.这称为SampleSyncAdapter,非常值得:http://developer.android.com/resources/samples/SampleSyncAdapter/index.html
我已经完成了所有工作,但我无法在示例中或在文档中找到添加链接到自定义活动的类别的方法,就像下面的屏幕截图一样:
(我只有同步帐户选项和复选框)

所以,我的问题是:如何添加帐户设置类别?
我正在尝试为Android编写自己的Sync Adapter.我正在从SDK中挖掘样本同步适配器,但它可怕的未记录.我可以将联系人显示在联系人应用中.但我无法编辑或创建新的.
很难找到有关如何在默认联系人应用中列出要创建的自己的帐户类型的任何信息,或者让它们可编辑.我不想添加任何自定义stüff字段和android已经支持的数据.
任何人都可以指向我如何将我的同步适配器集成到默认联系人应用程序(如交换同步)的教程或示例?
顺便说一句:
我不关心低于ICS的Android版本.我到处都读到2.x的联系人应用程序不支持这个,但3.x及以上版本.2.x不在桌面上,所以我正在寻找ICS方式来做到这一点.
提前致谢
我的同步适配器确实工作得非常好,除了在过去的几个小时里有一些小问题让我失意...对于我的应用程序,我希望同步适配器以10秒的间隔运行.
ContentResolver.addPeriodicSync(mAccount, AUTHORITY, Bundle.EMPTY, 5);
Run Code Online (Sandbox Code Playgroud)
会发生什么是同步开始每60秒而不是请求的5秒.当我将其更改interval为70秒时,同步每70秒开始一次.
从日志文件:
W/ContentService? Requested poll frequency of 5 seconds being rounded up to 60 seconds.
Run Code Online (Sandbox Code Playgroud)
或者,为了确保ContentService占用我的间隔,当我将间隔更改为13秒时:
W/ContentService? Requested poll frequency of 13 seconds being rounded up to 60 seconds.
Run Code Online (Sandbox Code Playgroud)
有人知道这次回合的原因吗?
我的摩托罗拉XT搭载Android 5.0.2(Api等级22).
尝试使用模拟器Android 4.0.4(Api等级15),它只在没有日志消息的情况下执行相同的操作,而不是60秒,间隔更改为30秒.所以必须有一些我不知道的限制.
谢谢,如果需要更多信息,请与我们联系.