Подтвердить что ты не робот

Android 4.1.1 Build Stack for Activity при получении уведомления с URI

В нашем приложении есть разные уведомления, которые могут открывать разные действия. Поэтому мы создали схему 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>
4b9b3361

Ответ 1

Я еще не пробовал, но это может решить вашу проблему:

TaskStackBuilder stackBuilder = TaskStackBuilder.create(context);
stackBuilder.addParentStack(Class.forName(intent.getComponent().getClassName()));
stackBuilder.addNextIntent(intent);

Если это не сработает, попробуйте следующее:

TaskStackBuilder stackBuilder = TaskStackBuilder.create(context);
stackBuilder.addNextIntent(context, Class.forName(intent.getComponent().getClassName()));
stackBuilder.addNextIntent(intent);

Также еще один пример:

TaskStackBuilder stackBuilder = TaskStackBuilder.create(context);
stackBuilder.addNextIntentWithParentStack(new Intent(context, Class.forName(intent.getComponent().getClassName())));

Edit

Найден новый способ, который может работать, надеюсь,

TaskStackBuilder stackBuilder = TaskStackBuilder.create(context);
stackBuilder.addParentStack(new ComponentName(context, Class.forName(intent.getComponent().getClassName())));
stackBuilder.addNextIntent(intent);