许多信使/应用发送Android通知,我可以直接在通知中回复而无需打开应用。 例如,此功能在WhatsApp或Telegram中。
我现在的问题是,怎么做?
//更新:
这是我试过的代码:
// Start Direct
// Key for the string that's delivered in the action's
final String KEY_TEXT_REPLY = "ring_direct_reply";
replyLabel = App.getInstance().getResources().getString(R.string.action_reply);
RemoteInput remoteInput = new RemoteInput.Builder(
.setLabel(replyLabel)
.build();
PendingIntent chatPendingIntent = PendingIntent.getBroadcast(
context,
0,
new Intent(context, NotificationReceiver.class),
PendingIntent.FLAG_UPDATE_CURRENT
);
// Create the reply action and add the remote input.
Notification.Action action =
new Notification.Action.Builder(
android.R.drawable.ic_delete,
App.getInstance().getResources().getString(R.string.action_reply),
chatPendingIntent
)
.addRemoteInput(remoteInput)
.build();
// End Direct Reply
NotificationCompat.Builder mBuilder =
new NotificationCompat.Builder(context)
.setSmallIcon(R.drawable.ic_action_push_notification)
.setContentTitle(title)
.setContentText(message)
.addAction(action)
.setStyle(new NotificationCompat.BigTextStyle().bigText(message));
Intent resultIntent = new Intent(context, DialogsActivity.class);
resultIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
TaskStackBuilder stackBuilder = TaskStackBuilder.create(context);
stackBuilder.addParentStack(DialogsActivity.class);
stackBuilder.addNextIntent(resultIntent);
PendingIntent resultPendingIntent = stackBuilder.getPendingIntent(0, PendingIntent.FLAG_UPDATE_CURRENT);
mBuilder.setContentIntent(resultPendingIntent);
NotificationManager mNotificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
mBuilder.setDefaults(Notification.DEFAULT_SOUND | Notification.DEFAULT_VIBRATE | Notification.DEFAULT_LIGHTS);
mBuilder.setAutoCancel(true);
mNotificationManager.notify(0, mBuilder.build());
和
//更新2:
解决了我的第一个问题后,我遇到了一个新问题:
java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()
但这可以通过添加Looper.prepare();
来解决答案 0 :(得分:2)
有两种方式:
这就是Hangtous的用法:使用Nougat中引入的回复API。只需遵循官方指南:https://developer.android.com/guide/topics/ui/notifiers/notifications.html#direct
据我所知,WhatsApp是如何做到的(我不确定电报):创建一个透明背景(在主题中设置)的活动和屏幕顶部的一些内容输入字段和发送按钮。
<强>更新强>
现在您展示了一些代码,实际上非常简单。 您正在混合本机API和Compat API。
Notification
来自包android.app.Notification
NotificationCompat
来自包android.support.v4.app.NotificationCompat
你不能混合它们。选择一个并使用那一个。我建议将compat用于所有内容,因为它自动处理向后兼容性。