私のアプリでは、最近使用したサードパーティのアクティビティをプログラムで前面に表示したいと考えています。ここで他の回答を見た後、最近のタスクのリストから返されたbaseIntentを使用してアクティビティを再起動しようとしましたが、他の何が起こっていてもアクティビティが前面に出ないようです。
私の最終的な目標は、着信画面を小さなオーバーレイに置き換えるアプリを作成して、ユーザーが電話を受けたときに使用しているアプリから完全に引き出されないようにすることです。デフォルトの着信画面を置き換えることができないことがわかったので (そうでない場合は、代わりにそうしたいのでお知らせください)、回避策として、最近使用したアプリを呼び出して、画面の前面に (着信画面をオーバーレイするため)、その上に自分のオーバーレイを表示します。
これが私が使用しているコードです(アクティビティはブロードキャストレシーバーから起動されます)
public class BringMRUAppToFront extends Activity
{
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
ActivityManager activityManager = (ActivityManager) getSystemService("activity");
List<RecentTaskInfo> recentTasks = activityManager.getRecentTasks(1, ActivityManager.RECENT_WITH_EXCLUDED);
if(recentTasks.size() > 2) {
RecentTaskInfo recentTask = recentTasks.get(2);
Intent testIntent = recentTask.baseIntent;
Log.i("MyApp", "Recent task - " + recentTask.baseIntent.getComponent().getPackageName());
testIntent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
startActivity(testIntent);
}
finish();
}
}
第三者の活動を前面に出す確実な方法はありますか? アクティビティはメモリ内にあることが保証されているため (メモリ内にない場合は、ホーム画面を表示するだけです)、そこに問題はないはずです。また、この場合、電話が鳴る直前に表示されていたアプリが表示されるだけなので、セキュリティ上の問題になるとは思いませんが、SDKで一般的にこれを開くとリスクが生じる可能性があることは理解しています. ..それが可能であることを願っています。
編集:私がやっていることを反映するためにコードを少し修正しました。目的のタスクは、ほとんどの場合、リストの 3 番目のタスクです。1 番目は現在のタスクで、2 番目は呼び出し中の電話のタスクです。タスクを前面に呼び出すことはできますが、常に同じ状態になるとは限りません (たとえば、ブラウザーの設定画面ではなく、ブラウザーのページに移動するなど)。最近のタスクリストはどのようにこれを行いますか?