如何在没有状态栏和renderMode设置为直接的Android上全屏显示?

时间:2015-09-22 09:36:14

标签: android actionscript-3 flash air starling-framework

我正在为零售亭建立一个AIR-> Android应用程序。我们将隐藏“状态栏”'所以该应用程序是全屏的,并没有软按钮栏(它也将使用第三方应用程序锁定到信息亭模式)。

当我在设备上发布并运行我的应用程序并隐藏状态栏时,可以在原始状态栏的位置看到Flash舞台颜色。这个空间应该填充应用程序内容(全屏图像等),但最初包含该栏的68px空间只是纯白色(或者舞台设置为的任何backgroundColor)

经过大量的反复试验后,我已经确定了将renderMode设置为直接在app描述符xml中的事实。如果我删除此应用程序内容填满屏幕,但显然我无法访问GPU加速渲染系统。

我认为这与AIR有关,询问设备硬件的分辨率,即使实际像素数为1920x1080,也会返回1920x1032。因此,在引擎盖下,AIR仅设置一个1920x1032的可渲染窗口(当处于renderMode> direct时)。

有没有人知道在renderMode> direct时启用真正全屏的方法?

2 个答案:

答案 0 :(得分: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;
}

答案 1 :(得分:0)

Scalefusion在Kiosk软件中提供了解决方案,该解决方案启用了以下功能:安全性和保护,远程管理和大规模部署,应用程序和用户管理,运行状况监视和诊断以及运行状况监视和诊断。

我们的Retail Kiosk Software主要基于从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>