如何在不点击通知的情况下显示活动界面

3
我希望在通知到来时无需点击通知即可显示活动。我正在使用FCM发送通知。
如何在不点击通知的情况下打开活动
我正在尝试使用以下代码,但它不能打开活动
public class MyFirebaseMessagingService extends FirebaseMessagingService {

private static final String TAG = "MyFirebaseMsgService";
String messageContent = "";

@Override
public void onMessageReceived(RemoteMessage remoteMessage) {

    // TODO(developer): Handle FCM messages here.
    messageContent = remoteMessage.getData().get("message");
    showNotification(remoteMessage.getData().get("message"));
    postToastMessage(remoteMessage.getData().get("message"));
    Log.d(TAG, "From: " + remoteMessage.getFrom());


}

public void postToastMessage(final String message) {
    Handler handler = new Handler(Looper.getMainLooper());

    handler.post(new Runnable() {

        @Override
        public void run() {
            Toast.makeText(getApplicationContext(), message +" received", Toast.LENGTH_LONG).show();

            Intent newIntent = new Intent(MyFirebaseMessagingService.this, CallActivity.class);
            newIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            startActivity(newIntent);

        }
    });
}

private void showNotification(String message) {

    Intent i = new Intent(this, CallActivity.class);
    i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

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


    NotificationCompat.Builder builder = (NotificationCompat.Builder) new NotificationCompat.Builder(this)
            .setAutoCancel(true)
            .setContentTitle(" Test")
            .setContentText(message)
            .setSmallIcon(R.drawable.ic_launcher)
            .setContentIntent(pendingIntent);

    NotificationManager manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);

    manager.notify(0,builder.build());
}
}

我遇到了这个错误。

FA: Discarding data. Failed to send event to service

onTokenRefresh() 中,你将会收到什么类型的通知? - Stanislav Bondar
onTokenRefresh() 是由 Firebase 提供的。 - Lassie
如果你知道其他的,请告诉我。我会进行更改。 - Lassie
然后你只需要在那个类中使用这些方法(showNotification("hi")postToastMessage("hi"))。FirebaseInstanceIdService仅处理令牌刷新事件,而FirebaseMessagingService将使您的应用程序接收从控制台或其他适当方式发送的消息。 - Jay
我在收到通知后遇到了以下错误............ FA:丢弃数据。无法将事件发送到服务。 - Lassie
显示剩余7条评论
2个回答

0

试试这个,也许对你有帮助,

在onMessageReceived()方法中添加以下代码,

 Intent intent = new Intent(MyFirebaseMessagingService.this, NotificationActivity.class);//here put your activity name which you want to open
        intent.putExtra("isNotification", true);
        intent.putExtra("message", message);
        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        startActivity(intent);

我在NotificationActivity类中简单地获取消息

 if (getIntent().getBooleanExtra("isNotification", false)) {
        message = getIntent().getStringExtra("message");
        txt_message.setText(message);
    }

添加这个,

@Override
public void onMessageReceived(RemoteMessage remoteMessage) {


    Log.e(TAG, "From: " + remoteMessage.getFrom());
    Log.e(TAG, "onMessage receiveddd: " + remoteMessage.getData());
    //  Log.e(TAG, "onMessage notification: " + remoteMessage.getNotification().getBody());

    // Check if message contains a data payload.
    if (remoteMessage.getData().size() > 0) {
        Log.e("notification background", String.valueOf(remoteMessage.getData()));
        Log.d(TAG, "Message data payload: " + remoteMessage.getData());

        Map<String, String> data = remoteMessage.getData();
        String deviceID = data.get("DeviceID");
        String message = data.get("Message");



        Log.e("value11111111", deviceID);
        Log.e("value222222222", message);


        Intent intent = new Intent(MyFirebaseMessagingService.this, NotificationActivity.class);
        intent.putExtra("isNotification", true);
        // intent.putExtra("title", value1);
        intent.putExtra("message", message);
        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        startActivity(intent);

        //   sendNotification("message received");

    }
 }

然后从Postman发送此请求

{
 "data":{
 "DeviceID":"",// pass here your DeviceID
 "Message":"hiiii" // pass here your message
},
"to":""// pass here ypur tocken
  }

onMessageReceived() 方法被调用了吗?在 onMessageReceived() 中放置日志,Log.d("onMessage notification: " ,remoteMessage.getNotification().getBody()); - Jinal Awaiya
2
这仅在应用程序处于前台活动状态时有效。如果应用程序在后台,如何启动该活动? - Aparna
1
你有任何解决方案吗,@Aparna? - Aravindhan Gs
@Aparna,你有解决方案吗?能帮忙吗? - SARATH V

-1
在您的代码中创建一个BaseActivity,它扩展了AppComatActivity,所有其他活动都扩展自基础活动。在显示通知广播时,使用新活动广播您的意图,并在基础活动中创建一个接收器,在该接收器中,您可以打开您的活动。
如果需要更多确认,我可以展示如何编写此代码,
谢谢

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接