В нашем приложении есть разные уведомления, которые могут открывать разные действия. Поэтому мы создали схему URI для этого. Получены уведомления и открываются правильные действия. Я создаю стек для правильной навигации со следующим кодом:
Intent intent = new Intent(Intent.ACTION_DEFAULT, Uri.parse(uri));
TaskStackBuilder stackBuilder = TaskStackBuilder.create(context);
stackBuilder.addNextIntentWithParentStack(intent);
PendingIntent contentIntent =
stackBuilder.getPendingIntent(0, PendingIntent.FLAG_UPDATE_CURRENT);
NotificationManager mNotifM = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
Notification.Builder mBuilder = new Notification.Builder(context);
mNotifM.notify(NotificationId.getID(), mBuilder.setStyle(new Notification.BigTextStyle(mBuilder)
.bigText(bigText)
.setBigContentTitle(title)
.setSummaryText(summaryText))
.setContentTitle(title)
.setSmallIcon(R.drawable.udechile_launcher)
.setContentText(summaryText)
.setAutoCancel(true)
.setContentIntent(contentIntent)
.setTicker(bigText)
.build());
Проблема в том, что в Android 4.1.1 код для воссоздания стека работает неправильно. Единственный способ, с помощью которого я работал, - это реферирование класса вместо uri при создании намерения:
intent = new Intent(context, MatchDetail.class);
Проблема заключается в том, что мне придется делать Switch-Case для каждого uri, чтобы иметь возможность создавать намерения с каждым классом. Это прежде всего поражает цель URI. Также, если в будущем мне нужно добавить новый Push Target, это не просто добавление URI в AndroidManifest.xml. Я должен добавить новый случай в коммутатор Push Notification Receiver.
Кто-нибудь знает, как сделать эту работу в Android 4.1.1 с URI?
Извлечение манифеста:
<activity
android:name=".controller.MatchDetail"
android:label="@string/title_activity_match_detail"
android:parentActivityName=".controller.MainActivity" >
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value=".controller.MainActivity" />
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE"/>
<data android:scheme="scheme" android:host="base" android:path="/name" />
</intent-filter>
</activity>