Fra*_*lin 13 android android-intent android-notifications
我们的应用有不同的通知,可以打开不同的活动.所以我们创建了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());
Run Code Online (Sandbox Code Playgroud)
问题是在Android 4.1.1中,重新创建堆栈的代码无法正常工作.我使它工作的唯一方法是在创建intent时引用类而不是uri:
intent = new Intent(context, MatchDetail.class);
Run Code Online (Sandbox Code Playgroud)
这个问题是我必须为每个uri做一个Switch-Case才能为每个类创建意图.这首先打败了URI的目的.此外,如果将来我需要添加一个新的推送目标不只是在AndroidManifest.xml中添加URI我必须在推送通知接收器的开关中添加新的情况.
有人知道如何在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>
Run Code Online (Sandbox Code Playgroud)
我还没有尝试过,但这可能会解决你的问题:
TaskStackBuilder stackBuilder = TaskStackBuilder.create(context);
stackBuilder.addParentStack(Class.forName(intent.getComponent().getClassName()));
stackBuilder.addNextIntent(intent);
Run Code Online (Sandbox Code Playgroud)
如果这不起作用,请尝试以下操作:
TaskStackBuilder stackBuilder = TaskStackBuilder.create(context);
stackBuilder.addNextIntent(context, Class.forName(intent.getComponent().getClassName()));
stackBuilder.addNextIntent(intent);
Run Code Online (Sandbox Code Playgroud)
还有一个可以尝试:
TaskStackBuilder stackBuilder = TaskStackBuilder.create(context);
stackBuilder.addNextIntentWithParentStack(new Intent(context, Class.forName(intent.getComponent().getClassName())));
Run Code Online (Sandbox Code Playgroud)
编辑
希望找到一种可能有效的新方法
TaskStackBuilder stackBuilder = TaskStackBuilder.create(context);
stackBuilder.addParentStack(new ComponentName(context, Class.forName(intent.getComponent().getClassName())));
stackBuilder.addNextIntent(intent);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
285 次 |
| 最近记录: |