Я знаю, что это тема, которая была здесь уже довольно часто, но все ответы, которые я нашел, не решили мою проблему. Итак, вот: у меня есть приложение, в котором есть служба, которая должна регулярно проверять наличие обновлений в базе данных. Для этого я установил AlarmManager. Я пробовал и то и другое, сначала позвонив Receiver, а затем запустив службу оттуда или запустив службу напрямую. Ничего из этого не получилось, как только я закрыл приложение. Пока приложение работало, все работало отлично. Но что я должен добавить, если сервис не должен работать в фоновом режиме все время с START_STICKY?
ANDROID_MANIFEST:
<receiver android:name=".Receiver"
android:enabled="true"
android:exported="true"
android:process=":network">
</receiver>
<service android:name=".UpdateCheckService"
android:process=":network"></service>^
Вызов:
Intent intent = new Intent(ContributionActivity.this, Receiver.class);
intent.putExtra(getString(R.string.id_extra_link), ID);
PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 123, intent, PendingIntent.FLAG_CANCEL_CURRENT);
//PendingIntent pendingIntent = PendingIntent.getService(this, 123, intent, PendingIntent.FLAG_CANCEL_CURRENT);
AlarmManager am = (AlarmManager)getSystemService(ALARM_SERVICE);
//am.setRepeating(am.RTC_WAKEUP, System.currentTimeMillis(), am.INTERVAL_DAY*7, pendingIntent);
am.setRepeating(am.RTC_WAKEUP, System.currentTimeMillis(), 60000, pendingIntent);
Получатель:
public class Receiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Intent serviceIntent = new Intent(context, UpdateCheckService.class);
serviceIntent.putExtra(context.getString(R.string.id_extra_link), intent.getIntExtra(context.getString(R.string.id_extra_link), -1));
context.startService(serviceIntent);
}
}
Услуги:
public class UpdateCheckService extends Service {
Context mContext;
Uri uri;
ArrayList<WordCon> arrayList = new ArrayList<>();
@Nullable
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public void onTaskRemoved(Intent rootIntent) {
Intent restartService = new Intent(getApplicationContext(),
this.getClass());
restartService.setPackage(getPackageName());
PendingIntent restartServicePI = PendingIntent.getService(
getApplicationContext(), 1, restartService,
PendingIntent.FLAG_ONE_SHOT);
AlarmManager am = (AlarmManager)getSystemService(ALARM_SERVICE);
//am.setRepeating(am.RTC_WAKEUP, System.currentTimeMillis(), am.INTERVAL_DAY*7, pendingIntent);
am.setRepeating(am.RTC_WAKEUP, System.currentTimeMillis(), 60000, restartServicePI);
super.onTaskRemoved(rootIntent);
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
mContext = getApplicationContext();
showNotification(mContext);
//checkOnUpdate(intent.getIntExtra(mContext.getString(R.string.id_extra_link), -1));
return super.onStartCommand(intent, flags, startId);
}
@Override
public void onCreate() {
super.onCreate();
}
private void checkOnUpdate(int id) {
if (id == -1) {
return;
} (...)
Как я могу решить это?