我有一个webview活动,其中url由通知服务更新。单击通知时,每次都会创建新活动以加载更改的URL。这可以通过在最明确的地方添加android:launchMode="singleTask"
来防止。
如果每次点击通知时都会创建新活动,则会导致我完全更改内容。但是我想避免在每次点击通知时创建一个新活动(或者可能是一个视图被创建了idk?)。如果我在清单中添加android:launchMode="singleTask"
,它会给我带来副作用,即如果现有打开的webview活动收到通知,则不会重定向到更改的URL。
待处理通知意图:
NotificationManager mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
if (isMessage) {
Intent intent = new Intent(this, MiscDisplay.class);
intent.putExtra("start_url", url);
intent.setAction("NOTIFICATION_URL_ACTION");
PendingIntent resultPendingIntent = PendingIntent.getActivity(getApplicationContext(), 1, intent, PendingIntent.FLAG_UPDATE_CURRENT);
mBuilder.setContentIntent(resultPendingIntent);
mBuilder.extend(new WearableExtender().addAction(message));
mBuilder.setOngoing(false);
mBuilder.setSmallIcon(R.mipmap.ic_launcher);
mBuilder.setOnlyAlertOnce(true);
Notification note = mBuilder.build();
mNotificationManager.notify(1, note);
} else {
mBuilder.setSmallIcon(R.mipmap.ic_launcher);
Intent intent = new Intent(this, MiscDisplay.class);
intent.putExtra("start_url", url);
intent.setAction("NOTIFICATION_URL_ACTION");
TaskStackBuilder stackBuilder = TaskStackBuilder.create(this);
stackBuilder.addParentStack(MiscDisplay.class);
stackBuilder.addNextIntent(intent);
PendingIntent resultPendingIntent = PendingIntent.getActivity(getApplicationContext(), 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
mBuilder.setContentIntent(resultPendingIntent);
mBuilder.extend(new NotificationCompat.WearableExtender().addAction(action));
mBuilder.setOngoing(false);
Notification note = mBuilder.build();
mNotificationManager.notify(0, note);
我想要什么?
我希望每次点击新通知时都避免创建新活动。
请帮忙! 谢谢。
答案 0 :(得分:1)
Intent activityIntent = new Intent(context, MainActivity.class);activityIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK
| Intent.FLAG_ACTIVITY_CLEAR_TOP
| Intent.FLAG_ACTIVITY_SINGLE_TOP);
context.startActivity(activityIntent);
在调用您的活动之前使用此标志 解决方案二: 在清单中:
<application
android:allowBackup="true"
android:label="@string/app_name"
android:name=".AL"
public class AL extends Application {
public static Boolean isActivityRunnig=false;
@Override
public void onCreate()
{
super.onCreate();
}
在您的活动中:
@Override
protected void onResume() {
super.onResume();
AL.isActivityRunnig= true;
}
@Override
protected void onPause() {
super.onPause();
AL.isActivityRunnig= false;
}
点击通知后,您可以查看falg:
if(!AL.isActivityRunnig)
startactivity(new Intent(context,YourActivity.class));
答案 1 :(得分:0)
Intent intent = new Intent(....this, ....class);
intent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
intent.putExtra("...", ...);
startActivity(intent);
如果您想重新加载新网址,请在您的网页浏览活动中覆盖onNewIntent()方法,并使用新参数执行某些操作。