如何从推送通知fcm显示警报

时间:2017-01-27 12:14:29

标签: android push-notification

我在firebase例程中有以下代码。收到通知时,如何将通知消息或数据显示为警报?我的服务器上的PHP代码成功地通过id将消息推送到Android设备,并且在收到消息时听到声音,但我想显示警报或转移到片段(我更喜欢警报)。

public class MyFirebaseMessagingService extends FirebaseMessagingService
{
    private static final String TAG = "MyFirebaseMessService";

    @Override
    public void onMessageReceived(RemoteMessage remoteMessage)
    {
        commonfunc.myprint("#####_____MyFirebaseMessService_from 1 : " + remoteMessage.getFrom());


        if(remoteMessage.getData().size() > 0)
        {
            commonfunc.myprint("MyFirebaseMessService_getdata 2 : " + remoteMessage.getData());
            Map<String, String> data = remoteMessage.getData();
            String value1 = data.get("dtitle");
            String value2 = data.get("dbody");
            commonfunc.myprint("MyFirebaseMessService_getdata 2 : " + value1 + " " + value2);
            sendNotification(remoteMessage.getData().toString());
        }
        if (remoteMessage.getNotification() != null)
        {
            commonfunc.myprint("MyFirebaseMessService_getNot 3 body: " + remoteMessage.getNotification().getBody());
            commonfunc.myprint("MyFirebaseMessService_getNot 3 title: " + remoteMessage.getNotification().getTitle());

            sendNotification(remoteMessage.getNotification().getBody());
            sendNotification(remoteMessage.getNotification().getTitle());

            /*
            final String mMessage = remoteMessage.getNotification().getBody();
            Handler h = new Handler(Looper.getMainLooper());
            h.post(new Runnable() {
                public void run()
                {
                    AlertDialog alertDialog = new AlertDialog.Builder(MyFirebaseMessagingService.this).create();
                    alertDialog.setTitle("Message");
                    alertDialog.setMessage("Message follows: " + mMessage);
                    alertDialog.setButton(AlertDialog.BUTTON_NEUTRAL, "OK",
                            new DialogInterface.OnClickListener() {
                                public void onClick(DialogInterface dialog, int which) {
                                    dialog.dismiss();
                                }
                            });
                    alertDialog.show();
                    return ;
                }
            });
            */

        }
    }

    private void sendNotification(String body)
    {
        commonfunc.myprint("MyFirebaseMessService_sendNotification 4a sound ");

        Intent intent = new Intent(this,MainActivity.class);
        intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

        PendingIntent pendingIntent = PendingIntent.getActivity(this,0,intent,PendingIntent.FLAG_UPDATE_CURRENT);

        Uri notificationSound = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);

        NotificationCompat.Builder notifiBuilder = new NotificationCompat.Builder(this)
                .setAutoCancel(true)
                .setContentTitle("Firebase Cloud Messaging")
                .setContentText(body)
                .setSound(notificationSound)
                .setSmallIcon(life.poa.webcastman.poa1.R.drawable.common_google_signin_btn_icon_dark)
                .setContentIntent(pendingIntent);

        NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
        notificationManager.notify(0,notifiBuilder.build());

        commonfunc.myprint("MyFirebaseMessService_sendNotification 4b sound");
        //Toast.makeText(getApplicationContext(), "____MyFirebaseMessagingService " + body, Toast.LENGTH_SHORT).show();

    }

}

1 个答案:

答案 0 :(得分:5)

使用本地广播:将其置于onMessageReceived:

 Intent intent = new Intent("myFunction");
                // add data
                intent.putExtra("value1", value1);
                intent.putExtra("value2", value2);
                LocalBroadcastManager.getInstance(this).sendBroadcast(intent);

在你的活动/片段中:

private BroadcastReceiver mMessageReceiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            // Extract data included in the Intent
            String t = intent.getStringExtra("value1");
            String t1 = intent.getStringExtra("value2");
            //alert data here
        }
    };


       @Override
        public void onResume() {
            super.onResume();
            LocalBroadcastManager.getInstance(this.getActivity()).registerReceiver(mMessageReceiver,
                    new IntentFilter("myFunction"));
        }

        @Override
        public void onPause() {
            super.onPause();
            LocalBroadcastManager.getInstance(this.getActivity()).unregisterReceiver(mMessageReceiver);
        }