4

この質問が何度も寄せられていることは知っていますが、答えは常に「いいえ、ホームボタンを無効にすることはできません」です。

少し違う質問があります。

アクティビティが onKeyDown() をオーバーライドし、すべてのキー押下に対して true を返す単純なコードを書きました。

理論的には、これは、アプリケーションを開いた人は誰でもそこで立ち往生し、アプリケーションから移動するオプションがないことを意味します.

このアプリケーションをさまざまなデバイスでテストしたところ、次のことがわかりました。

  1. OS が 2.2.2 の motorola デバイスで、ホーム ボタンが無効になりました。
  2. OS が 2.3.5 の HTC デバイスで、ホーム ボタンが無効になりました。
  3. OS が 2.3.7 の Sony では、ホーム ボタンが無効になりました。
  4. OS が 2.2.1 および 2.3.3 の Samsung では、ホーム ボタンが無効になりました。
  5. OS が 2.3.6 および 4.0.4 の Samsung では、ホーム ボタンが有効なままでした。

これらの観察は非常に矛盾しているようです。

異なるデバイスの動作が異なる理由と、そのようなシナリオを処理する最善の方法は何ですか?

これまでの私の理解では、どのベンダーも Android OS をカスタマイズしていません。誰もがその上に UI レイヤーを配置していますが、誰も内部に触れていません。

4

3 に答える 3

7

この質問が何度も寄せられていることは知っていますが、答えは常に「いいえ、ホームボタンを無効にすることはできません」です。

HOME ボタンを処理したい場合は、ホーム画面を実装します。

異なるデバイスが異なる動作をしている理由を知っている人はいますか

それらは異なるデバイスであり、ベンダーが変更を加えたためです。また、4.0.4 の場合、追加の保護が追加されている可能性があります。これは、マルウェアの作成者がホーム画面にならずにホーム ボタンをハイジャックするのを防ぐのに役立ちます。

そのようなシナリオを処理する最良の方法は何ですか

HOME ボタンを処理したい場合は、ホーム画面を実装します。

誰もがその上に UI レイヤーを配置していますが、誰も内部に触れていません。

これは正しくありません。ほぼすべてのデバイス ベンダーが、さまざまな程度で「内部に触れ」ています。Play ストアの互換性要件を満たしている限り、その変更は Google によって受け入れられると見なされます。

于 2012-04-27T11:57:56.117 に答える
6

これを試してみることをお勧めします:

@Override
public void onBackPressed() {

}

@Override
protected void onUserLeaveHint() {
    super.onUserLeaveHint();
    ((ActivityManager) getApplicationContext().getSystemService(Context.ACTIVITY_SERVICE)).moveTaskToFront(getTaskId(), 0);
}

@Override
protected void onPause() {
    super.onPause();
    ((ActivityManager) getApplicationContext().getSystemService(Context.ACTIVITY_SERVICE)).moveTaskToFront(getTaskId(), 0);

}

権限が必要です -- 以下をマニフェストに追加します

<uses-permission android:name="android.permission.REORDER_TASKS" />
于 2015-10-04T22:19:33.173 に答える
0

2.3.6未満のデバイスについての私の質問自体で述べたように、OSオーバーライドkeypress()機能はうまく機能します。

問題は2.3.6以降から始まります。これらのデバイスベンダーが何をしたかはわかりませんが、keypress()機能はすべてのデバイスで同じように機能するわけではありません。

また、ICS以降、グーグルはkeypress()関数の使用を完全に停止しました。

では、どうすればよいのでしょうか。

私の見方では、ホームボタンを上書きしようとすると不可能ですが、間違いなく聞くことができます。

私たちのAndroidマニフェストでは<category android:name="android.intent.category.HOME" />、これよりもフィルターを使用して、ホーム置換画面としてのアクティビティを作成します。これで、ホームボタンを押すと、コンテンツリゾルバーのポップアップが常に表示され、どのアプリケーション、つまりデフォルトのランチャーまたはアプリケーションがホームボタンのクリックに応答するかを尋ねられます。あなたはいつでもそこであなたのアプリケーションを選ぶことができます。

ただし、これはホームボタンを上書きまたは無効にしません。ホームボタンを押すたびに、コンテンツリゾルバーのポップアップで指定された[デフォルトとして使用]チェックボックスをクリックして、アプリケーションをデフォルトにするまで同じことが何度も繰り返されます。

これで、デフォルトのホームプレスとしてアプリケーションを選択すると、常にアプリケーションが起動します。

完了...いいえ。発生する問題は、アプリケーションから移動してもホームボタンがアプリケーションを起動することです。あなたの仕事が終わったらそれを取り除く方法。

アクティビティを閉じたり、finish()を呼び出したりする前に、次のコマンドを使用してパッケージ設定をデフォルトに設定する必要があります。

paramPackageManager1.setComponentEnabledSetting(localComponentName2, PackageManager.COMPONENT_ENABLED_STATE_DEFAULT, 1);

これにより、ホームボタンとアクティビティの関連付けが解除されます。

于 2012-05-10T09:18:54.040 に答える