Как запустить действие из класса Service, когда приложение находится в состоянии PAUSE, а также в случае, если приложение уничтожено (приложение уничтожено)? - PullRequest
0 голосов
/ 08 апреля 2020

На самом деле я создаю приложение, в котором мне нужно запустить действие из фонового класса обслуживания (в моем случае это: NotificationReceiver. java), независимо от того, открыто приложение, закрыто (PAUSE STATE) или убито , успешно сделано для случая, когда приложение работает, но не для паузы и состояния Destroy. Вот NotificationReceiver. java (Класс обслуживания):

package com.fitness.client.services;
//

import android.app.Notification;
import android.app.NotificationChannel;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.media.RingtoneManager;
import android.net.Uri;
import android.os.Build;
import android.util.Log;
import android.widget.RemoteViews;
import android.widget.Toast;

import androidx.annotation.NonNull;
import androidx.core.app.NotificationCompat;
import androidx.core.app.NotificationManagerCompat;
import androidx.work.OneTimeWorkRequest;
import androidx.work.WorkManager;

import com.fitness.client.App;
import com.fitness.client.R;
import com.fitness.client.api.RetroFitFactory;
import com.fitness.client.api.order.OrderDetails;
import com.fitness.client.api.order.OrderService;
import com.fitness.client.objects.Order;
import com.fitness.client.ui.UiActivity;
import com.fitness.client.ui.main.MainActivity;
import com.google.firebase.messaging.FirebaseMessagingService;
import com.google.firebase.messaging.RemoteMessage;

import java.util.Objects;

import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;
import retrofit2.Retrofit;

public class NotificationReceiver extends FirebaseMessagingService {

    private static final String TAG = "MyFirebaseMsgService";

    @Override
    public void onMessageReceived(@NonNull RemoteMessage remoteMessage) {
        super.onMessageReceived(remoteMessage);
        //Start UiActivity
        long objectId = Long.parseLong(Objects.requireNonNull(Objects.requireNonNull(remoteMessage.getNotification()).getBody()));
        Log.e("Check","order id"+ Objects.requireNonNull(remoteMessage.getNotification()).getBody());
        Log.e(TAG, "onMessageReceived: orderId: " + objectId);
        // TODO: 08-04-2020 Call a get request for order api end-point using id
        RetroFitFactory.getRetrofitCallFor(OrderService.class)
                .getOrderDetails(objectId)
                .enqueue(new Callback<OrderDetails>() {
                    @Override
                    public void onResponse(@NonNull Call<OrderDetails> call, @NonNull Response<OrderDetails> response) {

                        Order object = null;
                        if (response.body() != null) {
                            object = response.body().getData();
                        }
                        Context context = NotificationReceiver.this;
                        Intent uiIntent = new Intent(context, UiActivity.class);
                        assert object != null;
                        uiIntent.putExtra("userName", object.getUser().getName());
                            uiIntent.putExtra("extraPeople", "1");
                            uiIntent.putExtra("bookingDate", object.getBooking_date());
                            uiIntent.putExtra("userSlot", object.getSlots().getFrom() + object.getSlots().getTo());
                            uiIntent.putExtra("userArea", "Navi Mumbai");
                            uiIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                            context.startActivity(uiIntent);


                    }

                    @Override
                    public void onFailure(@NonNull Call<OrderDetails> call, @NonNull Throwable t) {
                        Toast.makeText(NotificationReceiver.this, t.getMessage(), Toast.LENGTH_SHORT).show();
                    }
                });



    }




}

А вот цель Activity (UiActivity. java), которую я хочу начать с этого класса обслуживания.

package com.fitness.client.ui;

import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.RelativeLayout;
import android.widget.TextView;
import android.widget.Toast;

import com.fitness.client.R;
import com.fitness.client.ui.main.MainActivity;

public class UiActivity extends AppCompatActivity implements View.OnClickListener {

    TextView userName, extraPeople, slots, date , area;
    Button accept, reject;
    RelativeLayout mainUi;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_ui);
        userName = findViewById(R.id.user_name);
        extraPeople = findViewById(R.id.extra_people);
        slots = findViewById(R.id.user_slot);
        date = findViewById(R.id.date_booking);
        area = findViewById(R.id.user_area);
        accept = findViewById(R.id.accept_booking);
        reject = findViewById(R.id.reject_booking);

        String username = getIntent().getStringExtra("userName");
        String extrapeople = getIntent().getStringExtra("extraPeople");
        String userslots = getIntent().getStringExtra("userSlot");
        String userdate = getIntent().getStringExtra("bookingDate");
        String  userarea = getIntent().getStringExtra("userArea");

        userName.setText(username);
        extraPeople.setText(extrapeople);
        slots.setText(userslots);
        date.setText(userdate);
        area.setText(userarea);

        mainUi = findViewById(R.id.main_ui);

        mainUi.setOnClickListener(this);

        accept.setOnClickListener(this);
        reject.setOnClickListener(this);

    }

    @Override
    public void onClick(View v) {
        if (v == accept)
        {
            Toast.makeText(this, "Accept is clicked", Toast.LENGTH_SHORT).show();
            //TODO: Do the accept booking

        }
        else if(v == reject){
            Toast.makeText(this, "Reject is clicked", Toast.LENGTH_SHORT).show();
            //TODO : Do the reject operation
        }
        else if (v == mainUi){
            startActivity(new Intent(this, MainActivity.class));
        }
    }
}

Заранее спасибо

...