Выполнить android приложение в фоновом режиме без активности - PullRequest
0 голосов
/ 28 января 2020

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

Руководствуясь официальной документацией Android (https://developer.android.com/guide/components/services), я расширил IntentService. class (переопределяя метод onHandleIntent, как указано в содержимом ссылки), и создал другой класс, расширив android .app.Application. Однако мне кажется, что метод onCreate класса, который я расширил с android .app.Application, никогда не вызывается. См. Мой простой тестовый код ниже:

Класс, расширяющий класс приложения Android:

package br.com.exemplos.executarsegundoplano;

import android.app.Application;
import android.content.Intent;
import android.util.Log;

public class Principal extends Application {
    private Principal() {
        super();
    }

    @Override
    public void onCreate() {
        super.onCreate();
        Intent serviceIntent = new Intent(Principal.this, Servico.class);
        startService(serviceIntent);
        Log.d("Background Process", "onCreate method started.");
    }
}

Класс, расширяющий класс IntentService:

package br.com.exemplos.executarsegundoplano;

import android.app.IntentService;
import android.app.Service;
import android.content.Intent;
import android.os.Build;
import android.os.VibrationEffect;
import android.os.Vibrator;

public class Servico extends IntentService {
    public Servico() {
        super("Servico");
    }

    @Override
    protected void onHandleIntent(Intent intent) {
        final Vibrator vibrador = (Vibrator) getSystemService(Service.VIBRATOR_SERVICE);
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O)
            vibrador.vibrate(VibrationEffect.createOneShot(500, VibrationEffect.DEFAULT_AMPLITUDE));
        else
            vibrador.vibrate(500);

        try {
            Thread.sleep(5000);
        }
        catch (InterruptedException excecao) {
            Thread.currentThread().interrupt();
        }
    }
}

AndroidManifest . xml содержимое файла:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="br.com.exemplos.executarsegundoplano">

    <uses-permission android:name="android.permission.VIBRATE" />

    <application
        android:name="br.com.exemplos.executarsegundoplano.Principal"
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@android:style/Theme.NoDisplay">

        <service
            android:enabled="true"
            android:name="br.com.exemplos.executarsegundoplano.Servico">
        </service>

    </application>
</manifest>

Чего не хватает, чтобы после установки этого приложения в операционной системе Android (а также при перезапуске операционной системы) приложение выполнялось и метод onCreate класса Principal (который расширяет Application) обрабатывается?

...