Создайте работу в упражнении, вы делаете это так, как вы делали для фоновых служб.

аюсь создать сервис, который каждую минуту запрашивает местоположение устройства. Мне нужно, чтобы это работало в фоновом режиме, даже когда приложение закрыто. До сих пор мне удавалось заставить его работать на устройствах с предустановленной ОС Android, но сейчас я тестирую службу на устройстве Android Oreo и не работает, когда я закрываю приложение или помещаю его в фоновый режим. В своем исследовании я обнаружил, что для устройств Oreo необходимо использовать Службу Foreground с постоянным уведомлением, чтобы начать с этого, для начала я реализовал простую Службу Foreground, подобную приведенной ниже, которая при запуске показывает текущее уведомление, а при остановке уведомления устранен.

public class MyForegroundService extends Service {

    private static String TAG = MyForegroundService.class.getSimpleName();

    private static final String CHANNEL_ID = "channel_01";
    private static final int NOTIFICATION_ID = 12345678;

    private NotificationManager mNotificationManager;

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

    public MyForegroundService() {
        super();
    }

    @Override
    public void onCreate() {
        super.onCreate();
        Log.d(TAG, "onCreate");

        mNotificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);

        // Android O requires a Notification Channel.
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
            CharSequence name = getString(R.string.app_name);

            // Create the channel for the notification
            NotificationChannel mChannel = new NotificationChannel(CHANNEL_ID, name, NotificationManager.IMPORTANCE_DEFAULT);

            // Set the Notification Channel for the Notification Manager.
            mNotificationManager.createNotificationChannel(mChannel);
        }

        startForeground(NOTIFICATION_ID, getNotification());
    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        Log.d(TAG, "onStartCommand");

        return super.onStartCommand(intent, flags, startId);
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        Log.d(TAG, "onDestroy");

        stopForeground(true);
    }

    private Notification getNotification() {

        // Get the application name from the Settings
        String appName = PrefApp.getSettings(getApplicationContext()).getAppConfigs().getAppName();
        String applicationKey = PrefApp.getSettings(getApplicationContext()).getAppConfigs().getAppKey();

        NotificationCompat.Builder builder = new NotificationCompat.Builder(this)
                .setContentTitle(appName)
                .setContentText("Services are running")
                .setOngoing(true)
                .setPriority(Notification.PRIORITY_HIGH)
                .setSmallIcon(R.mipmap.ic_notification)
                .setWhen(System.currentTimeMillis());

        // Set the Channel ID for Android O.
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
            builder.setChannelId(CHANNEL_ID); // Channel ID
        }

        return builder.build();
    }
}

Я запускаю и останавливаю вышеуказанный сервис, используя следующие функции.

public void startMyForegroundService() {
    Log.d(TAG, "Start Foreground Service");

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
        startForegroundService(new Intent(getApplicationContext(), MyForegroundService.class));
    } else {
        startService(new Intent(getApplicationContext(), MyForegroundService.class));
    }
}

public void stopMyForegroundService() {
    Log.d(TAG, "Stop Foreground Service");
    stopService(new Intent(getApplicationContext(), MyForegroundService.class));
}

Я тестирую вышеупомянутый сервис, и по какой-то причине он погибает примерно через 30 минут после его запуска. Может кто-нибудь сказать мне, если я делаю что-то не так или, возможно, направить меня к решению, которое может работать для меня?

Примечание: я следил за этимруководство и проверил их применение, а также то, что оно все еще не работает. Служба убивается через некоторое время.

По сути, моя цель - реализовать сервис, который может работать в фоновом режиме (даже когда приложение закрыто) и получать обновления местоположения каждую минуту.

Ответы на вопрос(1)

Ваш ответ на вопрос