Mar*_*tin 2 android android-intent android-notifications android-activity android-pendingintent
我有以下问题:我编写了一个 android 服务 - 一个音乐播放器 - 在后台运行并在启动时启动通知。单击此通知会打开允许与该玩家互动的活动 A。这工作正常。
问题是当我有第三方活动(例如 Web 浏览器)运行时,我单击了通知。此单击将我带到活动 A,但单击“后退”按钮 - 这就是问题 - 将我带到主屏幕。相反,我想恢复以前运行的活动,即 Web 浏览器。
有人知道怎么做吗?
private void initNotification(){
Intent resultIntent = new Intent(this, AudioPlayerActivity.class);
//resultIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
TaskStackBuilder stackBuilder = TaskStackBuilder.create(this);
stackBuilder.addParentStack(AudioPlayerActivity.class);
stackBuilder.addNextIntent(resultIntent);
PendingIntent resultPendingIntent = stackBuilder.getPendingIntent(0, PendingIntent.FLAG_UPDATE_CURRENT);
stackBuilder.getIntents();
NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(this);
mBuilder.setSmallIcon(...);
mBuilder.setContentTitle("...");
mBuilder.setContentText("...");
mBuilder.setContentIntent(resultPendingIntent);
// create a notification manager that then displays the notification
NotificationManager mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
mNotificationManager.notify(NOTIFICATION_ID, mBuilder.build());
}
Run Code Online (Sandbox Code Playgroud)
你的问题是使用TaskStackBuilder. 不幸的是,这个类对您希望如何管理应用程序做了很多假设。当您使用TaskStackBuilder构造PendingIntent堆栈时,它会将以下标志添加到 "root" Intent:
intents[0].addFlags(Intent.FLAG_ACTIVITY_NEW_TASK |
Intent.FLAG_ACTIVITY_CLEAR_TASK |
Intent.FLAG_ACTIVITY_TASK_ON_HOME);
Run Code Online (Sandbox Code Playgroud)
(注意:此代码片段来自TaskStackBuilderAndroid 4.1.1 中的for 源)
由于Intent.FLAG_ACTIVITY_TASK_ON_HOME已设置,它会在主屏幕顶部启动您的任务,而不是在用户当前任务的顶部启动它。
如果您可以避免使用TaskStackBuilder,则可以解决此问题。如果您确实需要构建活动堆栈,则可以使用PendingIntent.getActivities(),您可以在其中控制在每个Intent. 否则,只需使用PendingIntent.getActivity()来创建PendingIntent您放入Notification.
注意:编辑以添加示例代码
尝试这个:
private void initNotification(){
Intent resultIntent = new Intent(this, AudioPlayerActivity.class);
resultIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
PendingIntent resultPendingIntent = PendingIntent.getActivity(this, 0, resultIntent, PendingIntent.FLAG_UPDATE_CURRENT);
NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(this);
mBuilder.setSmallIcon(...);
mBuilder.setContentTitle("...");
mBuilder.setContentText("...");
mBuilder.setContentIntent(resultPendingIntent);
// create a notification manager that then displays the notification
NotificationManager mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
mNotificationManager.notify(NOTIFICATION_ID, mBuilder.build());
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1018 次 |
| 最近记录: |