1

他のアプリがインテントを介して起動できるようにしたいAndroidアプリがあります。これにより、他のアプリが私のものと対話し、初期入力などを提供できるようになります。

呼び出し元のアプリ(App-Aと呼びます)は次のことを行います。

Intent intent = new Intent("com.myapp.dosomething");
intent.putExtra("com.myapp.value1", "1.25");
intent.putExtra("com.myapp.value2", "bob");

startActivity(intent);

私のアクティビティは、インテントフィルターから始まります。

<intent-filter>
<action android:name="com.myapp.dosomething" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>

ユーザーが私のアプリの通常のフローを実行すれば、すべてが正常に機能します。ユーザーが作業を行い、ユーザーが完了したことがわかったら、アクティビティでfinish()を呼び出します。すべてがダンディです。

ただし、アプリで何かを行う途中で、ユーザーがタスクを完了する代わりにホームボタンを押すと、大きな問題が発生します。ランチャーからApp-Aを再起動しようとすると、代わりに私のアプリがポップアップします。ユーザーは、私のアプリを強制的に強制終了しない限り、App-Aに戻ることはできません。さらに悪いことに、私のアプリは起動間でデータを保持しないように特別に設計されており、この方法で再起動すると、最初に渡された余分なデータも取得されないため、この他のアプリがまだ私を待っています。

App-Aがアプリを待ってそこに座っていないように設定するにはどうすればよいですか?アプリの動作に関係なく、実行を継続できるはずです。アプリがクラッシュしたり、値が返されない場合は、呼び出し元のアプリを永久にハングさせたくありません。

何か案は?

ありがとう。

4

2 に答える 2

0

これをいじくり回した後、起動フラグなどはこれまで何の役にも立たなかったようです。唯一の実際の解決策は、アプリが外部で起動された時期を追跡し、この場合、アプリが一時停止されたときに常に終了を閉じるようにすることでした。

常にonPauseで終了することで、呼び出し元のアプリが常に何らかの応答を受け取るようにします。中断された操作の場合、私は単に「キャンセルされた」の結果を返します。

于 2012-04-10T16:07:20.897 に答える
0

あなたの側で: アプリが起動し、必要なデータが送信されなかった場合、説明したシナリオが発生した可能性があるため、すぐに終了してエラーを示します (アプリが startActivityForResult で呼び出されたと仮定すると、エラーを示す結果コードを送信できます) )。何を求められたかについてのコンテキストがなくなり、待機しているアプリがデータを取得できず、ユーザーが期待していたアプリに戻される可能性があります。

最後に: 呼び出し元のアプリは次のフラグを追加する必要があります。

    intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET);

このフラグは、呼び出されたアプリをアクティビティ スタックからクリアするため、次に呼び出し元のアプリが再起動されたときに、ユーザーは予期された場所に到着します。

基本的に、この状況を処理するために最善を尽くすことができますが、このフラグを追加してこのシナリオを適切に処理するのは、呼び出し元のアプリの責任です。

于 2012-04-04T00:38:42.710 に答える