Sync Adapter 未在小米上启动
Sync Adapter not started on Xiaomi
我用Xamarin写了一个sync adapter,但是在小米MiUI下有问题
sync adapter启动有两种方法:一种是"settings->accounts->synchronize"通过phone,另一种是在应用程序中借助ContentResolver.RequestSync()。
首先,我必须为我的应用程序打开 MiUI AutoStart。否则安全系统会将错误记录下来。
I/AutoStartManagerService: MIUILOG- Reject service :Intent { act=android.content.SyncAdapter cmp=com.fingrad.dashboard/.AdapterService (has extras) } userId : 0 uid : 10186
E/SyncManager: Bind attempt failed - target: ComponentInfo {com.fingrad.dashboard/com.fingrad.dashboard.AdapterService}
然而,第一种方法不起作用,除非应用进程已经在phone内存中。
如果 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
换句话说,如果任何条件为真,适配器将不会工作。
1)Adapter服务有Process属性
2) phone内存中没有应用实例
很明显,问题的根源是 MiUI 安全问题。 MiUI 启动同步适配器,启动另一个没有自动启动权限的进程。我试过设置“Process="application default process name",但没用。
更新 P.S 时间过去了,但问题依然存在。红米 Note 4, MIUI 9.5, Android 7 和红米 Note 3, MIUI 9.5, Android 6.
我找到了如何强制 MIUI 启动同步适配器。
您必须执行以下操作:
- 打开设置 -> 安装的应用程序
- 选择您的应用程序
- 开启自动启动
- 关闭所有省电限制
您有两个选项可以解决此问题
1个
<service
android:name="com.example.android.datasync.SyncService"
android:exported="true"
android:process=":sync">
<intent-filter>
<action android:name="android.content.SyncAdapter"/>
</intent-filter>
<meta-data android:name="android.content.SyncAdapter"
android:resource="@xml/syncadapter" />
</service>
从 android 清单
中删除 android:process=":sync"
2 两个
您必须执行以下操作:
- 打开设置 -> 安装的应用程序
- 选择您的应用程序
- 开启自动启动
- 完成
除了已接受的答案外,还有一个选项可以解决问题:在开发者选项中启用打开 MIUI 优化 复选框。
我用Xamarin写了一个sync adapter,但是在小米MiUI下有问题
sync adapter启动有两种方法:一种是"settings->accounts->synchronize"通过phone,另一种是在应用程序中借助ContentResolver.RequestSync()。
首先,我必须为我的应用程序打开 MiUI AutoStart。否则安全系统会将错误记录下来。
I/AutoStartManagerService: MIUILOG- Reject service :Intent { act=android.content.SyncAdapter cmp=com.fingrad.dashboard/.AdapterService (has extras) } userId : 0 uid : 10186 E/SyncManager: Bind attempt failed - target: ComponentInfo {com.fingrad.dashboard/com.fingrad.dashboard.AdapterService}
然而,第一种方法不起作用,除非应用进程已经在phone内存中。 如果 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
换句话说,如果任何条件为真,适配器将不会工作。 1)Adapter服务有Process属性 2) phone内存中没有应用实例
很明显,问题的根源是 MiUI 安全问题。 MiUI 启动同步适配器,启动另一个没有自动启动权限的进程。我试过设置“Process="application default process name",但没用。
更新 P.S 时间过去了,但问题依然存在。红米 Note 4, MIUI 9.5, Android 7 和红米 Note 3, MIUI 9.5, Android 6.
我找到了如何强制 MIUI 启动同步适配器。 您必须执行以下操作:
- 打开设置 -> 安装的应用程序
- 选择您的应用程序
- 开启自动启动
- 关闭所有省电限制
您有两个选项可以解决此问题
1个
<service
android:name="com.example.android.datasync.SyncService"
android:exported="true"
android:process=":sync">
<intent-filter>
<action android:name="android.content.SyncAdapter"/>
</intent-filter>
<meta-data android:name="android.content.SyncAdapter"
android:resource="@xml/syncadapter" />
</service>
从 android 清单
中删除 android:process=":sync"2 两个
您必须执行以下操作:
- 打开设置 -> 安装的应用程序
- 选择您的应用程序
- 开启自动启动
- 完成
除了已接受的答案外,还有一个选项可以解决问题:在开发者选项中启用打开 MIUI 优化 复选框。