Parcelable 对象通过通知被接收为空,但在活动之间工作

我有一个名为 ParserService 的意图服务,它执行一些任务并创建一个可打包的对象(ArtistInfo)。然后它检查应用程序是否在前台。如果是,则它会在意图附加项中发送带有可分割对象的广播。此广播由活动 MainActivity.java 接收,然后该活动创建具有相同对象的意图,并启动名为 ListSongsActivity 的活动,在该活动中成功接收了 Parcelable 对象。


但是,如果应用程序不在前台,则 ParserService 会发送一个通知,其意图与广播的意图相同。但是当 ListSongsActivity 通过通知启动时,parcelable 对象(ArtistInfo)这次为空。我也在意图中传递一个字符串。该字符串通过通知意图正确接收,但parcelable 对象为空。


请在下面找到相关的代码片段。


来自 ParserService 的广播和通知代码:


if (CommonUtils.appInForeground(getApplicationContext())) {

                Log.d(TAG, "onHandleIntent(): Sending success broadcast.");

                sendBroadcast(createSuccessIntent(artistInfo));

            } else {

                // TODO: 10-10-2018 tapping on notification does nothing!!

                Log.d(TAG, "onHandleIntent(): Sending success notification.");

                String body = "Parsing complete for the url: " + url;

                Intent notifyIntent = new Intent(getApplicationContext(), ListSongsActivity.class);

                notifyIntent.putExtra(Constants.MUSIC_SITE, siteName);

                notifyIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);

                Bundle bundle = new Bundle();

                bundle.putParcelable(Constants.PARSED_ARTIST_INFO, artistInfo);

                intent.putExtras(bundle);

                CommonUtils.sendNotification(getApplicationContext(), Constants.LIST_SONGS_NOTIFICATION_TITLE

                        , body, Constants.LIST_SONGS_NOTIFICATION_CHANNEL_ID, notifyIntent,

                        Constants.LIST_SONGS_NOTIFICATION_ID, R.drawable.ic_launcher_background);

            }


private Intent createSuccessIntent(ArtistInfo artistInfo) {

    Intent intent = new Intent();

    intent.setAction(Constants.PARSE_SUCCESS_ACTION_KEY);

    Bundle bundle = new Bundle();

    bundle.putParcelable(Constants.PARSE_SUCCESS_MESSAGE_KEY, artistInfo);

    intent.putExtras(bundle);

    return intent;

}


富国沪深
浏览 152回答 2
2回答

皈依舞

在调用sendNotification()else 条件之前,您将 bundle 置于不同的intent,而不是notifyIntent。在 else 中更改您的代码,如下所示else {    // TODO: 10-10-2018 tapping on notification does nothing!!    Log.d(TAG, "onHandleIntent(): Sending success notification.");    String body = "Parsing complete for the url: " + url;    Intent notifyIntent = new Intent(getApplicationContext(), ListSongsActivity.class);    notifyIntent.putExtra(Constants.MUSIC_SITE, siteName);    notifyIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);    Bundle bundle = new Bundle();    bundle.putParcelable(Constants.PARSED_ARTIST_INFO, artistInfo);    notifyIntent.putExtras(bundle);    CommonUtils.sendNotification(getApplicationContext(), Constants.LIST_SONGS_NOTIFICATION_TITLE                            , body, Constants.LIST_SONGS_NOTIFICATION_CHANNEL_ID, notifyIntent,                            Constants.LIST_SONGS_NOTIFICATION_ID, R.drawable.ic_launcher_background);   }

幕布斯6054654

也许您正在创建的待处理意图比应用程序中的要多。在这种情况下,您应该使用,PendingIntent.FLAG_CANCEL_CURRENT从头开始创建 Intent 并扩充您的包
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java