Подтвердить что ты не робот

Постоянно скрывать строку состояния Android

Я пытаюсь скрыть строку состояния системы на устройстве Android 4.4. Это для режима киоска, где мое приложение будет единственным приложением на устройстве. На данный момент целевым устройством является Nexus 7. 2013 года.

Устройство укоренено, и я смог полностью удалить нижнюю панель навигации с некоторой информацией из этот пост.

Для верхней панели состояния все, что я пробовал, временно скрывает панель. Если мои пользователи двигаются вниз в верхней части экрана, появляется строка состояния. Я не хочу позволять им видеть время, получать настройки или даже видеть уведомления.

Сообщения, которые я нашел и уже пробовал:

Любые предложения?

В идеале, мне бы хотелось, чтобы у меня была возможность редактировать build.prop, поскольку я уже делаю это для панели навигации и могу сделать это в одно и то же время. Я пытаюсь не создавать собственный андроид.

Update:

После некоторой дополнительной работы это, по-видимому, несколько зависит от точной сборки android, или от устройства, на котором он работает.

Некоторые устройства, такие как серия Nexus, с которыми я работал, позволяют пользователю прокручивать, чтобы панель снова появлялась.

Однако, я недавно пробовал это на Verizon Eclipse, и панель не появляется снова, и это то, что я искал.

Я все еще ищу лучшее решение для таргетинга на все устройства, но это, вероятно, придет к созданию моей собственной сборки Android.

4b9b3361

Ответ 1

Мы не смогли предотвратить появление статуса в полноэкранном режиме на устройствах kitkat, поэтому сделали взломать, который по-прежнему соответствует требованию, т.е. блокировать расширение строки состояния.

Для этого приложение не было в полноэкранном режиме. Мы помещаем оверлей поверх строки состояния и потребляем все входные события. Это предотвратило расширение статуса.

Примечание:

  • customViewGroup - это настраиваемый класс, который расширяет любые макет (рамка, относительный макет и т.д.) и потребляет событие касания.
  • чтобы использовать событие touch, переопределить метод 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);

Надеюсь, это поможет вам

Ответ 2

Я знаю, что это старый вопрос, но, надеюсь, это поможет кому-то. Вот два очень простых вызова для отключения и включения строки состояния, которую я использовал ранее. Может использоваться из командной строки или выполняется приложением Java:

Отключить:

service call activity 42 s16 com.android.systemui

Включить:

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

Ответ 3

Я попробовал обходной путь, предоставленный @gonglong, но я не был доволен результатом из-за вспышки в пользовательском интерфейсе, когда обходной путь ударил.

Вместо этого я смог сделать это как root:

settings put secure user_setup_complete 0

Я думаю, что на обычном устройстве это приведет к запуску начальной настройки устройства, но на моих устройствах я удалил APK из системы, чтобы этого не произошло.

Это не документировано нигде, где я могу найти, но имеет приятный эффект, когда верхний пользовательский интерфейс настроек не может быть перенесен. Область уведомлений все еще может быть перенесена.

Другая настройка, которую я нашел полезной, была:

settings put global device_provisioned 0

Это скрывает параметры "Режим полета" и "Без звука" в меню "Питание", что является дополнительным бонусом для моего приложения.

Там может быть больше побочных эффектов, но я еще не нашел для меня ничего такого.

Полный список

Этот список был взят с Nexus 7 2013 LTE с новым Android 4.4.3 (KTU84L). Число в квадратных скобках - это значение, когда я вытащил файл db, который был после настройки базового устройства настройки и разрешения разработчика /USB, но перед внесением любых других изменений в настройки

Этот файл был найден в data/data/com.android.providers.settings/databases/settings.db

Примечание. Некоторым URLS необходимо добавить дополнительный пробел для обхода 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]
  • listen_aid [0]
  • tty_mode [0]
  • screen_brightness [87]
  • screen_brightness_mode [1]
  • window_animation_scale [1.0]
  • transition_animation_scale [1.0]
  • accelometer_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 [ячейка, 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]

Ответ 4

У меня нет идеального решения, но обходной путь здесь. Основная идея заключается в том, чтобы прослушивать изменения состояния системы и изменять навигацию/строку состояния как невидимую. Он действует так же, как установка режима IMMERSIVE_STICKY, но исчезает панель навигации/состояния быстрее, чем IMMERSIVE_STICKY.

вот он:

установить систему ui style в onCreate() и on on функцияResume, и установить систему ui change listenener

    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;
        }
    }

Ответ 5

Отличное решение, которое я нашел для этой проблемы, установив для каждого Activity theme и windowSoftInputMode следующие значения:

<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 -->

для дополнительной информации см. здесь.

Ответ 6

добавить это раньше: 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);