La nostra app ha notifiche diverse che possono aprire diverse attività. Quindi abbiamo creato lo schema URI per farlo. Le notifiche vengono ricevute e aprono le attività corrette. Creo lo stack per la navigazione corretta con il seguente codice:Android 4.1.1 Crea stack per attività quando si riceve una notifica con 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());
Il problema è che in Android 4.1.1 che il codice per ricreare la pila non funziona correttamente. L'unico modo che ha reso il lavoro è referecing della classe invece del uri quando si crea l'intento:
intent = new Intent(context, MatchDetail.class);
Il problema di questo è che dovrò fare uno switch-case per ogni uri per essere in grado di creare l'intento con ogni classe. In primo luogo, ciò sconfigge lo scopo dell'URI. Anche se in futuro ho bisogno di aggiungere un nuovo Push Target non è solo aggiungendo l'URI in AndroidManifest.xml Devo aggiungere un nuovo caso nello switch del Push Notifier Receiver.
Qualcuno sa come farlo funzionare su Android 4.1.1 con URI?
Estratto di manifesto:
<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>
Cosa vi impedisce di utilizzare il codice a API precedenti? Stai dicendo il 'nuovo Intento (Intent.ACTION_DEFAULT, Uri.parse (uri));' non funziona o hai un problema con il resto del codice? – ianhanniballake
L'uri ha funzionato ma quando torno indietro l'app si chiude con 4.1.1 e funziona con android> 4.2.2. Stesso codice – Franklin
Supponendo che si stia utilizzando la versione della libreria di supporto di [TaskStackBuilder] (http://developer.android.com/reference/android/support/v4/app/TaskStackBuilder.html), non c'è nulla di diverso da Android 3.0+ su come lo stack genitore è in fase di costruzione che farebbe sì che 4.1.1 funzioni diversamente dalla 4.2.2. Puoi includere la voce manifest dell'attività per una delle attività che non funziona? – ianhanniballake