1

Я борюсь с этой проблемой: у меня есть некоторые уведомления, и я хочу передать намерения в действие, даже если приложение уже запущено.Направляйте намерения, если активность запущена

Некоторые решения, которые я нашел здесь на S.O. не работает для меня, как добавление:

android:launchMode="singleTop" 

к манифесту, я также использую это:

notificationIntent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP); 

, как кто-то предложил.

Мой код заключается в следующем:

NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(NotificationService.this); 
mBuilder.setSmallIcon(R.mipmap.ic_launcher); 
mBuilder.setContentTitle("New website change."); 
mBuilder.setContentText("Changed: " + url); 

Intent notificationIntent = new Intent(getContext(), MainActivity.class); 
Bundle b = new Bundle(); 
b.putString("key", url); 
notificationIntent.putExtras(b); 

notificationIntent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP); 

PendingIntent intent = PendingIntent.getActivity(getContext(), id, notificationIntent, 0); 

mBuilder.setContentIntent(intent); 

NotificationManager mNotificationManager = (NotificationManager) getSystemService(NotificationService.this.NOTIFICATION_SERVICE); 
mNotificationManager.notify(id, mBuilder.build()); 

А потом внутри деятельности:

Bundle b = getIntent().getExtras(); 
if(b != null) { 
    url = b.getString("key"); 
    editText.setText(url); 
    webView.loadUrl(url); 
    webView.requestFocus(); 
} 

Любая помощь будет приветствоваться, я выпущу код этого приложения с открытым исходным кодом, спасибо.

+0

это не ясно, что делать вам ж чтобы достичь. –

+0

У меня есть URL-адреса в уведомлениях, и я хочу открыть его для активности, которая имеет веб-представление. Если действие не запущено (например, выполняется другое действие), уведомление может отправлять свои дополнительные функции, а если действие находится на переднем плане, оно не может получить дополнительные функции (в этом случае URL-адрес). –

+0

http://stackoverflow.com/questions/40021484/fcm-notification-using-android-studio/40021597#comment67322451_40021597 –

ответ

0
Bundle b = getIntent().getExtras(); 

Это всегда будет возвращать Intent, который был использован для создания экземпляра деятельности.

В тех случаях, когда деятельность уже существует, и вы используете Intent флаги (например, FLAG_ACTIVITY_REORDER_TO_FRONT или проявляющих настройки (например, singleTop) направлять управление обратно к этой деятельности, необходимо переопределить onNewIntent(). Intent доставлен к этому методу является Intent, который был использован для приведения деятельности обратно на передний план.

-1

переопределение onNewIntent метод в деятельности и получение значения из пучка в этом методе.

@Override 
    protected void onNewIntent(Intent intent) { 
     super.onNewIntent(intent); 

String yourvalue = getIntent.getExtras.getString("key"); 

    } 
+1

, вы должны искать дополнительные поля в поле цели, а не getIntent() –

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