Как перейти на полный экран на 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>