Как перейти на полный экран на Android без строки состояния и renderMode установлен прямой?

Я создаю приложение AIR-> Android для розничного киоска. Мы собираемся скрыть "строку состояния", чтобы приложение было полноэкранным и не имело панель программных кнопок (оно также будет заблокировано в режиме киоска с помощью стороннего приложения).

Когда я публикую и запускаю мое приложение на нашем устройстве со скрытой строкой состояния, цвет сцены вспышки виден там, где была исходная строка состояния. Это пространство должно быть заполнено содержимым приложения (полноэкранные изображения и т. Д.), Но пространство в 68 пикселей, в котором изначально находилась полоса, просто сплошное белое (или любой другой backgroundColor, на котором установлена ​​сцена)

После долгих проб и ошибок я прибил это к тому факту, что у меня установлен renderMode, указывающий на направление в дескрипторе приложения xml. Если я уберу это, содержимое приложения заполнит экран, но, очевидно, у меня не будет доступа к системе ускоренного рендеринга на GPU.

Я предполагаю, что это как-то связано с тем, что AIR запрашивает у аппаратного устройства разрешение, которое возвращается как 1920x1032, хотя фактическое количество пикселей составляет 1920x1080. Таким образом, под капотом AIR настраивается только визуализируемое окно 1920x1032 (в режиме renderMode>direct).

Кто-нибудь знает способ включения истинного полноэкранного режима в renderMode>direct?

1 ответ

Android MEtrics ANE является одним из самых простых в сборке. Вот мой образец для получения разрешения x. Если у вас нет опыта работы с ANE, это может быть правильным для начала:

@Override
public FREObject call(FREContext arg0, FREObject[] arg1)
{
    try
    {
        DisplayMetrics metrics = arg0.getActivity().getResources().getDisplayMetrics();
        int realWidth = metrics.widthPixels;
        try
        {
            Display display = arg0.getActivity().getWindowManager().getDefaultDisplay();
            display.getRealMetrics(metrics);
            int rawWidth = metrics.widthPixels;
            if(rawWidth > realWidth)
            {
                realWidth = rawWidth;
            }
        }
        catch(Exception e)
        {

        }
        try
        {
            Display display = arg0.getActivity().getWindowManager().getDefaultDisplay();
            int rawWidth = 0;
            Method getRawWidth = Display.class.getMethod("getRawWidth");
            rawWidth = (Integer) getRawWidth.invoke(display);               
            if(rawWidth > realWidth)
            {
                realWidth = rawWidth;
            }
        }
        catch(Exception e)
        {

        }           
        FREObject baseValue = FREObject.newObject(realWidth);
        return baseValue;
    }
    catch(Exception e)
    {

    }
    return null;
}

Scalefusion предоставляет решение в виде программного обеспечения для киосков, которое включает такие функции, как безопасность и защита, удаленное управление и массовое развертывание, управление приложениями и пользователями, мониторинг и диагностика работоспособности и мониторинг и диагностика работоспособности.

Наше программное обеспечение для розничных киосков в основном будет основано на классе, унаследованном от DeviceAdminReceiver и ComponentName. Во-первых, мы должны сообщить системе, что наше приложение претендует на роль администратора устройства. Мы можем сделать это, добавив приемник в AndroidManifest.xml, содержащий метаданные с именем android.app.device_admin:

<application 
... 
android:testOnly="true">
<receiver
    android:name=".MyDeviceAdminReceiver"
    android:description="@string/admin_description"
    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_receiver" />
    <intent-filter>
        <action android:name="android.app.action.DEVICE_ADMIN_ENABLED"/>
    </intent-filter>
</receiver>

Другие вопросы по тегам