2017-02-08 12 views
0

Мне нужно создать уведомление, и он отлично работает с кодом, приведенным ниже. И когда я нажимаю уведомление, он перенаправляет на активность, скажем, activity2. Я могу ввести эту активность2 из других действий или фрагментов, например activity1, фрагмент1 и т. Д. Пока я остаюсь в приложении и нажимаю уведомление, он перенаправляется на activity2, и пока я нажимаю кнопку, он переходит к предыдущему действию или фрагменту. Но если я убью приложение и щелкнув уведомление, он откроет активность2, но при нажатии кнопки «Назад» приложение выйдет. Мне нужно, чтобы он был перенаправлен на активность1. Как мне это сделать. Спасибо заранее.Приложение выходит во время запуска активности из уведомления, когда приложение убито

void createDownloadNotification(String title) { 
    if (title != null) { 
     Intent intent = new Intent(context, SecondActivity.class); 
     intent.putExtra(EXTRA_STRING, title); 
     intent.putExtra("id", i); 
     intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP); 
     PendingIntent pIntent = PendingIntent.getActivity(context, (int) System.currentTimeMillis(), intent, 0); 




     Notification myNotification = new Notification.Builder(context) 
       .setContentTitle(title) 
       .setContentText("Some text....") 
       .setSmallIcon(R.mipmap.ic_launcher) 
       .setContentIntent(pIntent) 
       .setAutoCancel(false).build(); 


     NotificationManager notificationManager = 
       (NotificationManager) context.getSystemService(NOTIFICATION_SERVICE); 

     notificationManager.notify(i + 1, myNotification); 
     i = i + 1; 

    } 
} 

ответ

0

Попробуйте этот код в ваш манифест

<activity 
    android:name="com.example.myfirstapp.DisplayMessageActivity" 
    android:label="@string/title_activity_display_message" 
    android:parentActivityName="com.example.myfirstapp.MainActivity" > 
    <!-- Parent activity meta-data to support 4.0 and lower --> 
    <meta-data 
     android:name="android.support.PARENT_ACTIVITY" 
     android:value="com.example.myfirstapp.MainActivity" /> 
</activity> 
0

В основном вам нужно настроить родительский активности в файле манифеста и создавать стеки для результирующей деятельности.

Вот очень хороший tutorial, чтобы начать.

0

Он работает в соответствии с определением здесь: FLAG_ACTIVITY_CLEAR_TOP

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

Намерение вы положили в вашем PendingIntent для уведомления, закрывает все открытые Activities и открывает SecondActivity. Если вы удалите этот флаг из своего Intent, он не будет закрывать остальные.

В дополнение к этому вы можете добавить родителя Activity к своему SecondActivity, чтобы он знал, куда идти, когда пользователь нажимает назад, и перед тем, как было нажато уведомление, ничего не было открыто.

0

С вашей текущей реализацией и частью intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP); поведение, о котором идет речь, происходит по дизайну. Понимание tasks and backstacks объяснило бы это.

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

Пройти через activity launch modes поможет. Вы можете использовать это с activity1 для вашей реализации.

Understand android activity launchmode - хорошая статья в блоге, единственная ссылка разработчиков, не относящаяся к разработчикам и разработчикам в этом ответе.

0

Простой метод

передать логическое значение с помощью намерения использовать, чтобы добраться до деятельности2

из уведомления затем передать булев истинную

от открытой деятельности затем передать булев ложные

и получить значение bool в действии 2 и соответственно установить

после которые установлены onBackPressed в действии 2 как это

@Override 
    public void onBackPressed() { 
     if (fromNotification) { 
      Intent i = new Intent(Activity2.this, 
        Activity1.class); 
      startActivity(i); 
      finish(); 
     } else 
      super.onBackPressed(); 
    }