【问题标题】:How to determine if an application is running as a mobile or desktop air applicaton?如何确定应用程序是作为移动应用程序还是桌面应用程序运行?
【发布时间】:2020-08-18 11:30:35
【问题描述】:

我怎样才能知道当前的应用程序类型是什么?即它是在移动设备上运行还是作为桌面 Air 应用程序运行?

我试过了:

if(FlexGlobals.topLevelApplicatoin as WindowedApplication)
 //desktop

但是移动版找不到WindowedApplication类。

如何区分?

【问题讨论】:

    标签: flash apache-flex mobile air adobe


    【解决方案1】:

    这行得通:

    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()
    }
    

    【讨论】:

    • 公共静态函数 get isBlackBerry():Boolean { return (Capabilities.version.substr(0,3) == "QNX"); }
    • 将“beeing a mobile”定义为“Android”或“IOs”是非常错误的。无论您将什么平台添加到列表中,这种方法都是错误的。永远更新可能的移动平台列表是一个非常糟糕的主意
    【解决方案2】:

    您可以使用Capabilities.OS;但是请注意文档中的此警告:

    不要使用 Capabilities.os 或 Capabilities.manufacturer 来确定 基于操作系统的能力。基于能力 操作系统是个坏主意,因为如果 应用程序不考虑所有潜在的目标操作系统。 相反,请使用与以下功能相对应的属性 你正在测试。

    【讨论】:

    • 是的,没错。我想这会使测试变得困难。不过,我对此没有解决方案。模拟器有很多问题。但是,提交增强请求,我会投票赞成。
    【解决方案3】:

    这是我用来确定它是哪个操作系统以及它是否是 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());
                }
    
            }
        }
    }
    

    【讨论】:

      【解决方案4】:

      如果您需要知道您是在移动设备还是桌面设备上运行,您应该检查Capabilities.cpuArchitecture:

      if(Capabilities.cpuArchitecture=="ARM")
      {
        
      }
      

      【讨论】:

      • 这是否适用于 Intel x86 Android 手机?喜欢华硕 ZenFone?
      【解决方案5】:

      我不确定, 但是我们无法将 FlexGlobals.topLevelApplicatinn 转换为 Mobile Application 中的 WindowedApplication。

      因此,移动应用程序可以来自以下类型:

      1.TabbedViewNavigatorApplication - 用于选项卡式视图导航应用程序

      2.viewnavigatorapplication - 基于视图的导航应用程序

      因此,作为您的应用程序类型,您应该尝试从以上两个选项进行转换......

      【讨论】:

      • 这是不完整的。我制作了扩展应用程序的移动应用程序;事实上,我认为这甚至是 Flash Builder 中的一个向导选项。
      【解决方案6】:

      此测试可在移动应用上运行,无需测试特定操作系统名称(如 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)
          {
          }
      }
      

      【讨论】:

        【解决方案7】:

        检查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;
            }
        

        【讨论】:

        • 使用接受的答案中显示的方法不是更好吗?
        • 原来的问题是关于 AIR/AS3,而不是 ASP.NET/C#
        猜你喜欢
        • 2021-04-22
        • 2017-01-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-09-20
        • 1970-01-01
        • 1970-01-01
        • 2017-03-27
        相关资源
        最近更新 更多