我有一个名为 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;
}
皈依舞
幕布斯6054654
相关分类