android12、如何替换通知蹦床

android 12, how replace the notification trampolines

有android拦截推送通知的sdk,一直在使用notification trampoline进一步打开端activity。在深度链接的情况下,使用此 sdk 的应用程序将打开配置的深度链接处理程序 activity。

trampoline 的代码段:

public class NotificationTrampolineReceiver extends BroadcastReceiver {
@Override
    public void onReceive(final Context context, final Intent intent) {
        final PendingResult asyncResult = goAsync();
        ExecutorService executor = Executors.newSingleThreadExecutor();
        asycTask(executor, new Runnable() {
            @Override
            public void run() {
                String urlStr = getStringExtra(intent, PUSH_URL);
                if (urlStr != null) {
                    var intent2: Intent = Intent(Intent.ACTION_VIEW, Uri.parse(urlStr));
                    if (intent2 != null) {
                        intent2.addFlags(FLAG_ACTIVITY_NEW_TASK);
                        intent2.addFlags(FLAG_ACTIVITY_BROUGHT_TO_FRONT);
                        context.startActivity(intent2);
                        logAnalytics(intent, Message.MessageAction.OPEN);                   
                     }
                }
                asyncResult.finish();
            }
        });
    }

    void asycTask(ExecutorService executor, final Runnable task) {
        try {
            executor.execute(task);
        } catch (Throwable ex) {}
    }
}

The notification trampolines is not working in Android 12 anymore。 SDK 中需要通知蹦床来拦截点击并执行类似记录分析事件的操作;单击通知上的 Action 按钮时关闭通知抽屉等。并且此 sdk 不知道应用程序可以配置哪些活动来处理深层链接。

用一个虚拟的activity代替trampoline会起作用,但感觉不对,即打开activity并在里面打开另一个然后完成这个。

当 android 12 对 notification tramoline 施加限制时,是否建议替换此处的用例?还没找到。

对于先拦截推送通知点击再打开的建议新解决方案是什么activity?

您最好直接从 Notification 启动 ActivityActivity 然后可以进行分析并找出 Activity 需要启动的内容,然后委托给它。作为替代方案,已启动的 Activity 可以将广播 Intent 发送到您的 BroadcastReceiver,它可以完成这项工作。

注意:如果您直接从 Notification 启动 Activity,则 不是蹦床 。当您直接从 Notification 启动 ServiceBroadcastReceiver 并且 该组件 然后启动 Activity 时,就会发生蹦床。这个想法是用户需要控制在他的屏幕上弹出的内容。如果他点击一个通知,他希望他的屏幕上会出现一些东西,如果你的 Service 启动一个 Activity,那随时可能发生并可能打断他。