6

幼児向けのアプリがあります。つまり、単一のキータッチをブロックしますが、アプリを終了するための長押しを処理します。これは、幼児が遊んでいる間に(あまりにも)厄介なことをしないようにするためです。バージョン 2.3.4 までは、これを達成することに成功しました。ただし、現在2つの問題があります。

  1. ハニカムでは、押すことができるステータスバー通知があります。また、押すことができるスイッチウィンドウキーがあります。私が成功した唯一のことは、ステータスバーを暗くすることです.
  2. アイス クリーム サンドイッチ (エミュレーターを使用していますが、このバージョンの実際のデバイスはまだありません) で、次のコードを呼び出すと、キャッチすることさえできない例外が発生します。例外:

    java.lang.IllegalArgumentException: ウィンドウの追加後にウィンドウ タイプを変更することはできません。

コード:

@Override
public void onAttachedToWindow()
  {
  this.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD_DIALOG);
  super.onAttachedToWindow();
  }

私に何ができる?

4

2 に答える 2

2

Android バージョン 4 (API 14 以降) の場合、以下を使用できる可能性があります: getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);

ただし、エミュレーターではホームボタンをブロックしないので、ちょっと役に立たない. 実際のデバイスで正常に動作するかどうかはまだわかりません。

次の回避策を使用することは可能かもしれません: アプリをデフォルトのホーム画面アプリとして設定します。アプリケーションがアクティブなときにホームボタンが押された場合は、それをキャプチャして何もしません。アプリケーションがバックグラウンドにある (または閉じている) ときにホーム ボタンが押された場合は、以前に選択したデフォルトのホーム アプリを開きます。

または、ユーザーに、起動するたびにデフォルトのホームランチャーアプリを自分のものとして設定し、閉じた後に再度リセットするように依頼することもできます (以前のものに戻すか、完全にリセットします)。

出来ますか?もしそうなら、どのように?


Android Lollipop (API 21 であるバージョン 5.0) 以降、画面を固定する方法があり、これはユーザーまたはアプリ (ここにリンク)で有効にすることができます。

画面固定を有効にするには、次の 2 つの方法があります。

手動: ユーザーは [設定] > [セキュリティ] > [画面の固定] で画面の固定を有効にし、最近使用した画面で緑色の固定アイコンをタップして、固定するタスクを選択できます。プログラムによる: プログラムで画面固定を有効にするには、アプリから startLockTask() を呼び出します。要求元のアプリがデバイスの所有者でない場合、ユーザーは確認を求められます。デバイス所有者アプリは setLockTaskPackages() メソッドを呼び出して、ユーザーの確認手順なしでアプリをピン留めできるようにすることができます。

それは何をするためのものか?さらに読んで見てください:

タスクのロックがアクティブな場合、次の動作が発生します。

ステータス バーは空白で、ユーザー通知とステータス情報は非表示になっています。[ホーム] ボタンと [最近のアプリ] ボタンが非表示になります。他のアプリは新しいアクティビティを開始できません。現在のアプリは、新しいタスクを作成しない限り、新しいアクティビティを開始できます。デバイスの所有者が画面固定を呼び出すと、アプリが stopLockTask() を呼び出すまで、ユーザーはアプリにロックされたままになります。画面の固定が、デバイスの所有者ではない別のアプリまたはユーザーによる直接のアクティビティである場合、ユーザーは [戻る] ボタンと [最近] ボタンの両方を押したままにして終了できます。

それだけでなく、この投稿によると、ユーザーの確認なしでこれを切り替えることもでき、この特別な状態を終了することはアプリのロジックの下にあります。

幼児に安全なアプリに最適なようです。

于 2012-01-14T12:05:42.280 に答える
1

私にとって、以下のコードはICSのホームボタンを隠しています(バージョン4.4.4)

public void onCreate(Bundle savedInstanceState) {
    this.getWindow().setType(WindowManager.LayoutParams.TYPE_APPLICATION);
            super.onAttachedToWindow();
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);

    }
于 2015-03-13T21:06:39.453 に答える