У меня есть несколько служб, которые не работают на Android с 26 уровня и выше.
Они активированы, как вы можете видеть на этом изображении в настройках пользователя и учетной записи:
Даже если я перезапущу эту синхронизацию, служба не будет запущена в приложении. Но они работают нормально в старых версиях Android API.
Android Manifest.xml :
использует-разрешение
<uses-permission android:name="android.permission.USE_CREDENTIALS" />
<uses-permission android:name="android.permission.AUTHENTICATE_ACCOUNTS" />
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<uses-permission android:name="android.permission.MANAGE_ACCOUNTS" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.READ_SYNC_SETTINGS" />
<uses-permission android:name="android.permission.WRITE_SYNC_SETTINGS" />
<uses-permission android:name="android.permission.READ_SYNC_STATS" />
применение
провайдеры
<provider
android:name=".sincronismo.SincronizadorSemFilaContentProvider"
android:authorities="@string/sincronismo_sem_fila_content_authority"
android:exported="false"
android:label="@string/sincronismo_sem_fila_rotulo"
android:syncable="true" />
<provider
android:name=".sincronismo.SincronizadorComFilaContentProvider"
android:authorities="@string/sincronismo_com_fila_content_authority"
android:exported="false"
android:label="@string/sincronismo_com_fila_rotulo"
android:syncable="true" />
Услуги
<service
android:name=".sincronismo.SincronizadorSemFilaService"
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/sincronismo_sem_fila_sync_adapter" />
</service>
<service
android:name=".sincronismo.SincronizadorComFilaService"
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/sincronismo_com_fila_sync_adapter" />
</service>
SincronizadorComFilaService несколько отличий от SincronizadorSemFilaService , но в основном то же самое:
public class SincronizadorComFilaService extends Service {
private static final Object SYNC_ADAPTER_LOCK = new Object();
private static AbstractSincronizadorAdapter syncAdapter;
public SincronizadorComFilaService() {
super();
}
@Override
public void onCreate() {
super.onCreate();
synchronized (SYNC_ADAPTER_LOCK) {
if (syncAdapter == null){
syncAdapter = new AbstractSincronizadorAdapter(getApplicationContext(), true) {
@Override
protected void executarSincronismo(ServicoFactory servicoFactory,
Account account, Bundle extras, String authority,
ContentProviderClient provider, SyncResult syncResult)
throws AbstractServicoException {
servicoFactory.getSincronismoService().executarSincronismoComFila();
}
};
}
}
}
@Override
public IBinder onBind(Intent intent) {
return syncAdapter.getSyncAdapterBinder();
}
}
снова sincronismo_com_fila_sync_adapter.xml , с некоторыми отличиями от sincronismo_sem_fila_sync_adapter
<?xml version="1.0" encoding="utf-8"?>
<sync-adapter xmlns:android="http://schemas.android.com/apk/res/android"
android:contentAuthority="@string/sincronismo_com_fila_content_authority"
android:accountType="@string/seguranca_tipo_conta"
android:supportsUploading="true"
android:userVisible="true"
android:allowParallelSyncs="false"
android:isAlwaysSyncable="true"
/>