2017-02-09 10 views
4

내 신청서에 시작하는 알림을 작성합니다 세부 사항 활동. 이 활동을 현재 작업 (또는 백 스택) 맨 위에 추가하고 싶습니다. 예를 들어 나는 응용 프로그램 작업 (다시 스택)이이처럼 행동 할 것으로 예상 :알림을 클릭 할 때 현재 백 스택 (또는 작업)을 보존하는 방법은 무엇입니까?

enter image description here

하지만 난이 얻을 : 나는 FLAG_ACTIVITY_CLEAR_TASKFLAG_ACTIVITY_NEW_TASK 플래그를 사용하지 않은

enter image description here

. 어떻게해야합니까?

편집 : 첫 번째 그림은 그 예입니다. 나는이 질문의 제목이 완전히 명백하다고 생각한다. Details Activity을 현재 스택 맨 위에 추가하고 새 태스크로 시작하지 않으려합니다.

이 내가 PendingIntent를 만드는 방법은 다음과 같습니다

// Details activity intent 
    Intent intent = new Intent(context, DetailsActivity.class); 
    intent.putExtra(Com.KEY_ID, event.getId()); 
    PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, 
      intent, PendingIntent.FLAG_UPDATE_CURRENT); 

을 그리고 이것은 매니페스트입니다 :

<activity 
     android:name=".MainActivity" 
     android:label="@string/app_name_system" 
     android:launchMode="singleTop" 
     android:theme="@style/AppTheme.NoActionBar"> 

     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 
      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 

    <activity 
     android:name=".NoteActivity" 
     android:label="@string/app_name_system" 
     android:theme="@style/AppTheme.NoActionBar" 
     android:windowSoftInputMode="stateHidden" /> 

    <activity 
     android:name=".DetailsActivity" 
     android:launchMode="singleTop" 
     android:label="@string/app_name_system" 
     android:theme="@style/AppTheme.NoActionBar" /> 
+0

당신이 플래그'Intent.FLAG_ACTIVITY_CLEAR_TOP 설정을 시도해 봤어 | Intent.FLAG_ACTIVITY_SINGLE_TOP' (의도)? – sup4eli

+0

@ sup4eli 지금 해봤지만 결과가 없습니다. –

답변

2

당신은 스택을 구축하는 대신 PendingIntent.getActivityPendingIntent.getActivities를 사용할 수 있습니다.

Intent mainActivityIntent = new Intent(context,MainActivity.class); 
mainActivityIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 

Intent noteActivityIntent= new Intent(context,NoteActivity.class); 
noteActivityIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 

Intent detailActivityIntent= new Intent(context,DetailActivity.class); 

final PendingIntent pendingIntent = PendingIntent.getActivities(ctx, UNIQUE_REQUEST_CODE++, 
      new Intent[] {mainActivityIntent,noteActivityIntent,detailActivityIntent},PendingIntent.FLAG_UPDATE_CURRENT); 

이렇게하면 사용자의 목적을 해결할 수 있습니다.

은 자세한 내용 당신은 getActivities()을 사용 의도의 배열을 받아 세 번째 인수에서 전체 탐색 경로를 지정해야

+0

이 방법을 사용하는 것이 좋겠지 만 질문에 대한 설명을 추가했습니다. 내가 현재 Details ** Stack에 DetailsActivity를 추가하고 싶습니다. 솔루션은 항상 메인> 참고> 세부 사항을 제공합니다. 그래? –

+0

예, 내 솔루션은 항상이 스택을 제공 할 것입니다. Main> Note> Details.It은 실제로 두 개의 인 텐트가 실행되고 뒤로 버튼 누름에서 두 개의 새로운 활동 인스턴스를 생성하는 두 개의 활동 의도로 새로운 DetailActivity를 시작합니다. 그러나 현재 스택에 활동을 추가하지는 않습니다. –

1

Back to main activity from notification-created activity이 링크를 참조하십시오. 앱 탐색이 작동해야하는 순서로 배열을 구성해야합니다. 즉, 맨 왼쪽은 루트/주 활동이고 그 아래에서 수준을 낮 춥니 다. 이

Intent mainActivityIntent = new Intent(context, MainActivity.class); 
mainActivityIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); // only specify new task flag for MainActivity 

Intent noteActivityIntent= new Intent(context,NoteActivity.class); 

Intent detailsActivityIntent = new Intent(context, DetailsActivity.class); 

PendingIntent pendingIntent = PendingIntent.getActivities(context, 0, 
      new Intent[] {mainActivityIntent,noteActivityIntent,detailsActivityIntent},PendingIntent.FLAG_UPDATE_CURRENT); 

주 같은

뭔가 : 다시 한 번 눌러 응용 프로그램이 이미 활성화되어있는 경우 안드로이드가 NoteActivity 다음 MainActivity로 다시 이동합니다. 활동이 이미있는 경우 활동을 다시 시작하거나 그렇지 않으면 활동을 다시 시작합니다.

+0

그림은 단지 예일뿐입니다. 현재 스택 맨 위에 DetailsActivity를 추가하고 싶습니다. Main> Note> Details에서 항상 시작되지는 않습니다. –

1

이 링크를 발견 : Preserving Navigation when Starting an Activity. 그것은 내 질문에 대한 정확한 해결책을 제공하지 않지만 원하는 결과를 생성합니다.

링크는 다른 친화도으로 새 작업에서 DetailsActivity을 시작해야한다고 설명합니다.

매니페스트 :

<activity 
     android:name=".DetailsActivity" 
     android:excludeFromRecents="true" 
     android:label="@string/app_name_system" 
     android:launchMode="singleTop" 
     android:taskAffinity="" 
     android:theme="@style/AppTheme.NoActionBar" /> 

PendingIntent 제작 :

Intent intent = new Intent(context, DetailsActivity.class); 
    intent.putExtra(Com.KEY_ID, event.getId()); 
    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK); 
    PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, 
      intent, PendingIntent.FLAG_UPDATE_CURRENT);