2

如何在 phonegap 中检查设备?实际上我需要我的应用程序仅在平板电脑或 Iphone 中运行。我需要在其他手机上阻止我的应用程序仅在 Android 平板电脑或 iphone Ipad 中运行。是否可以检查 phonegap .. ?

谢谢

4

3 回答 3

7

介绍

有几种可用的解决方案。有些是由 javascript 提供的,有些是免费的,有些是付费服务。另外,有些是服务器端,有些是客户端,但从这封邮件中,我认为您需要客户端解决方案。

客户端检测:

现代化者-

利用很酷的新 Web 技术非常有趣,除非您必须支持落后的浏览器。Modernizr 使您可以轻松编写条件 JavaScript 和 CSS 来处理每种情况,无论浏览器是否支持某个功能。它非常适合轻松进行渐进增强。

好的 :

只有客户端,服务器端组件不存在

对于 12kb 的 javascript 框架来说,速度很快但仍然很大。由于其模块化,它可以变得更小,具体取决于您的需要。

坏的 :

只能做这么多,更少的信息然后服务器端检测。

Modernizr 本身是了解用户浏览器功能的好方法。但是,您只能在浏览器本身上访问其 API,这意味着您无法轻松地从了解服务器逻辑中的浏览器功能中受益。

例子 :

    <!DOCTYPE html>
    <html>
    <head>
      <meta charset="utf-8">
      <title>Modernizr Example</title>
      <script src="modernizr.min.js"></script>
    </head>
    <body>
      <script>
        if (Modernizr.canvas) {
          // supported
        } else {
          // no native canvas support available :(
        }  
      </script>
    </body>
    </html>

基于 JavaScript 的浏览器嗅探

有争议的是,这可能(在学术上)是检测移动设备的最糟糕的方法,但它确实有其优点。

好的 :

简单的

坏的 :

它只会告诉设备类型,但不会提供设备版本。例如,它会告诉您我们使用了 iPad,但如果它是 1,2 或 3 版,则不会。

例子 :

<script type="text/javascript">     
    var agent = navigator.userAgent;      
    var isWebkit = (agent.indexOf("AppleWebKit") > 0);      
    var isIPad = (agent.indexOf("iPad") > 0);      
    var isIOS = (agent.indexOf("iPhone") > 0 || agent.indexOf("iPod") > 0);     
    var isAndroid = (agent.indexOf("Android")  > 0);     
    var isNewBlackBerry = (agent.indexOf("AppleWebKit") > 0 && agent.indexOf("BlackBerry") > 0);     
    var isWebOS = (agent.indexOf("webOS") > 0);      
    var isWindowsMobile = (agent.indexOf("IEMobile") > 0);     
    var isSmallScreen = (screen.width < 767 || (isAndroid && screen.width < 1000));     
    var isUnknownMobile = (isWebkit && isSmallScreen);     
    var isMobile = (isIOS || isAndroid || isNewBlackBerry || isWebOS || isWindowsMobile || isUnknownMobile);     
    var isTablet = (isIPad || (isMobile && !isSmallScreen));     

    if ( isMobile && isSmallScreen && document.cookie.indexOf( "mobileFullSiteClicked=") < 0 ) mobileRedirect(); 
</script>

更多信息

我有关于这个主题的另一篇文章/答案。在这里找到它。

于 2013-06-21T08:36:41.923 回答
4

您可以使用 JavaScript 执行此操作,使用 User Agent 已在另一个答案中解释过,

但您也可以使用 Cordova/PhoneGap 设备 API

http://cordova.apache.org/docs/en/2.8.0/cordova_device_device.model.md.html#device.model

使用 var string = device.model;

字符串将包含 iOS 模型

为您提供来自本机的所有信息,以防您想知道它是 iPad 1、iPad 2 还是 iPad Mini

例如“iPad2,5”是 iPad Mini Wifi

查看此网站以获取地图信息 http://theiphonewiki.com/wiki/Models

于 2013-06-21T15:20:16.937 回答
1

Cordova“开箱即用”无法确定设备是否为平板电脑。

对于 iOS,通过检查用户代理字符串,可以使用简单的 Javascript 来检测设备是否是 iPad:

var isTablet = !!navigator.userAgent.match(/iPad/i);

但是,对于 Android,JS 还不够好,它需要一些原生 Java:

private boolean isTabletDevice(Context applicationContext) {
        boolean device_large = ((applicationContext.getResources().getConfiguration().screenLayout &
                Configuration.SCREENLAYOUT_SIZE_MASK) >=
                Configuration.SCREENLAYOUT_SIZE_LARGE);

        if (device_large) {
            DisplayMetrics metrics = new DisplayMetrics();
            Activity activity = this.cordova.getActivity();
            activity.getWindowManager().getDefaultDisplay().getMetrics(metrics);

            if (metrics.densityDpi == DisplayMetrics.DENSITY_DEFAULT
                    || metrics.densityDpi == DisplayMetrics.DENSITY_HIGH
                    || metrics.densityDpi == DisplayMetrics.DENSITY_MEDIUM
                    || metrics.densityDpi == DisplayMetrics.DENSITY_TV
                    || metrics.densityDpi == DisplayMetrics.DENSITY_XHIGH) {
                Log.d(LOG_TAG, "Is Tablet Device");
                return true;
            }
        }
        Log.d(LOG_TAG, "Is NOT Tablet Device");
        return false;
}

这个插件将这两种方法封装在一个易于使用的 Android 和 iOS 包中:https ://github.com/dpa99c/phonegap-istablet 。

于 2015-04-29T12:32:14.683 回答