web-dev-qa-db-ja.com

永久に非表示Androidステータスバー

Android 4.4デバイスでシステムステータスバーを非表示にしようとしています。これは、自分のアプリがデバイスで実行される唯一のアプリであるキオスクモード用です。現在、2013 Nexus 7です。

デバイスはルート化されており、下のナビゲーションバーを this post からの情報とともに完全に削除することができました。

一番上のステータスバーについては、私が試したすべてが一時的にバーを隠すだけです。ユーザーが画面の上部を下に移動すると、ステータスバーが再び表示されます。私は、彼らに時間を見せたり、設定にアクセスしたり、通知を見ることを許可したくありません。

私が見つけてすでに試した投稿:

助言がありますか?

理想的には、これを行うためにbuild.propを編集できるようになりたいと思っています。これは、ナビゲーションバーに対して既に行っており、同時に行うことができるからです。私は自分でAndroidイメージをビルドする必要がないようにしています。

更新:

さらにいくつかの作業を行った後、これはAndroidの正確なビルド、またはそれが実行されているデバイスにある程度依存しているようです。

私が取り組んでいるNexusシリーズなどの一部のデバイスでは、ユーザーがスワイプしてバーを再表示できます。

しかし、私は最近Verizon Eclipseでこれを試してみましたが、バーが表示されないので、探していました。

私はまだすべてのデバイスを対象とするより良いソリューションを探していますが、おそらく自分のAndroidビルドを作成することになります。

35
dtyler

KitKatデバイスのステータスがフルスクリーンモードで表示されるのを防ぐことができなかったため、要件に合ったハックを作成しました。つまり、ステータスバーの拡張をブロックしました。

それが機能するために、アプリは全画面表示されませんでした。ステータスバーにオーバーレイを配置し、すべての入力イベントを消費しました。ステータスの拡大を防ぎました。

注:

  • customViewGroupは、任意のレイアウト(フレーム、相対レイアウトなど)を拡張し、タッチイベントを消費するカスタムクラスです。
  • タッチイベントを消費するには、ビューグループのonInterceptTouchEventメソッドをオーバーライドし、trueを返します。

更新済み

<uses-permission Android:name="Android.permission.SYSTEM_ALERT_WINDOW"/> 

customViewGroup実装 コード:

WindowManager manager = ((WindowManager) getApplicationContext()
            .getSystemService(Context.WINDOW_SERVICE));

WindowManager.LayoutParams localLayoutParams = new WindowManager.LayoutParams();
localLayoutParams.type = WindowManager.LayoutParams.TYPE_SYSTEM_ERROR;
localLayoutParams.gravity = Gravity.TOP;
localLayoutParams.flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE|

            // this is to enable the notification to recieve touch events
            WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL |

            // Draws over status bar
            WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN;

    localLayoutParams.width = WindowManager.LayoutParams.MATCH_PARENT;
    localLayoutParams.height = (int) (50 * getResources()
            .getDisplayMetrics().scaledDensity);
    localLayoutParams.format = PixelFormat.TRANSPARENT;

    customViewGroup view = new customViewGroup(this);

    manager.addView(view, localLayoutParams);

これがあなたを助けることを願っています

29
Abhimaan

これは古い質問ですが、誰かの助けになることを願っています。これまでに使用したステータスバーを無効化および有効化する2つの非常に簡単な呼び出しを示します。コマンドラインから使用するか、Java app:

無効にする:

service call activity 42 s16 com.Android.systemui

有効にする:

am startservice -n com.Android.systemui/.SystemUIService
19
D. Gibbs

@gonglongが提供する回避策を試しましたが、回避策が開始されるとUIがフラッシュするため、結果に満足できませんでした。

代わりに、ルートとしてこれを行うことができました。

settings put secure user_setup_complete 0

通常のデバイスでは、これによりデバイスの初期セットアップが開始されると思いますが、私のデバイスでは、システムからそのAPKを削除したので、それは起こりません。

これは私が見つけることができる場所には文書化されていませんが、最高の設定UIを下にドラッグできないという素晴らしい効果があります。通知領域は引き続き下にドラッグできます。

私が便利だと思った別の設定は次のとおりです。

settings put global device_provisioned 0

これにより、[電源]メニューの[機内モード]および[サイレントモード]オプションが非表示になります。これは、私のアプリケーションの追加ボーナスです。

より多くの副作用があるかもしれませんが、私は私にとって重要なものをまだ見つけていません。

全リスト

このリストは、Nexus 7 2013から取得したものですLTE Running new new Android 4.4.3(KTU84L)。角括弧内の数字は、 dbファイル。これは、基本的なセットアップデバイスのセットアップと開発者/ USBの有効化の後、ただし設定にその他の変更を加える前

このファイルはdata/data/com.Android.providers.settings/databases/settings.dbで見つかりました

注:一部のURLでは、SOフィルターをバイパスするために余分なスペース文字を追加する必要がありました

system名前空間

  • volume_music [11]
  • volume_ring [5]
  • volume_system [7]
  • volume_voice [4]
  • volume_alarm [6]
  • volume_notification [5]
  • volume_bluetooth_sco [7]
  • mode_ringer_streams_affected [174]
  • mute_streams_affected [46]
  • vibrate_when_ringing [0]
  • dim_screen [1]
  • dtmf_tone_type [0]
  • 補聴器[0]
  • tty_mode [0]
  • screen_brightness [87]
  • screen_brightness_mode [1]
  • window_animation_scale [1.0]
  • transition_animation_scale [1.0]
  • accelerometer_rotation [1]
  • haptic_feedback_enabled [1]
  • notification_light_Pulse [1]
  • dtmf_tone [1]
  • sound_effects_enabled [1]
  • lockscreen_sounds_enabled [1]
  • pointer_speed [0]
  • alarm_alert [content:// media/internal/audio/media/11]
  • notification_sound [content:// media/internal/audio/media/27]
  • 着信音[content:// media/internal/audio/media/35]
  • next_alarm_formatted []
  • radio.data.stall.recovery.action [0]
  • screen_off_timeout [30000]

global名前空間

  • airplane_mode_on [0]
  • airplane_mode_radios [cell、bluetooth、wifi、nfc、wimax]
  • airplane_mode_toggleable_radios [bluetooth、wifi、nfc]
  • auto_time [1]
  • auto_time_zone [1]
  • stay_on_while_plugged_in [0]
  • wifi_sleep_policy [2]
  • mode_ringer [2]
  • package_verifier_enable [1]
  • wifi_networks_available_notification_on [1]
  • bluetooth_on [0]
  • cdma_cell_broadcast_sms [1]
  • data_roaming [0]
  • mobile_data [1]
  • netstats_enabled [1]
  • install_non_market_apps [0]
  • usb_mass_storage_enabled [1]
  • wifi_max_dhcp_retry_count [9]
  • wifi_display_on [0]
  • lock_sound [/system/media/audio/ui/Lock.ogg]
  • unlock_sound [/system/media/audio/ui/Unlock.ogg]
  • power_sounds_enabled [1]
  • low_battery_sound [/system/media/audio/ui/LowBattery.ogg]
  • dock_sounds_enabled [0]
  • desk_dock_sound [/system/media/audio/ui/Dock.ogg]
  • desk_undock_sound [/system/media/audio/ui/Undock.ogg]
  • car_dock_sound [/system/media/audio/ui/Dock.ogg]
  • car_undock_sound [/system/media/audio/ui/Undock.ogg]
  • wireless_charging_started_sound [/system/media/audio/ui/WirelessChargingStarted.ogg]
  • dock_audio_media_enabled [1]
  • set_install_location [0]
  • default_install_location [0]
  • emergency_tone [0]
  • call_auto_retry [0]
  • preferred_network_mode [9]
  • subscription_mode [1]
  • low_battery_sound_timeout [3600000]
  • wifi_watchdog_on [1]
  • audio_safe_volume_state [1]
  • send_action_app_error [1]
  • web_autofill_query_url [http:// Android.clients.google.com/proxy/webautofill]
  • sms_short_codes_content_url [ http://www.gstatic.com/Android/config_update/07172013-sms-blacklist.txt]
  • sms_short_codes_metadata_url [ http://www.gstatic.com/Android/config_update/07172013-sms-metadata.txt]
  • cert_pin_metadata_url [ http://www.gstatic.com/Android/config_update/10142013-metadata.txt]
  • cert_pin_content_url [ http://www.gstatic.com/Android/config_update/10142013-pins.txt]
  • wifi_on [1]
  • assisted_gps_enabled [1]
  • wifi_scan_always_enabled [1]
  • device_provisioned [1]
  • bugreport_in_power_menu [0]
  • development_settings_enabled [1]
  • adb_enabled [1]
  • wifi_country_code [us]

secure名前空間

  • wifi_watchdog_watch_list [GoogleGuest]
  • mock_location [0]
  • backup_enabled [0]
  • backup_transport [com.google.Android.backup/.BackupTransportService]
  • mount_play_not_snd [1]
  • mount_ums_autostart [0]
  • mount_ums_Prompt [1]
  • mount_ums_notify_enabled [1]
  • accessibility_script_injection [0]
  • accessibility_web_content_key_bindings [0x13 = 0x01000100; 0x14 = 0x01010100; 0x15 = 0x02000001; 0x16 = 0x02010001; 0x200000013 = 0x02000601; 0x200000014 = 0x02010601; 0x200000015 = 0x03020101; 0x200000016 = 0x03010201; 0x200000023 = 0x02000301; 0x200000024 = 0x02010301; 0x200000037 = 0x03070201; 0x200000038 = 0x03000701:0x03010701:0x03020701;]
  • long_press_timeout [500]
  • touch_exploration_enabled [0]
  • speak_password [0]
  • accessibility_script_injection_url [ https://ssl.gstatic.com/accessibility/javascript/Android/AndroidVox_v1.js]
  • lockscreen.disabled [0]
  • screensaver_enabled [1]
  • screensaver_activate_on_dock [1]
  • screensaver_activate_on_sleep [0]
  • screensaver_components [com.google.Android.deskclock/com.Android.deskclock.Screensaver]
  • screensaver_default_component [com.google.Android.deskclock/com.Android.deskclock.Screensaver]
  • accessibility_display_magnification_enabled [0]
  • accessibility_display_magnification_scale [2.0]
  • accessibility_display_magnification_auto_update [1]
  • Android_id [a0ef8b2a9ade982c]
  • enabled_input_methods [com.google.Android.inputmethod.latin/com.Android.inputmethod.latin.LatinIME:com.google.Android.googlequicksearchbox/com.google.Android.voicesearch.ime.VoiceInputMethodService]
  • input_methods_subtype_history []
  • selected_input_method_subtype [-1]
  • selected_spell_checker [com.google.Android.inputmethod.latin/com.Android.inputmethod.latin.spellcheck.AndroidSpellCheckerService]
  • selected_spell_checker_subtype [0]
  • lock_screen_owner_info_enabled [0]
  • voice_recognition_service [com.google.Android.googlequicksearchbox/com.google.Android.voicesearch.serviceapi.GoogleRecognitionService]
  • default_input_method [com.google.Android.inputmethod.latin/com.Android.inputmethod.latin.LatinIME]
  • enabled_print_services [com.google.Android.apps.cloudprint/com.google.Android.apps.cloudprint.printdialog.services.CloudPrintService:com.hp.Android.printservice/com.hp.Android.printservice.ServiceAndroidPrint]
  • enabled_on_first_boot_system_print_services [com.google.Android.apps.cloudprint/com.google.Android.apps.cloudprint.printdialog.services.CloudPrintService:com.hp.Android.printservice/com.hp.Android.printservice.ServiceAndroidPrint]
  • bluetooth_name [Nexus 7]
  • masterLocationPackagePrefixBlacklist [com.google。、com.semaphoremobile.zagat.Android]
  • serial_blacklist [827,864]
  • dropbox:data_app_anr [無効]
  • dropbox:data_app_wtf [無効]
  • ssl_session_cache [ファイル]
  • pubkey_blacklist [5f3ab33d55007054bc5e3e5553cd8d8465d77c61,783333c9687df63377efceddd82efa9101913e8e]
  • facelock_liveliness_recognition_threshold [2.2]
  • facelock_detection_threshold [0.0]
  • dropbox:data_app_crash [無効]
  • masterLocationPackagePrefixWhitelist [com.google.Android.gms]
  • lockscreen.options [enable_facelock]
  • facelock_max_center_movement [10.0]
  • bluetooth_address [AC:22:0B:A5:AF:3D]
  • bluetooth_addr_valid [1]
  • config_update_certificate [切り捨てられたbase64コンテンツ]
  • location_providers_allowed [gps、network]
  • allowed_geolocation_origins [ http://www.google.co.uk http:// www.google.com]
  • locationPackagePrefixBlacklist []
  • user_setup_complete [1]
  • locationPackagePrefixWhitelist []
  • last_setup_shown [Eclair_1]
18
dtyler

私はこの答えを使ってソフトキーを隠しました: https://stackoverflow.com/a/27003890/1525867

そして、ステータスバーを無効にするために(これはあなたのデバイスに害を及ぼす可能性があるので、慎重に行ってください。それをする前に何度かデバイスを台無しにしました)Asus Tinker Boardでテスト、Android 6:

  • ここからapktoolをダウンロードしてください https://bitbucket.org/iBotPeaches/apktool/downloads/ 好きな方法でpathに追加してください
  • デバイスからSystemUI.apkを引き出します:adb pull /system/priv-app/SystemUI/SystemUI.apkSystemUI.apkへのパスは異なる場合があります

  • framework-res.apkをデバイスからプルadb pull /system/framework/framework-res.apkframework-res.apkへのパスは異なる場合があります

  • apktool if framework-res.apkを実行します

  • apktool if SystemUI.apkを実行します

  • apktool d SystemUI.apkを実行します

  • SystemUI\res\layout\status_bar.xmlを開き、Android:visibility="gone"を一番上のxml要素に追加します(私にとってはcom.Android.systemui.statusbar.phone.PhoneStatusBarView

  • apktool b SystemUIを実行します

  • SystemUI\originalに移動し、AndroidManifest.xmlMETA-INFSystemUI\build\apk\にコピーします

  • apktool b SystemUIを再度実行します

  • SystemUI\dist\に移動し、デバイスの元のSystemUI.apkSystemUI\dist\SystemUI.apkadb Push SystemUI\dist\SystemUI.apk /system/priv-app/SystemUI/SystemUI.apkで上書きします

  • デバイスを再起動します

このスレッドに基づいて https://forum.xda-developers.com/showthread.php?t=2203166

4
AvielNiego

その問題に対して私が見つけた素晴らしい解決策は、各アクティビティthemewindowSoftInputModeを次の値に設定することです。

<activity   Android:name=".MyActivity"
            Android:theme="@Android:style/Theme.NoTitleBar.Fullscreen" 
            Android:windowSoftInputMode="adjustResize">  <!-- theme : to set the activity to a full screen mode without a status bar(like in some games) -->
</activity>                                              <!-- windowSoftInputMode : to resize the activity so that it fits the condition of displaying a softkeyboard -->

詳細については こちらを参照

2
Muhammed Refaat

完璧な解決策はありませんが、回避策はあります。基本的な考え方は、システムのUIステータスの変化をリッスンし、ナビゲーション/ステータスバーを強制的に非表示にすることです。 IMMERSIVE_STICKYモードの設定と同様に有効になりますが、ナビゲーション/ステータスバーがIMMERSIVE_STICKYより速く消えます。

ここにあります:

onCreate()およびonResume関数でシステムUIスタイルを設定し、システムUI変更リスナーを設定します

    mDecroView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_STABLE
                                      |    View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
                                      | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
                                      | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
                                      | View.SYSTEM_UI_FLAG_FULLSCREEN
                                      | View.SYSTEM_UI_FLAG_IMMERSIVE);
    mDecroView.setOnSystemUiVisibilityChangeListener(this);

onSystemUiVisibilityChangeでシステムバーを非表示に設定し、数秒後にシステムuiを設定します。そうしないと有効になります(システムバーがまだ完了していない場合、システムuiの設定要求を無視することがあります)

    public void onSystemUiVisibilityChange(int visibility) {
    // TODO Auto-generated method stub
    Log.d(TAG, "onSystemUiVisibilityChange called with visibility " + visibility);
    if((visibility & View.SYSTEM_UI_FLAG_FULLSCREEN) == 0){
        if(null == mHandler){
            mHandler = new MyHandler();
        }
        if(null != mHandler){
            mHandler.removeMessages(MSG_HIDE_SYSTEM_BAR);
            mHandler.sendEmptyMessageDelayed(MSG_HIDE_SYSTEM_BAR, 50);
        }
        //the deccro view is not in full screen
        Log.d(TAG, "setSystemUiVisibility");
        Log.d(TAG, "current system ui is " + mDecroView.getSystemUiVisibility());


    }
}

次のようにシステムUIを設定できます。

public void handleMessage(Message msg) {
        // TODO Auto-generated method stub
        super.handleMessage(msg);
        switch(msg.what){
        case MSG_HIDE_SYSTEM_BAR:
                           mDecroView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_STABLE
                    | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
                    | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
                    | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
                    | View.SYSTEM_UI_FLAG_FULLSCREEN
                    | View.SYSTEM_UI_FLAG_IMMERSIVE);
            break;
        }
    }
2
gonglong

これを前に追加:setContentView(R.layout.x);

this.requestWindowFeature(Window.FEATURE_NO_TITLE);    // Removes title bar
this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,                 
WindowManager.LayoutParams.FLAG_FULLSCREEN);
setContentView(R.layout.x);
0
DiegoAlt