我正在做一个拼车应用程序。为了让人们进入,我让司机在他/她想要开始骑行时向车友发送通知。之后,当车手点击通知时,在SharedPreferences处更改布尔值并开始骑行。但是,当骑手打开应用程序时,没有点击任何通知,它不会发生,这是合理的,因为我没有做任何改变它。这就是为什么我想在每次用户打开应用程序时检查通知,但我不知道该怎么做。
我的听众↓
public class FcmMessagingService extends FirebaseMessagingService {
@Override
public void onMessageReceived(RemoteMessage remoteMessage) {
if (remoteMessage.getData().size() > 0) {
JSONObject json = new JSONObject(remoteMessage.getData());
try {
sendNotification(json.getString("message").split("Message data payload: ")[0]);
} catch (JSONException e) {
e.printStackTrace();
}
}
}
@Override
public void handleIntent(Intent intent) {
super.handleIntent(intent);
String msg = intent.getExtras().get("message").toString();
System.out.println("Guia: " + msg);
if (msg.contains("IniciarCaronaAgora")) {
PreferenceManager.getDefaultSharedPreferences(this).edit().putString("emCarona", "true").apply();
PreferenceManager.getDefaultSharedPreferences(this).edit().putString("emCaronacid", msg.split("IniciarCaronaAgora cid:")[0]).apply();
}
}
private void sendNotification(String message) {
Intent intent = new Intent(this, ListaCaronasFragment.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.putExtra("fromNotification", true);
intent.putExtra("message", message);
startActivity(intent);
}
如果有人收到通知并且应用程序未打开,那么普通听众将会工作,我的也不会。这就是为什么我在主要活动中有一小部分代码,如果有任何意图,将打开一个警告框。 ↓
if (getIntent().getExtras()!= null){
String message = getIntent().getExtras().get("message").toString();
AlertDialog ad = new AlertDialog.Builder(ListaCaronasFragment.this).create();
if (message.contains("IniciarCaronaAgora")) {
PreferenceManager.getDefaultSharedPreferences(this).edit().putString("emCarona", "true").apply();
PreferenceManager.getDefaultSharedPreferences(this).edit().putString("emCaronacid", message.split("IniciarCaronaAgora cid:")[0]).apply();
}
ad.setTitle("Aviso");
ad.setMessage(message);
ad.setButton(AlertDialog.BUTTON_POSITIVE, "OK", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
});
ad.show();
}
答案 0 :(得分:0)
做我的研究,我得出结论,很少有人试图做我想做的事。它不是要做无用的调用或发送错误类型的通知,而是没有人这样做并发布给开发人员。因此,我决定使用我的数据库来做这件事,而不是通过通知(把某人放在一起),这样可以保证数据的持久性和可靠性。