10

2 つのアクティビティがあるとします。

A - 「ホーム ランチャーが有効」なメイン アクティビティ (適切なインテント フィルターなど)

B - singleTask 仕様 (このアクティビティのインスタンスは 1 つしか存在できません) およびカスタム taskAffinity (メイン タスクと区別するため) を使用するタスク ルート アクティビティ根)。

B がタスクを表すと仮定します。これは、完了していない場合にのみ有効です。完了後に戻ったり、最近のタスクから再開したりすることはできません。

ある時点で、A が B を起動して新しいタスクを開始します。目標は、ユーザーが B を完了したときに B を最近のタスク リストから削除することです。ユーザーは B から他のタスクに移動し (ホームの長押しを使用)、完了していない限り B に戻ることができます。ランチャーから A を起動しても、B は異なるタスク アフィニティを持っているため、フォアグラウンドに移動しません。

Android は B をタスクのルートとして認識するため、B は完了しても最近のタスク リストに表示され、ユーザーはいつでもそれに戻ることができます。B を A のある 1 つのタスクに移動することは解決策ではありません。なぜなら、B が実行されている間、ユーザーは A と B のタスクを切り替えることができるはずだからです。B のマニフェストに excludeFromRecents を追加すると、最近のタスク リストから完全に削除されます。これも悪い解決策です。

それを達成する方法は?(私の悪い英語でごめんなさい)

4

2 に答える 2

3

標準回答

悪い知らせを伝えて申し訳ありませんが、この機能は、アプリの動作方法をオーバーライドせずに標準的な方法を使用して実現することはできません。それでも、アプリが実行されている間だけ機能します。さらに、これを行うには、ホームボタンの機能を上書きできないため、特殊な ROM を備えたルート化されたデバイスが必要になります。onNewIntent()ホームボタンを長押ししても発火しないものに反応するしかありません。

最近のタスクは、アプリが実行されているかどうかに関係なく、ユーザーが使用していたアプリに戻ることができるように、特に使いやすくするためのものです。ただし、良いニュースがあります。このプロセスでは、アプリを維持できません。これは単にパッケージを指すアイコンです。

残念ながら、これは、アプリがまだ実行されている場合、実行を維持している何か他のことが起こっていることを意味します。

非標準的な回答

実行時にパッケージのプロパティを編集することで可能になる場合があります (Java コードからコンポーネントを有効/無効にするのとほぼ同じ方法で)。最近のタスクは Android コア プラットフォームのユーザビリティ機能であるため、これはお勧めできません。これにはいくつかの調査が必要です。

于 2012-06-11T08:11:03.843 に答える