2

ユーザーがアクションを実行したときに、アクティビティを終了してホーム画面を起動する必要があるアプリケーションがあります。

アクションは、複数の入力 (つまり、複数のアクティビティから) およびハードウェア ボタンを介して実行できます。

私たちがしていることは、家を立ち上げる標準的な方法です。

Intent startMain = new Intent(Intent.ACTION_MAIN);
startMain.addCategory(Intent.CATEGORY_HOME);
startMain.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(startMain);

ここで何が起こるかというと、ランチャーに「Complete action using ...」というメッセージが表示されます。

この「...を使用してアクションを完了する」ダイアログは表示されませんが、アプリを起動したランチャーを使用して直接ホームに移動することは、セキュリティ上の理由から非常に重要です。

ノート :

「packageManager.clearPackagePreferredActivities」を使用して、CATEGORY_HOME、ACTION_MAIN インテントをリッスンするアクティビティの 1 つを追加してみました。

しかし、android.permission.SET_PREFERRED_APPLICATIONS パーミッションは、サポートしているバージョン (>= Gingerbread) では利用できないため、うまくいきません。

ありがとう、スリラム

4

2 に答える 2

1

使用するランチャーがわかっている場合は、次を追加するだけです。

startMain.setPackage( "your.package.name" );
于 2013-06-05T05:22:21.853 に答える
1

setPackage の部分については、323go に感謝します。以下のコードは魅力のように機能します!

private void goHome() {
    Intent homeIntent = new Intent(Intent.ACTION_MAIN);
    homeIntent.addCategory(Intent.CATEGORY_HOME);

    PackageManager pm = context.getPackageManager();
    List<android.content.pm.ResolveInfo> activities = pm.queryIntentActivities(homeIntent, 0);
    String className = activities.get(0).activityInfo.taskAffinity;

    Intent startMain = new Intent(Intent.ACTION_MAIN);
    startMain.addCategory(Intent.CATEGORY_HOME);
    startMain.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    startMain.setPackage(className);
    context.startActivity(startMain);
    ((Activity) context).finish();
}
于 2013-06-05T06:01:21.207 に答える