Android 4.0でシステムバーを非表示にすることについて多くの議論があったことは知っていますが、Android 4.0タブレットで仮想ボタンまたはステータスバーまたはシステムバーの機能を無効にすることについての議論はありませんか?
これは可能ですか?誰かが私を正しい方向に導くことができますか?
ありがとう!
Android 4.0でシステムバーを非表示にすることについて多くの議論があったことは知っていますが、Android 4.0タブレットで仮想ボタンまたはステータスバーまたはシステムバーの機能を無効にすることについての議論はありませんか?
これは可能ですか?誰かが私を正しい方向に導くことができますか?
ありがとう!
FLAG_FULLSCREEN を試すと、ステータス バーが非表示になります http://developer.android.com/reference/android/view/WindowManager.LayoutParams.html#FLAG_FULLSCREEN
ロック画面を設計するために多くの調査を行った結果、最終的にシステム バー、つまりナビゲーション バー (戻る、ホーム、最近のアプリのソフト キー) とステータス バーを永久に無効にする解決策を見つけました。Android では、戻るボタンを除くシステム バーをオーバーライドする機能が無効になっています。ただし、これを機能させるには少し回避策があります。
辛抱強く画面固定を理解して実装すれば、成功するでしょう。
画面のピン留めを実装するすべてのアプリケーションを制御するアプリを作成するか、ピン留めする同じアプリケーションに画面のピン留めを直接実装することができます。
この記事では、後の実装を紹介します。
1. まず、アプリがデバイスの所有者である必要があります。
いくつかの方法で実行できますが、最も簡単なのは次のコマンドを実行することです。
adb shell dpm set-device-owner [パッケージ名]/.[MyDeviceAdminReceiver]
DeviceAdminReceiverを拡張した受信機(MyDeviceAdminReceiver)を作成します。ここにコードを入れる必要はありません。デバイス所有者の実装の詳細については、このリンクを参照してください
http://florent-dupont.blogspot.com/2015/02/10-things-to-know-about-device-owner.html
この方法で AndroidManifest.xml ファイルに受信者を登録します。
<receiver
android:name=".MyDeviceAdminReceiver"
android:label="@string/app_name"
android:permission="android.permission.BIND_DEVICE_ADMIN">
<meta-data
android:name="android.app.device_admin"
android:resource="@xml/device_admin" />
<intent-filter>
<action android:name="android.app.action.DEVICE_ADMIN_ENABLED" />
</intent-filter>
</receiver>
2. onCreate メソッドは次のようになります。
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_lock_screen);
ComponentName deviceAdmin = new ComponentName(this, MyDeviceAdminReceiver.class);
DevicePolicyManager mDpm = (DevicePolicyManager) getSystemService(Context.DEVICE_POLICY_SERVICE);
if (mDpm.isDeviceOwnerApp(getPackageName())) {
mDpm.setLockTaskPackages(deviceAdmin, new String[]{getPackageName()});
}
if (mDpm.isLockTaskPermitted(this.getPackageName()))
startLockTask();
3.画面の固定を解除して、ナビゲーション バーを機能させるには:
固定を解除したいコード内の場所で関数 stopLockTask()を呼び出します。たとえば、私のアプリケーションでは、ユーザーが正しいパスコードを入力したことを確認するとすぐに、次の関数を呼び出します。
if (userInput.length() == 4) {
if (userInput.equals(passcode)) {
userInput = "";
etxtPasscodeDisplay.setText("");
stopLockTask(); // this is what you need
unlockHomeButton(); // A method to show home screen when
passcode is correct
finishAffinity(); //kill other activities
}
通常、ロック画面に必要な追加情報:
1. アプリが起動後に最初に表示される場合:
これには、サービス (StartAtBootService) とレシーバー (BootCompletedReceiver) が必要です。
2. 画面のロックとロック解除後にアプリを表示する場合 (電源ボタンを押してロックとロック解除を行います):
サービスを拡張する AEScreenOnOffService と BroadcastReceiver を拡張するAEScreenOnOffReceiver を作成して、画面がオンのときにアクティビティを起動します。
ここで言及したすべての詳細については、 http://www.sureshjoshi.com/mobile/android-kiosk-mode-without-root/
を参照
してください。著者に感謝します。
2 つ以上のリンクを投稿するには、少なくとも 10 の評判が必要です。私はstackoverflowに慣れていないので、十分な評判がないので、参照したすべてのリンクを共有できなくて申し訳ありません. アクセスしたら必ず記事を更新します。