如何在手机屏幕中检查设备是否为iPad和平板电脑

时间:2013-06-21 01:00:52

标签: cordova

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

由于

3 个答案:

答案 0 :(得分:7)

简介

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

客户端检测:

Modernizer -

  

酷炫的新网络技术的优势非常有趣,直到你   必须支持落后的浏览器。 Modernizr让它变得简单   你要编写条件JavaScript和CSS来处理每种情况,   浏览器是否支持某项功能。这是完美的   渐进式增强。

好:

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

快速但仍然很大的javascript框架与其12kb。由于其模块化,它可以变小,取决于您的需求。

糟糕:

只能执行这么多,而不是服务器端检测的信息。

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 based browser sniffing

  

有争议的是,这可能是(在学术上)最糟糕的方式   检测手机,但确实有它的优点。

好:

简单

糟糕:

它只会告诉设备类型,但它不会提供设备版本。例如,它会告诉你我们使用的是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>

更多信息

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

答案 1 :(得分:4)

你可以使用JavaScript,使用用户代理已经在另一个答案中解释,

但您也可以使用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

答案 2 :(得分:1)

Cordova&#34;开箱即用&#34;无法确定设备是否为平板电脑。

对于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