используя все методы, но приложение не перезапускается - PullRequest
0 голосов
/ 20 сентября 2019

приложение закрывается, когда в диспетчере задач (Последние) нажата кнопка «Очистить все». Приложение также удаляется из последних значений. Это означает, что его не видно в последних значениях.

это файловые службы манифеста, объявленные

<service
            android:name=".BackgroundServices"
            android:enabled="true"
            android:stopWithTask="false" />
* 1005.*

его служба перезапуска

public class RestartService extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {

        if (intent.getAction().equals(Intent.ACTION_BOOT_COMPLETED)) {

            Log.i("Broadcast Listened", "Service tried to stop");
            //Toast.makeText(context, "Service restarted", Toast.LENGTH_SHORT).show();

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


           // context.startService(new Intent(context.getApplicationContext(), NotificationService.class));
        }


        Log.i("Broadcast Listened", "Service tried to stop");
        //Toast.makeText(context, "Service restarted", Toast.LENGTH_SHORT).show();

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


    }
}

его фоновый класс, который содержит фоновый процесс

public class BackgroundServices extends Service implements LocationListener {

    private BroadcastReceiver receiver;
    public int counter = 0;
    LockScreen obj = new LockScreen();
    // context is important
    // every gui or view or activity have context
    // i will use context of NotificationService class
    Context mContext;
    // database class
    Apply_password_on_AppDatabase db = new Apply_password_on_AppDatabase(this);
    Password_Database pass_db = new Password_Database(this);

    // flag is used for stopping or running loop check of
    // current app running
    static int flag = 0;
    static int flag2 = 0;
    public String strCurrentSpeed;
    public int speed;
    // when any app is lanuch and it have password set on it
    // that app name save in current_app varaible
    String current_app = "";

    public BackgroundServices() {
    }

    @Override
    public void onCreate() {
        super.onCreate();
        // add context of NotificationService to mContext variable
        mContext = this;
        // oreo used different approach for background services
        // other use same approach



        if (Build.VERSION.SDK_INT > Build.VERSION_CODES.O)
            startMyOwnForeground();
        else
            startForeground(1, new Notification());


    }

    //  oreo api approach

    @RequiresApi(Build.VERSION_CODES.O)
    private void startMyOwnForeground() {
        String NOTIFICATION_CHANNEL_ID = "example.permanence";
        String channelName = "Background Service";
        NotificationChannel chan = new NotificationChannel(NOTIFICATION_CHANNEL_ID, channelName, NotificationManager.IMPORTANCE_NONE);
        chan.setLightColor(Color.BLUE);
        chan.setLockscreenVisibility(Notification.VISIBILITY_PRIVATE);

        NotificationManager manager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
        assert manager != null;
        manager.createNotificationChannel(chan);

        NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this, NOTIFICATION_CHANNEL_ID);
        Notification notification = notificationBuilder.setOngoing(true)
                .setContentTitle("App is running in background")
                .setPriority(NotificationManager.IMPORTANCE_MIN)
                .setCategory(Notification.CATEGORY_SERVICE)
                .build();
        startForeground(2, notification);
    }


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


        if (Build.VERSION.SDK_INT > Build.VERSION_CODES.O)
            startMyOwnForeground();
        else
            startForeground(1, new Notification());


        startTimer();
        return START_STICKY;
    }


    @Override
    public void onDestroy() {
        stoptimertask();
        Intent broadcastIntent = new Intent();
        broadcastIntent.setAction("restartservice");
        // broadcastIntent.setPriority(1000); // needs for ( devices >= O )
        broadcastIntent.setClass(this, RestartService.class);
        this.sendBroadcast(broadcastIntent);
        super.onDestroy();

    }

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...