5

高低を検索しても、私の問題の結果は得られませんでした。したがって、私は最終的にいくつかの支援を懇願するために投稿しています。

私は2つのアプリを持っています。どちらも私が書いたものです。アプリ A がアプリ B を起動し、Intent.putExtra() を介してパラメーターを渡します。これは、アプリ B が起動されたときに完全に正常に機能し、パラメーターが適切に渡されます。

ただし、アプリ A に応答を返す方法が見つかりません。startActivityForResult() を使用すると、常に RESULT_CANCELED ですぐに onActivityResult() が返されました。さらに調べてみると、logcat から「アクティビティが新しいタスクとして起動されているため、アクティビティ結果をキャンセルしています」という警告が表示されました。

起動モード、アクションフィルター(android.intent.action.PICK)を変えてApp BのActivityを作ってみたのですが、何をしても何も変わりませんでした。

私は不可能なことをしようとしていますか?私が理解していることから、私がやろうとしていることは、サードパーティのアクティビティを使用してデバイスのフォト ギャラリーから写真を選ぶことに似ているはずです。

編集:

OK、アクティビティ B から LAUNCHER カテゴリを削除しようとしましたが、まだ機能しません。これが私の活動です:

<activity android:name=".${CLASSNAME}" android:label="@string/app_name" android:configChanges="mcc|mnc|locale|keyboardHidden|orientation" android:launchMode="standard">
    <intent-filter>
        <action android:name="android.intent.action.PICK" />
    </intent-filter>
</activity>

誰かが実際にこれを機能させましたか?「インテントフィルター」に何を入れても常に新しいタスクを開始するように見えるため、別のアプリのアクティビティを開始しても結果が返されないのではないかと疑い始めています。

4

3 に答える 3

11

起動するアクティビティのマニフェストで android:launchMode が設定されていないことを確認し、android:taskAffinity が使用されていないことを確認します。ここを参照してください:

http://developer.android.com/guide/topics/manifest/activity-element.html#aff

アクティビティを起動するために使用しているインテントに FLAG_ACTIVITY_NEW_TASK が設定されていないことを確認してください。ここを参照してください:

http://developer.android.com/reference/android/content/Intent.html#FLAG_ACTIVITY_NEW_TASK

特に注意: 「このフラグは、呼び出し元が起動中のアクティビティの結果を要求している場合は使用できません。」

アクティビティが新しいタスクの一部として起動されている場合、Android はすぐに RESULT_CANCELED を指定して onActivityResult() を呼び出します。これは、あるタスクのアクティビティが別のタスクに結果を返すことができず、同じタスクのアクティビティだけが結果を返すことができるためです。

于 2013-03-27T20:29:00.563 に答える
2

同じ問題が発生したため、ソース コードと、NEW_TASK フラグが追加される理由を調べました。

ソース アクティビティ A またはターゲット アクティビティ B のいずれかが単一インスタンス起動モードを使用している場合、NEW_TASK フラグが自動的に追加されます。

    if (sourceRecord.launchMode == ActivityInfo.LAUNCH_SINGLE_INSTANCE) {
        // The original activity who is starting us is running as a single
        // instance...  this new activity it is starting must go on its
        // own task.
        launchFlags |= Intent.FLAG_ACTIVITY_NEW_TASK;
    } else if (r.launchMode == ActivityInfo.LAUNCH_SINGLE_INSTANCE
            || r.launchMode == ActivityInfo.LAUNCH_SINGLE_TASK) {
        // The activity being started is a single instance...  it always
        // gets launched into its own task.
        launchFlags |= Intent.FLAG_ACTIVITY_NEW_TASK;
    }

両方のアプリを所有しているため、これらの起動モードがマニフェストまたはインテントで定義されていないことを確認できるはずです。

これまでのところ、意図せずに NEW_TASK フラグが設定されている例は他に見つかりませんでした。

于 2014-05-13T08:23:08.893 に答える
0

アクティビティ B には、次のようなものが必要です。

Intent intent = new Intent();
setResult(Activity.RESULT_OK, intent);
finish();

または、

setResult(Activity.RESULT_OK);
finish();

アクティビティ A にデータを渡す必要はありません。

それ以外の場合は、常に結果コードで終了しますActivity.RESULT_CANCELED

何らかの理由 (クラッシュなど) で子アクティビティが失敗した場合、親アクティビティはコード RESULT_CANCELED で結果を受け取ります。

お役に立てれば。

于 2012-08-12T05:13:26.670 に答える