实际上,我正在创建一个应用程序,无论该应用程序是成功打开,关闭(暂停状态)还是被杀死,都需要从后台服务类(在我的情况下为:NotificationReceiver.java)启动活动。适用于应用程序正在运行的情况,但不适用于暂停和销毁状态。 这是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),我想从此Service类开始。
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));
}
}
}
预先感谢