2016-11-10 3 views
1

У меня есть активность веб-просмотра, в которой ее URL-адрес обновляется службой уведомлений. Когда кликнуто уведомление, каждый раз создается новая активность для загрузки измененного URL-адреса. Этого можно предотвратить, добавив android:launchMode="singleTask" в наиболее явном виде.Предотвращение нескольких экземпляров в активности веб-просмотра

Если при каждом нажатии на уведомление создается новое действие, это приводит меня к тому, что я могу изменить контент. Но я хочу избежать создания нового действия (или, может быть, создается представление idk?) Для каждого щелчка по времени. Если я добавлю android:launchMode="singleTask" в манифест, это даст мне побочный эффект, т. Е. Если уведомление о существующей открытой активности веб-просмотра будет получено, оно не будет перенаправлено на измененный 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

вставьте код ожидающего намерения. которые вы используете для создания уведомлений. –

+0

Что происходит с изменением ссылки на 'webview.loadUrl' каждый раз, когда кликнуто нота? Не загружает ли вас нужную страницу? –

+0

@Akeshwar нет, это не так. –

ответ

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)); 
+0

Я добавил ваш код, это также приводит к запуску нескольких экземпляров активности при поступлении нового уведомления. –

+0

вы можете определить переменную Static Boolean, чтобы узнать о состоянии активности и установить значение true в onresume() и установить false в onPause() методе вашей активности. И перед тем, как начать новую активность, проверьте эту переменную. Вы должны определить один класс тона и расширить его из класса Application. –

0
Intent intent = new Intent(....this, ....class); 
intent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT); 
intent.putExtra("...", ...); 
startActivity(intent); 

Если вы хотите, чтобы перезагрузить новый URL, метод переопределения onNewIntent() в WebView деятельности и сделать что-то с новым Params.

Смежные вопросы