当前位置: 首页 > 知识库问答 >
问题:

通知中的意图没有额外内容

束新
2023-03-14

这似乎是一个常见的问题,我浏览了我已经可以找到的所有相关问题:活动没有获得新的意图,为什么没有在android通知意图中发送额外的数据(整数)?,通知传递旧的意图额外内容,无法在通知中放置意图的额外内容,android未决意图通知问题;但仍然无法解决这个问题。

问题是一样的。我设置了一个带有一些额外信息的PendingIntent通知,但我在另一边没有得到它。

以下是生成通知的代码:

Notification notification = new Notification(R.drawable.icon, getResources().getString(R.string.notification_ticker), System.currentTimeMillis());
notification.flags = Notification.FLAG_AUTO_CANCEL | Notification.FLAG_ONLY_ALERT_ONCE;

Intent start_test = new Intent(this, MyActivity.class);
start_test.putExtra("start_test", true);
start_test.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

PendingIntent pi = PendingIntent.getActivity(this, (int) System.currentTimeMillis(), start_test, PendingIntent.FLAG_CANCEL_CURRENT);
notification.setLatestEventInfo(this, getResources().getString(R.string.notification_title), getResources().getString(R.string.notification_content, expired), pi);
nm.notify(NOTIFICATION_ID, notification);

另一方面:

boolean start_test=getIntent().getBooleanExtra("start_test", false);

捆绑包实际上不存在(getExtras()返回null)。

我尝试了pendingent的不同标志。getActivityFLAG\u UPDATE\u CURRENTFLAG\u CANCEL\u CURRENTFLAG\u ONE\u SHOT),这些都没有帮助。

如代码所示,我使用getCurrentMillis来确保requestID发生更改。。。。

还发现在MyActive中,onCreateonNewIntent没有被调用。只有onResume是。即使FLAG_ACTIVITY_NEW_TASK已设置...?

我错过了一些非常简单的东西吗?

共有3个答案

公孙志尚
2023-03-14

>

  • 如果不需要,那么避免将清单中的活动设置为单个任务。如果可以,请省略这一行或将其更改为singleTop:

      android:launchMode="singleTask”
    

    如果必须有一个任务,那么在pending intent中将标志设置为:intent。标记|活动|新任务|意图。标记活动、清除任务和挂起内容。标记取消当前。

    resultIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK |Intent.FLAG_ACTIVITY_CLEAR_TASK);
    pIntent = PendingIntent.getActivity(context, 0, resultIntent,    PendingIntent.FLAG_CANCEL_CURRENT );
    

    如果您只有一项任务,请通过setIntent(intent)重置onNewIntent()内活动中的额外任务;

    protected void onNewIntent(Intent intent) {
           setIntent(intent);
           ... 
     }
    

  • 慕震博
    2023-03-14

    我刚刚添加了PendingIntent。FLAG_UPDATE_CURRENT标志到我的未决意图,它开始为我工作(跳过Intent的所有标志)。

    示例代码:

    PendingIntent pendIntent = PendingIntent.getActivity(getApplicationContext(), 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
    
    林和煦
    2023-03-14

    为通知意图设置FLAG_ACTIVITY_NEW_TASK,将导致以下情况:

    >

  • 如果活动尚未在任务中运行,则将启动一个新任务,并在onCreate()中将意图传递给活动

    但是,如果活动已经在任务中运行,则该任务将被带到前台。仅此而已。Intent将不会被传递,也不会调用onNewIntent()

    如果您希望实际交付Intent,您需要指定:

    start_test.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | 
                        Intent.FLAG_ACTIVITY_SINGLE_TOP);
    

    活动的launchMode是否为singleTop没有区别,您仍然必须指定意图。在意图中标记活动单顶部

    注意:如果活动已在任务中运行,且该活动不在该任务的活动堆栈顶部,则该任务将被带到前台。这就是全部。意图将不会实现。实现这一点的唯一方法是添加意图。将_ACTIVITY _CLEAR _TOP标记为其他两个标记,但这可能不是您想要的(取决于您的具体场景)。

    请参阅我(仍)在谷歌代码上的公开问题,网址为http://code.google.com/p/android/issues/detail?id=17137

  •  类似资料:
    • 有没有一种方法可以只从一个类中接收意图附加内容?例如,我有两个使用意图打开第三个活动的活动。现在我只希望前两个中的一个通过附加内容,这样我就可以在第三个活动中接收它。 我已经实现了所有功能,但它会崩溃,因为当我打开第二个没有添加额外功能的第三个活动时,它会崩溃我的应用程序。 为了更清楚地描述它: 活动1:通过意向附加 活动1和2都使用意图来启动活动3,但我只需要活动1中的额外内容。

    • 我正在尝试启用设备管理,这样我就可以在Android9中创建二级用户。 首先,使用ACTION_ADD_DEVICE_ADMIN发送一个意图,如下所示: deviceAdminReceiver必须在manifest.xml中预先定义,并使用适当的意图筛选器: 注意:我遵循了以下谷歌Android指南https://developer.Android.com/guide/topics/admin/d

    • 问题内容: 我想我要跳过通过。但是我找不到多余的东西吗?任何get方法都会收到类似“不适用于字符串”之类的错误。 项目详细信息: 我的课: 我的putExtra: GetChild函数: 但是我找不到我应该怎么写来获取arrayList? 问题答案: 但是我找不到应该怎么写来获取arrayList 简短答案:您不能。您只能通过,然后使用 但是 。如果要通过Intent传递自定义对象,则必须实现以下

    • 我正在使用Android TaskStackBuilder,以便在单击通知时使用预定义的堆栈创建通知。 在应用程序中,我有2项活动: 主活动发射器 活动B 在主活动中,我使用TaskStackBuilder和以下堆栈显示通知:[MainActivity(启动器意图),ActivityB] 当通知显示时,我拉下状态栏并单击通知,然后我看到预期的ActivityB,当单击back按钮时,我也看到预期的

    • 问题内容: 我希望能够发出通知,以提醒用户有关计时器已结束的信息,但是,当您单击通知时,我不希望有任何意图。 我已经尝试将null传递给意图 问题答案: 您可以传递参数 代替 上

    • 我知道,要放入值,我可以,要检索值,我可以,但在下面的代码中,它的行为不像预期的那样。检索值时,我获得。 设置值的代码: 并且我正在检索BroadCaseReceiver的onReceive中的值:[省略的无关代码]