同步适配器在小米手机上未启动

5
我在Xamarin中编写了一个同步适配器,但在小米MIUI下存在问题。
同步适配器有两种启动方法:一种是通过手机上的“设置->帐户->同步”;另一种是在应用程序中借助ContentResolver.RequestSync()。
首先,我必须为我的应用程序打开MiUI自启动。否则,安全系统会将错误写入日志。
尽管如此,第一种方法只有在应用程序进程已经在手机内存中时才能工作。 如果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) 适配器服务具有“进程”属性。 2) 手机内存中没有应用程序实例。
显然,问题的根源在于MiUI安全性。 MiUI启动同步适配器时,会启动另一个进程,该进程没有自动启动权限。我尝试设置“Process =“应用程序默认进程名称”,但并没有帮助。
更新:经过一段时间,问题仍然存在。Redmi Note 4,MIUI 9.5,Android 7和Redmi Note 3,MIUI 9.5,Android 6。

你尝试过在开发者选项中禁用“MIUI优化”吗? - Yoav Feuerstein
@YoavFeuerstein,是的,我试过了。 - Alexey Subbota
这里提供的解决方案/说明怎么样?https://dev59.com/qIzda4cB1Zd3GeqPsucI#32312076(根据我的经验,您可能需要撤销权限,然后再次授予启动和通知访问权限) - Yoav Feuerstein
1
@YoavFeuerstein,我已经尝试了很多次但都没有成功。这个问题只出现在Mi4i上。其他小米手机似乎都没有问题。 - Alexey Subbota
@YoavFeuerstein,我觉得我找到了如何强制进行MIUI启动同步服务的方法。除了启动权限外,您还需要在电池节能器中选择“无限制”。 - Alexey Subbota
3个回答

9
我发现了如何强制MIUI启动同步适配器的方法。您需要按照以下步骤操作:
  1. 打开设置 -> 已安装应用程序
  2. 选择您的应用程序
  3. 打开自启动
  4. 关闭任何电池节省限制

enter image description here


那对我有用。谢谢!不过我必须等待相当长的时间,直到更改实际生效。 - Samuel Wicky
调整了这些设置后,我重新启动了几次,但我的同步适配器终于运行了!谢谢! - Greg Moens

1
您有两个选项来解决这个问题:

1 ONE


     <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 TWO

你需要做以下操作:

  • 打开设置 -> 已安装应用程序
  • 选择您的应用程序
  • 打开自启动
  • 完成

0
除了已接受的答案外,还有一种解决问题的选项:在开发者选项中启用打开MIUI优化复选框。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接