2

TL;DR 版本:我注意到可以为 Android 中的可操作通知分配多个 RemoteInput 实例- 但找不到有用的场景,甚至不确定如何正确使用此潜在功能.

使用 NotificationListenerService (就像在这个示例应用程序中一样)我注意到在启动通知的操作/意图时,我理论上可以选择要填充的远程输入。所以我想知道 Android UI 的默认行为会是什么样子。

我已将此演示应用程序与来自另一个线程的混合使用,以生成一个通知,其操作分配有两个不同的 RemoteInput 实例:

public void showRemoteInputNotification(Context context) {

    //Yes intent
    Intent yesReceive = new Intent();
    yesReceive.setAction(KEY_TEXT_REPLY);
    Bundle yesBundle = new Bundle();
    yesBundle.putInt("userAnswer", 1);
    yesReceive.putExtras(yesBundle);
    PendingIntent pendingIntentYes = PendingIntent.getBroadcast(context, 12345, yesReceive, PendingIntent.FLAG_UPDATE_CURRENT);
    //mBuilder.addAction(R.drawable.calendar_v, "Yes", pendingIntentYes);

    RemoteInput remoteInput = new RemoteInput.Builder(KEY_TEXT_REPLY)
            .setLabel("TEST")
            .build();

    RemoteInput remoteInput2 = new RemoteInput.Builder(KEY_TEXT_REPLY2)
            .setLabel("TEST2")
            .build();

    PendingIntent replyIntent = PendingIntent.getActivity(context,
            REPLY_INTENT_ID,
            getMessageReplyIntent(LABEL_REPLY),
            PendingIntent.FLAG_UPDATE_CURRENT);

    PendingIntent archiveIntent = PendingIntent.getActivity(context,
            ARCHIVE_INTENT_ID,
            getMessageReplyIntent(LABEL_ARCHIVE),
            PendingIntent.FLAG_UPDATE_CURRENT);

    NotificationCompat.Action replyAction =
            new NotificationCompat.Action.Builder(android.R.drawable.sym_def_app_icon,
                    LABEL_REPLY, pendingIntentYes)//replyIntent)
                    .addRemoteInput(remoteInput)
                    .addRemoteInput(remoteInput2)
                    .build();

    NotificationCompat.Action archiveAction =
            new NotificationCompat.Action.Builder(android.R.drawable.sym_def_app_icon,
                    LABEL_ARCHIVE, archiveIntent)
                    .build();

    NotificationCompat.Builder builder =
            createNotificationBuider(context, "Remote input", "Try typing some text!");
    builder.addAction(replyAction);
    builder.addAction(archiveAction);
    //builder.addAction(android.R.drawable.ic_menu_send, "Yes", pendingIntentYes);

    showNotification(context, builder.build(), REMOTE_INPUT_ID);
}

然后,UI(通知顶部栏向下滚动)看起来仍然相同(相同数量的操作按钮)。所以我想也许当用户通过系统通知 UI 执行通知的操作时,两个远程输入都会被使用?因此,我在我添加的 BroadcastReceiver 类中检查了该应用程序,该应用程序首先生成了该通知:

public class NotificationReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        String action = intent.getAction();
        Set<String> keys1 = intent.getExtras().keySet();
        Set<String> keys2 = RemoteInput.getResultsFromIntent(intent).keySet();
    }
}

并且似乎只有最后一个要添加到 Action 的 RemoteInput 正在使用。

所以基本上我想知道是否有更好的方法来使用或演示这种场景 - 或者也许这是一个不好的做法?我是否混合了不应该以这种方式使用的不同 API 部分?

编辑:谷歌也尝试了这个例子,唯一的区别(据我所知)是这个使用的是可穿戴式动作/远程输入。在其generateBigPictureStyleNotification函数内部,我添加/更改了以下几行:

RemoteInput remoteInput2 =
                new RemoteInput.Builder(BigPictureSocialIntentService.EXTRA_COMMENT2)
                        .setLabel("TEST")
                        // List of quick response choices for any wearables paired with the phone
                        .setChoices(bigPictureStyleSocialAppData.getPossiblePostResponses())
                        .build();
[...]
NotificationCompat.Action replyAction =
            new NotificationCompat.Action.Builder(
                    R.drawable.ic_reply_white_18dp,
                    replyLabel,
                    replyActionPendingIntent)
                    .addRemoteInput(remoteInput)
                    .addRemoteInput(remoteInput2)
                    .build();

但是,就像以前一样,当我尝试从 Android 的通知 UI 回复时,它似乎只填充了最后一个 RemoteInput 键(签入BigPictureSocialIntentService's getMessage())。

4

0 回答 0