ich ein bisschen sein kann spät, aber hier ist eine vollständige Lösung, die die Aktivität automatisch öffnen, selbst wenn die Anwendung geschlossen oder getötet oder im Hintergrund ist. Diese Lösung kann sogar "Aktivität/Fragment" anzeigen, wenn sich das Gerät im Ruhezustand oder in der Bildschirmsperre befindet.
Erstellen Sie eine Aktivität, die der Benachrichtigung dient und automatisch bei jeder Benachrichtigung geöffnet wird.
in Ihrem
onMessageReceived
folgenden Code Sie
if (remoteMessage.getData().size() > 0) {
sendNotification(remoteMessage.getData().get("title"),remoteMessage.getData().get("body"));
}
hier Ihre sendNotification() -Methode ist
private void sendNotification(String messageTitle,String messageBody) {
Intent intent = new Intent(this, DeliveryRecieved.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
PendingIntent pendingIntent = PendingIntent.getActivity(this,0 /* request code */, intent,PendingIntent.FLAG_UPDATE_CURRENT);
long[] pattern = {500,500,500,500,500};
Uri defaultSoundUri= RingtoneManager.getDefaultUri(RingtoneManager.TYPE_RINGTONE);
NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this)
.setSmallIcon(R.drawable.ic_dart_board)
.setContentTitle(messageTitle)
.setContentText(messageBody)
.setVibrate(pattern)
.setLights(Color.BLUE,1,1)
.setSound(defaultSoundUri)
.setContentIntent(pendingIntent);
NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
notificationManager.notify(0 /* ID of notification */, notificationBuilder.build());
getApplicationContext().startActivity(intent);
}
Hinweiszwei wichtige Dinge
FLAG_ACTIVITY_NEW_TASK und getApplicationContext().startActivity (Absicht);
In Ihrer Tätigkeit, wenn Sie auf Bildschirm un-Lock-Vorrichtung wollen und die Anwendung von Gerät Schlafmodus gehen Sie wie folgt in Ihrer Tätigkeit onCreate bringen()
getWindow().addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED | WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD | WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON | WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON | WindowManager.LayoutParams.FLAG_ALLOW_LOCK_WHILE_SCREEN_ON);
Die letzte wichtige Sache ist, in firebase messaging system verwendet immer "Datennutzlast", um onMessageReceived() aufzurufen, wenn das Gerät im Hintergrund ist "Datennutzlast ist erforderlich"
Um einen Dialog anzuzeigen, können Sie ihn in onCreateView() Ihrer Aktivität codieren oder wo auch immer;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
final DeliveryRecieved c = this;
setContentView(R.layout.activity_jp_map);
mediaPlayer = MediaPlayer.create(this, R.raw.call_bell);
mediaPlayer.setLooping(true);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED | WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD | WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON | WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON | WindowManager.LayoutParams.FLAG_ALLOW_LOCK_WHILE_SCREEN_ON);
String[] title = {"A","B"};
mediaPlayer.start();
new MaterialDialog.Builder(this)
.items(title)
.itemsCallbackMultiChoice(null, new MaterialDialog.ListCallbackMultiChoice() {
@Override
public boolean onSelection(MaterialDialog dialog, Integer[] which, CharSequence[] text) {
mediaPlayer.stop();
c.finish();
return true;
}
})
.title("NOTICES For Delivery")
.content("IMPORTANT NOTICE")
.positiveText("Accept")
.build().show();
}
Was Sie hier versuchen, ist über andere Anwendungen zu zeichnen. Dazu benötigen Sie das SYSTEM_ALERT_WINDOW, welches bei API23 + explizit in den Systemeinstellungen aktiviert werden muss. Dies ist eine große Sicherheit Haftung und Sie sollten darüber nachdenken, ob dies wirklich erforderlich ist. Mehr lesen: https://stackoverflow.com/a/32652625/1025599. Alternativ können Sie den NotificationManager verwenden, um eine Standardbenachrichtigung anzuzeigen. – Nachi
IMHO, mit einem Dialog * Pop-up * bei einer Benachrichtigung Ankunft ist * schlecht UX *. Es ist wie eine [Popup-Anzeige] (https://en.wikipedia.org/wiki/Pop-up_ad). –
Es ist, aber meine App wird für ältere Menschen verwendet, um ihnen mit ihrer Gesundheitsroutine zu helfen, sie tun nicht, dass sie eine neue Aktivität haben, wenn Sie es wirklich auffällig machen. Es gibt eine korrekte Verwendung für diese Praxis. – dfabiano