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

PendingIntent不发送意向性附加

竺捷
2023-03-14

我的refreshservice会发出一个通知,当用户单击它时启动我的mainactivity

这看起来是这样的:

    Log.d("Refresh", "RefreshService got: isNextWeek: " + String.valueOf(isNextWeek));

    Intent notificationIntent = new Intent(this, MainActivity.class);
    notificationIntent.putExtra(MainActivity.IS_NEXT_WEEK, isNextWeek);

    Log.d("Refresh", "RefreshService put in Intent: isNextWeek: " + String.valueOf(notificationIntent.getBooleanExtra(MainActivity.IS_NEXT_WEEK,false)));
    pendingIntent = PendingIntent.getActivity(this, 0, notificationIntent, 0);

    builder = new NotificationCompat.Builder(this).setContentTitle("Title").setContentText("ContentText").setSmallIcon(R.drawable.ic_notification).setContentIntent(pendingIntent);
    notification = builder.build();
    // Hide the notification after its selected
    notification.flags |= Notification.FLAG_AUTO_CANCEL;
    notificationManager.notify(NOTIFICATION_REFRESH, notification);

如您所见,notificationintent应该具有boolean额外的is_next_week,其值为isnextweek放在pendingintent中。

当我单击“现在”这个通知时,我总是得到false作为是NextWeek的值

这是我在mainactivity中获取值的方式:

    isNextWeek = getIntent().getBooleanExtra(IS_NEXT_WEEK, false);

日志:

08-04 00:19:32.500  13367-13367/de.MayerhoferSimon.Vertretungsplan D/Refresh: MainActivity sent: isNextWeek: true
08-04 00:19:32.510  13367-13573/de.MayerhoferSimon.Vertretungsplan D/Refresh: RefreshService got: isNextWeek: true
08-04 00:19:32.510  13367-13573/de.MayerhoferSimon.Vertretungsplan D/Refresh: RefreshService put in Intent: isNextWeek: true
08-04 00:19:41.990  13367-13367/de.MayerhoferSimon.Vertretungsplan D/Refresh: MainActivity.onCreate got: isNextWeek: false
    Intent i = new Intent(this, MainActivity.class);
    i.putExtra(IS_NEXT_WEEK, isNextWeek);
    finish();
    startActivity(i);

总是有false值,我做错了什么?

这样就解决了问题:https://stackoverflow.com/a/18049676/2180161

报价:

PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, notificationIntent, PendingIntent.FLAG_CANCEL_CURRENT);

http://developer.android.com/reference/android/app/pendingintent.html#flag_cancel_current

请参阅下面的答案,为什么使用pendingintent.flag_update_current更好。

共有1个答案

乐正宜人
2023-03-14

使用pendingintent.flag_cancel_current不是一个好的解决方案,因为内存的使用效率很低。而是使用PendingIntent.Flag_Update_Current。

同时使用intent.flag_activity_single_top(如果活动已经在历史堆栈的顶部运行,则不会启动该活动)。

Intent resultIntent = new Intent(this, FragmentPagerSupportActivity.class).
                    addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);  
resultIntent.putExtra(FragmentPagerSupportActivity.PAGE_NUMBER_KEY, pageNumber);

PendingIntent resultPendingIntent =
                PendingIntent.getActivity(
                        this,
                        0,
                        resultIntent,
                        PendingIntent.FLAG_UPDATE_CURRENT
                );

然后:

@Override
    protected void onCreate(Bundle savedInstanceState) {
        try {
            super.onCreate(savedInstanceState);

            int startPageNumber;
            if ( savedInstanceState != null)
            {
                startPageNumber = savedInstanceState.getInt(PAGE_NUMBER_KEY);
//so on
@Override
protected void onNewIntent(Intent intent) {
    int startPageNumber;

    if (intent != null) {
        startPageNumber = intent.getExtras().getInt(PAGE_NUMBER_KEY);
    } else {
        startPageNumber = 0;
    }
}
 类似资料:
  • 我有一个PDF文件,我正试图通过Intent分享。行动!。不过当我点击其中一个选项(gmail、google drive等)时。上面写着“请求不包含数据”**更新代码如下 我想问题一定出在我的电脑上?这就是说,我的文件的URL肯定有效,因为我可以成功地使用该路径打印PDF。 编辑:我已经更新了我的代码一点点。 这让我从Whatsapp获得“文件格式不被接受”,从Gmail获得“无法附加文件”。 想

  • 我试图将通知中的信息发送到调用的活动,而我的活动中的信息为NULL。 通知的代码为:

  • 我正在尝试使用不同的应用程序附加图像,代码如下: 附加的图像是使用以下代码生成的: 但当我试图打开GMAIL与此意图,只有文本显示应用程序与错误:. 我错过了什么? 编辑 这是另一个解决方案:android。操作系统。FileUrieExposedException:文件。jpg通过ClipData曝光了app之外的内容。项目getUri()

  • 我正在使用FCM进行消息推送,我正在将数据从通知发送到我正在打开的活动。 建筑通知规范: 在我的活动中,我得到了如下意图: 但问题是,每次Intent Extras在活动中为空时,我都检查了我在社区中找到的所有可能的原因,但每次响应都是相同的。 我试过下面提到的链接 Intent的额外值始终为空 Android通知PendingIntent Extras null 总是从通知意图android获取

  • 当我将额外的内容传递给PendingIntent时,sendBroadcastRecencer永远不会接收到消息,因为从来没有调用过这个的方法。为什么会发生这种情况?

  • GET-Request标头: 重新搜索后报头