我正在创建notification
,但在使用PendingIntent
发送时,extras
会在此过程中丢失。我使用的是singleTop Activity
,因此我在onNewIntent
以及我的handleIntent
设置了一个断点,以便在点击通知时查看哪个断点。
当我点击通知时,它会启动我的handleIntent
方法。我认为singleTop
活动会触发onNewIntent
方法吗?
创建Intent extras
时,为什么我的notification
会在此过程中丢失?我调试了intent
并显示了Bundle[mParcelledData.dataSize=168]
。我如何unparcel
捆绑?
处理意图的活动
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
setVolumeControlStream(AudioManager.STREAM_MUSIC);
mPrefs = new SharedPrefs(this);
mDb = DatabaseManager.getInstance(this);
mVolleyManager = new VolleyManager(this);
fm = getSupportFragmentManager();
setupToolbar();
setupNavDrawer();
setupBroadcastReceivers();
setupUniversalImageLoader();
if (savedInstanceState == null) {
FragmentTransaction ft = fm.beginTransaction();
ft = ViewManager.setFragmentAnimations(ft);
if (!mPrefs.getDemoMode()) {
if (!mPrefs.getLoggedIn()) {
ft.add(R.id.container, LoginFragment.newInstance(), GlobalVars
.TAG_LOGIN_FRAGMENT).commit();
}
else {
ft.add(R.id.container, BrowseFragment.newInstance(), GlobalVars.
TAG_BROWSE_FRAGMENT).commit();
}
}
}
// Handles intents mainly sent from GCM notification click events
handleIntent();
}
@Override
public void onNewIntent(Intent intent) {
super.onNewIntent(intent);
setIntent(intent);
handleIntent();
}
private void handleIntent() {
Intent intent = getIntent();
if (intent.hasExtra(GlobalVars.KEY_EVENT)) {
handleGcmIntent(intent);
}
}
将附加内容添加到意图并创建通知
Intent intent = new Intent(this, MainActivity.class);
intent.putExtra(GlobalVars.KEY_EVENT, events);
intent.putExtra(GlobalVars.KEY_GAME_DATE_ID, gameDate.getId());
String text = getResources().getString(R.string.msg_found_match);
createNotification(text, intent);
private void createNotification(String text, Intent intent) {
mNotificationManager = (NotificationManager) this.getSystemService(Context
.NOTIFICATION_SERVICE);
NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(this)
.setSmallIcon(R.drawable.ic_launcher)
.setContentTitle("LovelUp")
.setContentText(text)
.setAutoCancel(true)
.setLights(R.color.primary_blue, 2000, 2000);
if (mPrefs.getNotificationVibrate()) {
mBuilder.setVibrate(new long[] {1000, 1000, 1000});
}
if (mPrefs.getNotificationSound()) {
mBuilder.setSound(RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION));
}
TaskStackBuilder stackBuilder = TaskStackBuilder.create(this);
stackBuilder.addParentStack(MainActivity.class);
stackBuilder.addNextIntent(intent);
PendingIntent contentIntent = stackBuilder.getPendingIntent(0, PendingIntent
.FLAG_CANCEL_CURRENT);
mBuilder.setContentIntent(contentIntent);
mNotificationManager.notify(NOTIFICATION_ID, mBuilder.build());
}
答案 0 :(得分:0)
您可能希望使用putStringArrayListExtra
将ArrayList添加到捆绑包中。
在你的情况下:
intent.putStringArrayListExtra(GlobalVars.KEY_EVENT, events);
然后使用getStringArrayListExtra
检索数据。
更多信息here(搜索putStringArrayListExtra
)
答案 1 :(得分:0)
这是因为Intent.putExtra(String key, <Whatever> value)
不接受ArrayList作为值。你的代码经过编译器,因为ArrayList是Serializable,它被接受,但是使用ArrayList还有别的错误。
您应该使用[putStringArrayListExtra()][1]