我在FCM上遇到了问题,我已经在Google上进行了搜索,但是似乎我检查过的所有网站都帮不了我。
我有2个活动。
首先是MainActivity.java
第二个是SendNotif.java
在第一部手机中打开SendNotif.xml
时会收到通知,在第二部手机中也会收到通知,但是当我在第二部手机中重新安装apk并打开它时,默认活动为MainActivity
,其中这是当我尝试在第一部手机中SendNotif
时,直到我在第二部手机中打开SendNotif
时,我才会在第二部手机中不再收到通知。
我想在这里做的是,在第二部手机中,我仍然可以在不打开SendNotif
活动的情况下接收通知。
这是我的代码
SENDNOTIF.java
@Override
public void onClick(View view) {
sendNotification();
}
});
}
private void sendNotification(){
JSONObject mainObj = new JSONObject();
try {
mainObj.put("to", "/topics/"+"news");
JSONObject notificationObj = new JSONObject();
notificationObj.put("title", "any title");
notificationObj.put("body", "Test Notification");
mainObj.put("notification", notificationObj);
JsonObjectRequest request = new JsonObjectRequest(Request.Method.POST, URL, mainObj,
new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(ejmc.this);
alertDialogBuilder.setTitle("Notification Sent!");
alertDialogBuilder.setNegativeButton("Okay", null);
AlertDialog alertDialog = alertDialogBuilder.create();
alertDialog.show();
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(ejmc.this);
alertDialogBuilder.setTitle("Error!");
alertDialogBuilder.setNegativeButton("Retry", null);
AlertDialog alertDialog = alertDialogBuilder.create();
alertDialog.show();
}
}){
@Override
public Map<String, String> getHeaders() throws AuthFailureError {
Map<String,String> header = new HashMap<>();
header.put("Content-Type", "application/json");
header.put("Authorization","key=<key>");
return header;
}
};
mRequestQue.add(request);
} catch (JSONException e){
e.printStackTrace();
}
}
MyFireBaseMessagingService.java
public class MyFirebaseMessagingService extends FirebaseMessagingService {
@Override
public void onNewToken(String s) {
Log.e("NEW_TOKEN", s);
}
@Override
public void onMessageReceived(RemoteMessage remoteMessage) {
Map<String, String> params = remoteMessage.getData();
JSONObject object = new JSONObject(params);
Log.e("JSON_OBJECT", object.toString());
String NOTIFICATION_CHANNEL_ID = "EJMC";
long pattern[] = {0, 1000, 500, 1000};
NotificationManager mNotificationManager =
(NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
NotificationChannel notificationChannel = new NotificationChannel(NOTIFICATION_CHANNEL_ID, "EJMC",
NotificationManager.IMPORTANCE_HIGH);
notificationChannel.setDescription("");
notificationChannel.enableLights(true);
notificationChannel.setLightColor(Color.RED);
notificationChannel.setVibrationPattern(pattern);
notificationChannel.enableVibration(true);
mNotificationManager.createNotificationChannel(notificationChannel);
}
// to diaplay notification in DND Mode
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
NotificationChannel channel = mNotificationManager.getNotificationChannel(NOTIFICATION_CHANNEL_ID);
channel.canBypassDnd();
}
NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this, NOTIFICATION_CHANNEL_ID);
notificationBuilder.setAutoCancel(true)
.setColor(ContextCompat.getColor(this, R.color.colorAccent))
.setContentTitle(getString(R.string.app_name))
.setContentText(remoteMessage.getNotification().getBody())
.setDefaults(Notification.DEFAULT_ALL)
.setWhen(System.currentTimeMillis())
.setSmallIcon(R.drawable.ic_launcher_background)
.setAutoCancel(true);
mNotificationManager.notify(1000, notificationBuilder.build());
}
}
我该如何处理MainActivity
,以便在那里继续接收通知而无需打开SENDNOTIF
活动。