Android-알림 빌드, TaskStackBuilder.addParentStack이 작동하지 않음
Android 문서 설명과 같은 알림에서 활동을 시작하려고하지만 알림을 연 다음 뒤로 버튼을 누르면 HomeActivity (부모)가 열리지 않고 대신 애플리케이션이 닫힙니다. 내가 도대체 뭘 잘못하고있는 겁니까?
Intent resultIntent = new Intent(context, MatchActivity.class);;
resultIntent.setFlags(Intent.FLAG_ACTIVITY_MULTIPLE_TASK);
TaskStackBuilder stackBuilder = TaskStackBuilder.create(context);
// Adds the back stack for the Intent (but not the Intent itself)
stackBuilder.addParentStack(MainActivity.class);
stackBuilder.addNextIntent(resultIntent);
시작하는 활동의 상위 스택이 아닌 상위 스택을 추가해야합니다.
바꾸다:
stackBuilder.addParentStack(MainActivity.class);
와:
stackBuilder.addParentStack( MatchActivity.class );
이는 매니페스트 (API 16+)에서 부모를 정의했다고 가정합니다.
<activity android:name=".MatchActivity"
android:parentActivityName=".MainActivity"
... />
API 16 미만을 위해 개발하는 경우 부모를 다음과 같이 정의해야합니다.
<activity android:name=".MatchActivity">
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value=".MainActivity" />
</activity>
솔루션이 작동하지 않고 모든 것을주의 깊게 따랐다 고 확신하는 경우 앱 을 제거 하고 다시 설치 해야합니다. 나를 위해 일했습니다!
Intent resultIntent = new Intent(App.getContext(), TargetActivity.class);
Intent backIntent = new Intent(App.getContext(), ParentActivity.class);
backIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
final PendingIntent resultPendingIntent = PendingIntent.getActivities(
App.getContext(), 0,
new Intent[]{backIntent, resultIntent}, PendingIntent.FLAG_ONE_SHOT);
mNotifyBuilder.setContentIntent(resultPendingIntent);
이것은 알림 클릭시 부모 스택에 대한 내 문제를 해결했습니다.
사용 TaskStackBuilder이 내 문제를 해결하고 벌집 더 큰 경우에만 작동하지 않았다. 그래서 나는 다음 해결책을 취합니다 (제발 나를 십자가에 못 박지 마십시오).
- 전화
MainActivity
대신MatchActivity
전달MatchActivity
(의도에 의해) 인수로. - 에서
MainActivity.onCreate
의 시작MatchActivity
매개 변수를 사용할 수있는 경우.
새 코드 :
Intent resultIntent = new Intent(context, MainActivity.class) //
.putExtra(MainActivity.ACTIVITY_EXTRA, MatchActivity.class.getName()) //
.putExtra("Pass extras to MatchActivity", "if you want! :)");
PendingIntent pendingIntent = PendingIntent.getActivity(context, visitId, resultIntent, PendingIntent.FLAG_UPDATE_CURRENT);
Notification notification = new NotificationCompat.Builder(context) //
.setContentIntent(pendingIntent) //
.build();
켜짐 MainActivity
:
public static final String ACTIVITY_EXTRA = "activity";
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (getIntent().getStringExtra(ACTIVITY_EXTRA) != null) {
startActivity(new Intent(getIntent()).setClassName(this, getIntent().getStringExtra(ACTIVITY_EXTRA)));
}
...
}
나를 위해 stackBuilder.addParentStack이 작동하지 않았습니다.
나는 이것을 끝내고 이것이 당신을 도울 수 있기를 바랍니다.
Intent intent = new Intent(context, MatchActivity.class);
TaskStackBuilder stackBuilder = TaskStackBuilder.create(context);
// Adds the back stack for the Intent
stackBuilder.addNextIntentWithParentStack(new Intent(context, MainActivity.class));
stackBuilder.addNextIntent(intent);
PendingIntent pendingIntent = stackBuilder.getPendingIntent(0, PendingIntent.FLAG_UPDATE_CURRENT);
Android 문서, 특히 Notifications API 가이드 를 살펴 보셨습니까? 이를 수행하는 방법에 대해 자세히 설명합니다.
Notice that if the Activity you start from the notification is not part of the normal Activity flow, then it should not go to the start page of the app; instead, it should go to the Home screen.
As stated in other answers, TaskStackBuilder doesn't work for versions below Honeycomb.
My solution was to override the activity's onBackPressed()
method.
@Override
public void onBackPressed() {
NavUtils.navigateUpFromSameTask(this);
}
Obviously if you're planning on finishing the activity in some other manner you will have to handle that as well. (Though I imagine overriding finish()
will have some unexpected behaviour).
You should add this to the MainActivity on the AndroidManifest:
<activity
android:name=".MainActivity"
android:allowTaskReparenting="true" />
I had the same problem! Solve:
switch to
PendingIntent resultPendingIntent =
PendingIntent.getActivity( this, 0, resultIntent, PendingIntent.FLAG_UPDATE_CURRENT);
PendingIntent resultPendingIntent =
stackBuilder.getPendingIntent(0, PendingIntent.FLAG_UPDATE_CURRENT);
If you use code generation in your project (like Dagger) the MainActivity.class should be replaced with the MainActivity_.class (or whatever your parent activity name is). Took me a whole day to figure this out. Hope this can save someone's day.
also this can happen if your activiti in mannifest has next launchMode:
<activity android:name=".SecondActivity"
...
android:launchMode="singleInstance"
android:parentActivityName=".MainActiviy"
...
/>
ReferenceURL : https://stackoverflow.com/questions/13632480/android-build-a-notification-taskstackbuilder-addparentstack-not-working
'code' 카테고리의 다른 글
대량 API를 사용하여 Python을 사용하여 ES에 키워드를 저장하는 방법 (0) | 2021.01.09 |
---|---|
self.tableView.reloadData ()가 Swift에서 작동하지 않습니다. (0) | 2021.01.09 |
대용량 (14GB) MySQL 덤프 파일을 새 MySQL 데이터베이스로 가져 오려면 어떻게해야합니까? (0) | 2021.01.09 |
GDB를 프로세스에 연결하려고 할 때 "ptrace 작업이 허용되지 않음"을 해결하는 방법은 무엇입니까? (0) | 2021.01.09 |
ObserveOn 및 SubscribeOn-작업이 수행되는 위치 (0) | 2021.01.09 |