62

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);
4

11 に答える 11

99

起動するアクティビティの親ではなく、親スタックを追加する必要があります。

交換:

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>
于 2012-11-29T18:45:04.420 に答える
83

どのソリューションも機能しておらず、すべてを注意深く実行したことが確実な場合は、アプリをアンインストールしてインストールする必要があります。私のために働いた!

于 2016-03-20T05:59:09.953 に答える
15
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);

これにより、通知クリックでの親スタックに関する問題が解決しました

于 2015-10-19T09:25:46.313 に答える
8

TaskStackBuilderを使用しても問題は解決せず、Honeycomb以降でのみ機能します。だから私は次の解決策を取ります(私を十字架につけないでください):

  1. MainActivityの代わりに呼び出し、引数として(Intentによって)MatchActivity渡します。MatchActivity
  2. で、パラメータが使用可能な場合はを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)));
    }
    ...
}
于 2013-11-28T19:14:48.817 に答える
3

私にとって、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);
于 2016-07-17T16:59:20.540 に答える
2

Androidのドキュメント、特に 通知APIガイドをご覧になりましたか。これを行う方法について詳しく説明します。

通知から開始するアクティビティが通常のアクティビティフローの一部でない場合は、アプリのスタートページに移動しないようにする必要があることに注意してください。代わりに、ホーム画面に移動する必要があります。

于 2012-11-29T21:05:34.203 に答える
2

これをAndroidManifestのMainActivityに追加する必要があります。

<activity
   android:name=".MainActivity"
   android:allowTaskReparenting="true" />
于 2015-11-09T01:26:19.527 に答える
1

他の回答で述べられているように、TaskStackBuilderはHoneycombより前のバージョンでは機能しません。

私の解決策は、アクティビティのonBackPressed()メソッドをオーバーライドすることでした。

@Override
public void onBackPressed() {
    NavUtils.navigateUpFromSameTask(this);
}

明らかに、他の方法でアクティビティを終了することを計画している場合は、それも処理する必要があります。(オーバーライドfinish()すると予期しない動作が発生すると思いますが)。

于 2014-05-15T09:55:16.983 に答える
0

私も同じ問題を抱えていました!解決する:

切り替える

PendingIntent resultPendingIntent = 

PendingIntent.getActivity( this, 0, resultIntent, PendingIntent.FLAG_UPDATE_CURRENT);

PendingIntent resultPendingIntent = 

stackBuilder.getPendingIntent(0, PendingIntent.FLAG_UPDATE_CURRENT);
于 2014-09-05T13:49:30.840 に答える
0

プロジェクトでコード生成を使用する場合(Daggerなど)、MainActivity.classをMainActivity_.class(または親アクティビティ名)に置き換える必要があります。これを理解するために一日かかりました。これが誰かの日を救うことができることを願っています。

于 2017-02-20T12:20:59.217 に答える
0

また、これは、マニフェストでのアクティビティに次のlaunchModeがある場合に発生する可能性があります。

<activity android:name=".SecondActivity"
     ...
         android:launchMode="singleInstance"
         android:parentActivityName=".MainActiviy"
    ...
/>
于 2017-12-20T17:30:04.770 に答える