Запуск Сервиса с использованием сети и AlarmManager, даже если приложение закрыто - PullRequest
0 голосов
/ 03 ноября 2018

Я знаю, что это тема, которая была здесь уже довольно часто, но все ответы, которые я нашел, не решили мою проблему. Итак, вот: у меня есть приложение, в котором есть служба, которая должна регулярно проверять наличие обновлений в базе данных. Для этого я установил 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;

    } (...)

Как я могу решить это?

...