【发布时间】:2020-08-18 11:30:35
【问题描述】:
我怎样才能知道当前的应用程序类型是什么?即它是在移动设备上运行还是作为桌面 Air 应用程序运行?
我试过了:
if(FlexGlobals.topLevelApplicatoin as WindowedApplication)
//desktop
但是移动版找不到WindowedApplication类。
如何区分?
【问题讨论】:
标签: flash apache-flex mobile air adobe
我怎样才能知道当前的应用程序类型是什么?即它是在移动设备上运行还是作为桌面 Air 应用程序运行?
我试过了:
if(FlexGlobals.topLevelApplicatoin as WindowedApplication)
//desktop
但是移动版找不到WindowedApplication类。
如何区分?
【问题讨论】:
标签: flash apache-flex mobile air adobe
这行得通:
public static function isAndroid():Boolean
{
return (Capabilities.version.substr(0,3) == "AND");
}
public static function isIOS():Boolean
{
return (Capabilities.version.substr(0,3) == "IOS");
}
... //is Blackberry
public static function isMobile():Boolean
{
return (isAndroid() || isIOS()); // || isBlackberry()
}
【讨论】:
您可以使用Capabilities.OS;但是请注意文档中的此警告:
不要使用 Capabilities.os 或 Capabilities.manufacturer 来确定 基于操作系统的能力。基于能力 操作系统是个坏主意,因为如果 应用程序不考虑所有潜在的目标操作系统。 相反,请使用与以下功能相对应的属性 你正在测试。
【讨论】:
这是我用来确定它是哪个操作系统以及它是否是 Mobile 的类,当然这仅涵盖 Windows、Linux Android 和 iOS:
package com.fw3dlogical.utils {
import flash.system.Capabilities;
/**
* Platform
* @author Juan Fernando Velez
*/
public class Platform {
public static function get isWin():Boolean {
return (Capabilities.version.indexOf("WIN") != -1);
}
public static function get isLinux():Boolean {
return (Capabilities.version.indexOf("LNX") != -1);
}
public static function get isAndroid():Boolean {
return (Capabilities.version.indexOf("AND") != -1);
}
public static function get isiOS():Boolean {
return (Capabilities.version.indexOf("IOS") != -1);
}
public static function isMobile():Boolean {
return (isAndroid() || isiOS());
}
}
}
}
【讨论】:
如果您需要知道您是在移动设备还是桌面设备上运行,您应该检查Capabilities.cpuArchitecture:
if(Capabilities.cpuArchitecture=="ARM")
{
}
【讨论】:
我不确定, 但是我们无法将 FlexGlobals.topLevelApplicatinn 转换为 Mobile Application 中的 WindowedApplication。
因此,移动应用程序可以来自以下类型:
1.TabbedViewNavigatorApplication - 用于选项卡式视图导航应用程序
2.viewnavigatorapplication - 基于视图的导航应用程序
因此,作为您的应用程序类型,您应该尝试从以上两个选项进行转换......
【讨论】:
此测试可在移动应用上运行,无需测试特定操作系统名称(如 Capabilities.os 或 Capabilities.version)。它具有在桌面上调试移动应用程序以及 Capabilities.os 可能无法为您提供所需答案的情况下始终如一地工作的优势:
import flash.utils.getDefinitionByName;
...
var hasWindowedApp:Boolean = false;
try
{
hasWindowedApp = getDefinitionByName("spark.components.WindowedApplication") != null;
}
catch (error:ReferenceError)
{
}
if (!hasWindowedApp)
{
try
{
hasWindowedApp = getDefinitionByName("mx.core.WindowedApplication") != null;
}
catch (error:ReferenceError)
{
}
}
【讨论】:
检查IOS(iPad,iPhone)的C#函数
public bool isIOS()
{
HttpContext context = HttpContext.Current;
if (context.Request.ServerVariables["HTTP_USER_AGENT"] != null)
{
foreach (string s in new[] { "iPad", "iphone" })
{
if (context.Request.ServerVariables["HTTP_USER_AGENT"].ToLower().Contains(s.ToLower()))
{
return true;
}
}
}
return false;
}
【讨论】: