Передача никогда не выполняется при остановке приложения

1

Я пытаюсь создать сервис, который работает в фоновом режиме, проверяет информацию и дает уведомления, когда это необходимо. Я попробовал несколько примеров в Интернете, которые в основном совпадают, но я не заставляю их работать.

У меня есть сервис и BroadcastReceiver. Когда я запускаю приложение, сервис создается и время регистрируется на каждом тике. Итак, это работает отлично. В onDestroy я настроил новое намерение, которое я отправляю с помощью "sendBroadcast (...)". BroadcastReceiver-класс имеет переопределение onReceive, которое должно регистрировать простой текст. Но я никогда не вижу текст.

Сервис

public class ServiceNoDelay extends Service {
    public int counter = 0;
    Context context;

    public ServiceNoDelay(Context applicationContext) {
        super();
        context = applicationContext;
        Log.i("HERE", "here service created!");
    }

    public ServiceNoDelay() {
    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        super.onStartCommand(intent, flags, startId);
        startTimer();
        return START_STICKY;
    }

    @Override
    public void onDestroy() {
        super.onDestroy();

        Log.i("EXIT", "ondestroy!");

        Intent broadcastIntent = new Intent();
        broadcastIntent.setAction("com.custom.package.RestartSensor");
        sendBroadcast(broadcastIntent);
        stoptimertask();


        Log.i("EXIT", "Broadcast send!");
    }

    private Timer timer;
    private TimerTask timerTask;

    public void startTimer() {
        //set a new Timer
        timer = new Timer();

        //initialize the TimerTask job
        initializeTimerTask();

        //schedule the timer, to wake up every 1 second
        timer.schedule(timerTask, 1000, 1000); //
    }

    public void initializeTimerTask() {
        timerTask = new TimerTask() {
            public void run() {
                Log.i("in timer", "in timer ++++  " + (counter++));
            }
        };
    }

    public void stoptimertask() {
        //stop the timer, if it not already null
        if (timer != null) {
            timer.cancel();
            timer = null;
        }
    }

    @Nullable
    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }
}

BroadcastReceiver

public class SensorRestarterBroadcastReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        Log.i(SensorRestarterBroadcastReceiver.class.getSimpleName(), "Service Stops! Oops!!!!");
        context.startService(new Intent(context, ServiceNoDelay.class));

    }
}

Часть манифеста

<service
            android:name=".ServiceNoDelay"
            android:enabled="true" />
        <receiver
            android:name=".SensorRestarterBroadcastReceiver"
            android:enabled="true"
            android:exported="true"
            android:label="RestartServiceWhenStopped">
            <intent-filter>
                <action android:name="com.custom.package.RestartSensor" />
            </intent-filter>
        </receiver>

Часть кода, которую я вызываю в MainActivity

ServiceNoDelay mSensorService = new ServiceNoDelay(getApplicationContext());
        Intent mServiceIntent = new Intent(getApplicationContext(), mSensorService.getClass());
        startService(mServiceIntent);

Я ожидаю, что logcat будет отображать "Service Stops! Oops !!!!" когда приложение закрывается, я могу снова активировать сервис.

Если я ищу неправильный путь для отображения уведомлений после закрытия приложения; Я открыт для предложений.

Теги:
service

1 ответ

1
Лучший ответ

Есть несколько вещей, которые вам нужно сделать: 1. Если вам нужно, чтобы служба работала в фоновом режиме, создайте службу Foreground. 2. Отключите режим ожидания 3. или перейдите по этой ссылке, чтобы запустить службу в фоновом режиме

Или здесь, в вашем коде, вы можете вызвать onTaskRemoved и добавить сигнал тревоги, чтобы снова запустить службу

 @Override
public void onTaskRemoved(Intent rootIntent) {
    Log.e("FLAGX : ", ServiceInfo.FLAG_STOP_WITH_TASK + "");

    Intent restartServiceIntent = new Intent(getApplicationContext(),
            this.getClass());
    restartServiceIntent.setPackage(getPackageName());

    Intent intent = new Intent(getApplicationContext(), this.getClass());

    intent.setPackage(getPackageName());

    PendingIntent restartServicePendingIntent = PendingIntent.getService(
            getApplicationContext(), 1, restartServiceIntent,
            PendingIntent.FLAG_ONE_SHOT);
    AlarmManager alarmService = (AlarmManager) getApplicationContext()
            .getSystemService(Context.ALARM_SERVICE);
    alarmService.set(AlarmManager.ELAPSED_REALTIME,
            SystemClock.elapsedRealtime() + 2000,
            restartServicePendingIntent);

    super.onTaskRemoved(rootIntent);
}

Добавить разрешение в манифест

<uses-permission android:name="android.permission.SET_ALARM"/>
  • 0
    Я перешел по вашей ссылке, и большинство примеров и кодов вызывают сбой моего приложения. Есть ли вероятность того, что у вас есть ссылка на рабочий пример?
  • 0
    Я реализовал onTaskRemoved. Я вижу, что это уволено. Но после этого ничего не происходит ... Я что-то упустил?
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню