キオスクモードのAndroidアプリケーション

こんにちはHabr。 私たちの多くは、毎日特定のアプリケーションで作業し、独自のアプリケーションを作成し、過失のある顧客の要件を満たしています。 これらの要件の1つは次のようなものです。「アプリケーションを終了できないようにします。アプリケーションにある場合を除き、他に何もできないようにします。」 このトピックでは、これを行う方法についての考えを共有したいと思います。





最初にやってくるのは、新しいタイプのアプリケーション-キオスクモード-公共の場所のデバイスで通常実行される特別なタイプのアプリケーションについて学ぶことです。 このようなアプリケーションでは、ユーザーがアクセスできる機能はアプリケーション自体によって制限されます。 システムまたは設定へのアクセスは許可されていません。 これらのアプリケーションを終了することはできません。 ここでAndroidについて話しているので、残念ながら、彼らのAPIはこのタイプのアプリケーションを作成する機会を提供しません。 このすべてで何ができるか、そして少なくともわずかに顧客を満足させる方法を考えてみましょう。



ハードボタンとコネクタ



各デバイスは、USB、電源など、特定のボタンセットとさまざまなコネクタを提供します。 この場合、開発者として特別なことはできません。 そのようなものを使用する可能性を完全にブロックするデザインを配置する場合、デザインを提供する必要があります。



仮想ボタンのあるパネル



Android 3.0以降では、画面下部のパネルなど、ハードウェアボタンに代わるものが提供されています。 これには、戻る、ホーム、オプション、バッテリーステータスなどが含まれます。





しかし、このパネルでは、アプリケーションを終了したり、システム設定を入力したりすることができ、必要な進行を妨げる可能性があるため、このパネルは非常に邪魔になる可能性があります。 ただし、このパネルを非表示にする方法が1つあります。 以下で説明するすべてのものには、デバイスのルート権限が必要です。

したがって、単純なコマンドを実行する必要があります。

サービスコールアクティビティ79 s16 com.android.systemui



このコマンドは、adbを介して、またはアプリケーションから直接実行できます。

Runtime.getRuntime().exec(new String[]{"su","-c","service call activity 79 s16 com.android.systemui"});
      
      







これにより、私たちに敵対的なパネルが目を離します。 しかし、突然このパネルが必要になった場合は、次のコマンドで簡単に返すことができます。

am startservice -n com.android.systemui / .SystemUIService



またはそれ以外:

 Runtime.getRuntime().exec(new String[]{"am","startservice","-n","com.android.systemui/.SystemUIService"});
      
      







このソリューションは、Android 3.0で正常に機能しました。 私は4.0で物事がどのようにあるか言うことができません。



ホームボタンと戻るボタン



何らかの理由でパネルが必要であるが、ボタンの動作を変更する必要がある場合、1つのレシピがあります。 シンプルな「戻る」ボタンから始めましょう。 ここではすべてが簡単です。メソッドを再定義します。

  @Override public void onBackPressed() { // ... }
      
      







[ホーム]ボタンの方が難しくなりました。 これはアプリケーションを終了してメイン画面に戻るための唯一の方法であるため、Googleは慎重にこのボタンに反応しましたが、私たちにとってこれは災害であり、まさにこれは必要ありません。 私たちにできること:

  1. 起動アクティビティに必要な設定をAndroidManifestに追加する必要があります。

      <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.HOME" /> <category android:name="android.intent.category.LAUNCHER" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter>
          
          





    これにより、次のことがわかります。[ホーム]をクリックすると、ダイアログが表示されます。





    すでに悪くはありませんが、このダイアログを表示せずにアプリケーションを開く方法。

  2. チェックマークを選択してデバイスを再起動すると、デフォルトでアプリケーションが起動しますが、これは問題ではなく、システム設定でこのチェックボックスを簡単に削除することもできます。 別のパスを見てみましょう。ランチャーはオペレーティングシステムの腸内にあり、単に名前を変更したり、別の場所に送信したりします。

    mv /path/Laucher.apk /path2/LaucherOld.apk

    以上が、デバイス上のこの1つの主要なアプリケーションです。 ポップアップダイアログはもうありません。 ランチャーにアクセスする必要がある場合は、それを戻すか、シークレットメニューを作成して、移動した場所からLaucnherを起動します。




問題



残念ながら、すべてが見た目ほどバラ色ではありません。 すべての問題が最後まで解決されるわけではありません。 たとえば、標準キーボードを見てください:





左下隅には、キーボード設定に移動できる小さなボタンがありますが、これは良くありません:





解決策は、APIで許可されているため、独自のキーボードを完全に作成することです。 しかし、1つの小さなボタンのために、決定は面倒です。



さまざまなシステムダイアログ



アプリケーションの実行中に、バッテリ低下やシステム更新通知など、さまざまなシステムアラートと通知がポップアップ表示される場合があります。 それらの一部はシステム設定にアクセスできます。









残念ながら、このようなダイアログの表示を防ぐ方法はわかりませんでした。 設定で最初のダイアログをオフにできる場合、2番目のダイアログではさらに悪いことに、設定自体に直接アクセスできます。 解決策は、Launcher.apkで行ったのと同じことです-設定アプリケーションを転送または名前変更します。



おわりに



この記事では、キオスクモードアプリケーションを作成するための既知の方法を説明しようとしました。 habrasocietyに他の方法がある場合、それらを共有することは素晴らしいことです。 ありがとう




All Articles