敲击通知时,活动中的触发方法



我的应用程序反复从服务器加载数据。这些数据包括消息。
每当加载新消息时,接口的回调方法 onMessagesReceived(int numofmessages(
该应用程序只有一个活动,每个屏幕都作为片段实现。片段的切换由专用 navigator 类管理。

我的问题是处理用户对通知的处理。当用户点击通知时,应显示消息列表。

public class MainActivity extends AppCompatActivity implements MessageListener {
    private static final int MESSAGE_NOTIFICATION_ID = 101010;
    private static final String EXTRA_SHOW_MESSAGES = "SHOW_MESSAGES";
    private Navigator mNavigator;
    @Override
    onMessagesReceived(int numOfMessages) {
        Intent intent = new Intent(this, MainActivity.class);
        testIntent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
        testIntent.putExtra(EXTRA_SHOW_MESSAGES, true);
        PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent, 0);
        NotificationCompat.Builder builder = new NotificationCompat.Builder(this, "testChannel")
                .setSmallIcon(R.drawable.ic_message_notification)
                .setContentTitle("New messages!")
                .setContentText("You got " + numOfMessages + " new messages")
                .setPriority(NotificationCompat.PRIORITY_DEFAULT)
                .setContentIntent(pendingIntent);
        NotificationManagerCompat notificationManager = NotificationManagerCompat.from(this);
        notificationManager.notify(MESSAGE_NOTIFICATION_ID, builder.build());
    }
    @Override
    protected void onResume() {
        super.onResume();
        Bundle extras = getIntent().getExtras();
        if (extras != null && extras.containsKey(EXTRA_SHOW_MESSAGES)) {
            if (extras.getBoolean(EXTRA_SHOW_MESSAGES)) {
                mNavigator.openMessageList();
            }
        }
    }
}

目前,当应用在后台时出现主动脉,但在 onresume 中,捆绑包以 null
返回当该应用在前景中,根本什么也不会发生。

我想单击通知:
- 当用户在应用程序内部时,应打开Messagelist片段
- 当用户不在应用中时,应在打开Messagelist Fragment

之前开始使用。

有人可以给我一个提示,如何从这里开始?也许在这里使用意图不是正确的解决方案吗?

您可以使用意图,只需将一些布尔额外功能放在意图中,只需检查主活动中的值,如果该额外的值为真,然后调用您的方法。

在对意图和通知进行了更多挖掘之后,我终于提出了一个解决方案。

public class MainActivity extends AppCompatActivity implements MessageListener {
    private static final int MESSAGE_NOTIFICATION_ID = 101010;
    private static final String EXTRA_SHOW_MESSAGES = "SHOW_MESSAGES";
    private Navigator mNavigator;
    @Override
    onMessagesReceived(int numOfMessages) {
        Intent intent = new Intent(this, MainActivity.class);
        testIntent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
        testIntent.putExtra(EXTRA_SHOW_MESSAGES, true);
        PendingIntent pendingIntent = PendingIntent.getActivity(
            this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
        NotificationCompat.Builder builder = new NotificationCompat.Builder(this, "testChannel")
                .setSmallIcon(R.drawable.ic_message_notification)
                .setContentTitle("New messages!")
                .setContentText("You got " + numOfMessages + " new messages")
                .setPriority(NotificationCompat.PRIORITY_DEFAULT)
                .setContentIntent(pendingIntent);
        NotificationManagerCompat notificationManager = NotificationManagerCompat.from(this);
        notificationManager.notify(MESSAGE_NOTIFICATION_ID, builder.build());
    }
    @Override
    protected void onNewIntent(Intent intent) {
        super.onNewIntent(intent);
        this.setIntent(intetnt)
        Bundle extras = intent.getExtras();
        if (extras != null && extras.containsKey(EXTRA_SHOW_MESSAGES)) {
            if (extras.getBoolean(EXTRA_SHOW_MESSAGES)) {
                mNavigator.openMessageList();
            }
        }
    }
}

我将代码移动到 onnewintent 中。当活动获得新意图时, on Resume 之前,该方法被调用。无论活动在前景中,这都会触发任何活动。我还将这个新意图设置为使用 setIntent 的活动,否则, getIntent((。。

相关内容

  • 没有找到相关文章

最新更新