gpt4 book ai didi

android - 通知中的 PendingIntents

转载 作者:搜寻专家 更新时间:2023-11-01 09:18:25 27 4
gpt4 key购买 nike

我想显示一个显示进度的通知正在进行的操作。这对我很有效。但同时远程 View 应包含取消按钮以停止正在进行的操作。通常的内容 Intent 仍然应该做其他事情,即不取消正在进行的操作。看来我只能有一个 Intent 。

我必须指定一个在点击时启动的 contentIntent通知:如果我没有指定我得到一些东西行:

E/ActivityManager(   62): Activity Manager Crash
E/ActivityManager( 62): java.lang.IllegalArgumentException: contentIntent required ...

我为“取消”按钮设置了另一个 Intent :

Intent cancelSyncIntent = new Intent("com.xyz.CANCEL_SYNC");
contentView.setOnClickPendingIntent(R.id.cancel_sync,
PendingIntent.getBroadcast(context, 0,
cancelSyncIntent, 0));

但这永远行不通。我总是在按钮时得到内容 Intent 被点击。看起来我不能在远程 View 中使用按钮通知?!

我可能会显示一个文本:“<< Press to cancel operation >>”,但这看起来有点笨拙。

更新:Afer J. 的建议:

    final Notification n = new Notification(R.drawable.gen_auto_notification_icon, context.getResources()
.getString(
fastSyncOnly ? R.string.fast_synchronization_running_notification_title
: R.string.synchronization_running_notification_title), new Date().getTime());

n.flags = Notification.FLAG_ONGOING_EVENT;

final RemoteViews contentView = new RemoteViews(context.getPackageName(), R.layout.in_progress_notification);
n.contentView = contentView;

// Intent cancelSyncIntent = new Intent("com.newsrob.CANCEL_SYNC");
Intent cancelSyncIntent = new Intent();
cancelSyncIntent.setClass(context, FireReceiver.class);
PendingIntent pendingCancelSyncIntent = PendingIntent.getActivity(context, 0, cancelSyncIntent, 0);
contentView.setOnClickPendingIntent(R.id.cancel_sync, pendingCancelSyncIntent);

Intent showDashboardIntent = new Intent(context, DashboardListActivity.class);
PendingIntent showDashboardPendingIntent = PendingIntent.getActivity(context, 0, showDashboardIntent, 0);
n.contentIntent = showDashboardPendingIntent;

最佳答案

简短回答:通知 View 中不能有可点击的 subview 。

更长的答案...

我花了一天时间尝试让它也能正常工作,最终放弃并查看了 Android 源代码。看起来一切都发生在 StatusBarService.java 中的 makeNotificationView() 中。在那里,代码为通知下拉阴影中的每一行增加了一个名为“status_bar_latest_event”的布局。它从刚刚膨胀的名为“content”的 View 中获取一个 ViewGroup,对其调用 setDescendantFocusability(ViewGroup.FOCUS_BLOCK_DESCENDANTS),然后将您的通知 View 添加为该 View 的 subview 。因此,假设我了解 FOCUS_BLOCK_DESCENDANTS 的工作原理,看来您的 View 或其任何 subview 都没有希望获得焦点或点击事件。

我还遵循了与 Notification 关联的主要 PendingEvent 的工作逻辑。托管通知 View 的同一个 ViewGroup 会调用 setOnClickListener() 来注册名为“Launcher”的监听器类。当该类获得 onClick() 事件时,它只需调用与通知关联的 PendingIntent 上的 send() 方法。我希望点击的坐标可能会传递过来,这样我至少可以尝试计算点击了哪个按钮,但运气不佳。

无论如何,如果有人知道解决此问题的方法,我很乐意听到。现在,我只是拉出我的按钮并继续前进。

关于android - 通知中的 PendingIntents,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2826786/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com