Прозрачная панель уведомлений с живыми обоями на Galaxy S4

Полное редактирование, так как, очевидно, не было ясно, что это действительно вопрос программирования

На Galaxy S4 панель уведомлений по умолчанию прозрачна. При использовании встроенных обоев «Пузыри» это выглядит, например, так:

панель уведомлений с пузырьками на обоях

Теперь я разработал свои собственные живые обои. Для простоты я просто заполняю доступный холст 0xFFFF0000 для скриншотов, но обычно он показывает другую сцену. На Galaxy S4 мои обои показывают не прозрачную панель уведомлений, а черную по умолчанию:

панель уведомлений с моими обоями

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

прозрачная панель моих обоев

У меня простой вопрос: есть ли способ надежно включить прозрачную панель уведомлений из моего кода обоев или манифеста? На самом деле, непредсказуемое переключение между прозрачной и черной полосой делает работу пользователя намного хуже, чем просто всегда черная полоса.


person Thrakbad    schedule 05.06.2013    source источник
comment
принадлежит android.stackexchange.com   -  person Raptor    schedule 05.06.2013
comment
@ShivanRaptor спасибо, я не знал, что это существует   -  person Thrakbad    schedule 05.06.2013
comment
На самом деле ему там не место... как мне только что там сказали. Позвольте мне уточнить с правкой.   -  person Thrakbad    schedule 05.06.2013


Ответы (2)


Это действительно возможно на нерутированном S4:

public static boolean setTransparentNotificationBarTouchWiz(View view) {
    try {
        Field field = View.class.getDeclaredField("SYSTEM_UI_FLAG_TRANSPARENT_BACKGROUND");
        Class<?> t = field.getType();
        if (t == int.class) {
            int value = field.getInt(null);
            view.setSystemUiVisibility(value);
            return true;
        }
    } catch (NoSuchFieldException e) {
    } catch (IllegalAccessException e) {
    }

    return false;
}

Спасибо Кевину @ TeslaCoil за то, что поделился со мной этим флагом.

person Chris Lacy    schedule 26.08.2013
comment
Большое спасибо, я еще не пробовал это конкретно с обоями. Но я все равно приму ответ, чтобы люди могли лучше его найти. - person Thrakbad; 26.08.2013

Извините, если вы не создаете собственное ПЗУ, это невозможно, если только вы не хотите, чтобы строка состояния была изменена только для вашего приложения.

Это потребует чертовски много работы.

Сначала вам нужно будет добавить Theme.NoTitleBar.Fullscreen в свой манифест.

 <application
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name" 
    android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
    >

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

Если вы действительно хотите сделать это удачи, у вас впереди трудные времена.

person blganesh101    schedule 05.06.2013
comment
Большое спасибо за ваш ответ, но я не думаю, что это будет возможно. Я просто хочу, чтобы панель запуска по умолчанию делала свою строку состояния прозрачной, пока мои обои активны, как это делается для встроенных живых обоев. Я не могу запросить какие-либо функции окна для программы запуска по умолчанию. - person Thrakbad; 05.06.2013