【问题标题】:PhoneGap - Detect device type in phonegapPhoneGap - 在 phonegap 中检测设备类型
【发布时间】:2012-06-20 03:04:18
【问题描述】:

我正在 phonegap 中为三个不同的平台构建一个应用程序:Android、iOS 和 Blackberry。这样做时,我必须检测设备类型,以便我可以在不同平台和不同设备(如 Android Phone、Android Tablet、iPhone、iPad 和 Blackberry)上管理我的应用的高度和宽度......

【问题讨论】:

  • 您真的要检测模型尺寸来确定屏幕尺寸吗?真的吗??

标签: android cordova phonegap-plugins


【解决方案1】:

Phonegap 的新功能也是最简单的,就是您可以使用 device.platform:

// Depending on the device, a few examples are:
//   - "Android"
//   - "BlackBerry"
//   - "iOS"
//   - "webOS"
//   - "WinCE"
//   - "Tizen"
//   - "browser"
var devicePlatform = device.platform;

【讨论】:

  • 如果您发现“设备”未定义,那么您可能使用的是较新版本的 Phonegap/Cordova,这意味着您需要安装插件。这可以在这里找到,git-wip-us.apache.org/repos/asf/cordova-plugin-device.git 并由$ phonegap local plugin add https://git-wip-us.apache.org/repos/asf/cordova-plugin-device.gitcordova plugin add https://git-wip-us.apache.org/repos/asf/cordova-plugin-device.git 安装
  • 目前只有cordova plugin add cordova-plugin-device
  • 我收到“没有设备提供商!”错误。有什么想法吗?
【解决方案2】:

如果你想在onDeviceReady之前获取设备类型,可以这样获取。

var deviceType = (navigator.userAgent.match(/iPad/i))  == "iPad" ? "iPad" : (navigator.userAgent.match(/iPhone/i))  == "iPhone" ? "iPhone" : (navigator.userAgent.match(/Android/i)) == "Android" ? "Android" : (navigator.userAgent.match(/BlackBerry/i)) == "BlackBerry" ? "BlackBerry" : "null";

alert(deviceType);

【讨论】:

  • 非常感谢先生。但问题是它无法检测到Android平板电脑/ epad。所以你能帮我怎么做吗?它将 epad 类型显示为 android。提前非常感谢。
  • 您只需为 Android 平板电脑/epad 记录 userAgent 字符串。使用 console.log(navigator.userAgent);并根据字符串检查它返回的内容和放置条件。
  • navigator.userAgent.match(/epad/i)) == "epad" ? “epad”我已经把这个条件放在你提供给我的代码中......但它不工作......
  • 尝试提醒(navigator.userAgent) 并告诉我你为 android epad 得到了什么。
  • 为什么要将deviceType 设置为字符串"null"
【解决方案3】:
cordova.platformId 
// "android"

【讨论】:

  • 您知道可能值的列表吗?我想根据 de 平台应用某个设置,但我不知道它是“ios”还是“iOS”或“iPhone”或“iSmugface”。
  • @Roel 这只是猜测,但由于cordova.platformVersion指的是cordova平台版本而不是设备版本,所以我认为cordova.platformId与platforms下的文件夹名称一致。所以对于 ios,它会是 "ios"
  • 这是一个比 JDev 的答案更可靠的解决方案。
  • 这是完美的。不需要插件。
  • 这应该是这里的最佳答案。第一个很恶心,让我感觉不舒服。
【解决方案4】:

您可以使用 device.name 属性来获取有关设备的详细信息。

    function onDeviceReady() {
    var name=device.name ;
       }

或仅获取可以使用 device.platform 属性的平台。

    function onDeviceReady() {
    var name=device.name ;
    var plat=device.platform;
       }

【讨论】:

  • 非常感谢...但我想在这里输入设备类型。要么是安卓手机要么是安卓平板。在 iPhone 的 cas 中也是如此。表示它是 iPhone 或 iPad。因为我的应用是针对这三个平台的。 1.Android 2.黑莓和 3.iPhone/iPad。
【解决方案5】:

将此代码用作您的 html 文件

设备属性示例

<script type="text/javascript" charset="utf-8" src="phonegap-1.0.0.js"></script>
<script type="text/javascript" charset="utf-8">

// Wait for PhoneGap to load
//
document.addEventListener("deviceready", onDeviceReady, false);

// PhoneGap is ready
//
function onDeviceReady() {
    var element = document.getElementById('deviceProperties');

    element.innerHTML = 'Device Name: '     + device.name     + '<br />' + 
                        'Device PhoneGap: ' + device.phonegap + '<br />' + 
                        'Device Platform: ' + device.platform + '<br />' + 
                        'Device UUID: '     + device.uuid     + '<br />' + 
                        'Device Version: '  + device.version  + '<br />';
}

</script>

正在加载设备属性...

我建议你在设备中检查这个 祝你好运 阿米尔汗一世。

【讨论】:

    【解决方案6】:

    您可以查看以下链接: http://docs.phonegap.com/en/1.0.0/phonegap_device_device.md.html

    有几种方法可以从 phonegap 获取设备信息。

    另一种选择是查看浏览器类型。 (IE = WP7,Safari = iOS,...)

    我不确定您是否能够检测到您使用的是 Android 手机还是平板电脑... 无论如何,您的 html 应用程序应该能够处理任何屏幕分辨率。 您也可以在手机上设置不同的分辨率!

    【讨论】:

      【解决方案7】:
      function onDeviceReady()
      {
      // ***IMPORTANT: access device object only AFTER "deviceready" event    
      document.getElementById("name").innerHTML = device.name;
      document.getElementById("pgversion").innerHTML = device.cordova ? device.cordov:device.phonegap;
      document.getElementById("platform").innerHTML = device.platform;
      document.getElementById("uuid").innerHTML = device.uuid;
      document.getElementById("version").innerHTML = device.version;
      
      }
      

      查看这里device.platform

      【讨论】:

      • 非常感谢...但我想在这里输入设备类型。要么是安卓手机要么是安卓平板。在 iPhone 的 cas 中也是如此。表示它是 iPhone 或 iPad。因为我的应用程序是针对三个平台的。 1.Android 2.黑莓和 3.iPhone/iPad。
      • device.platform return "Android" on android emulator.Actually I don't check on real device but I know this will give you fullful result.
      【解决方案8】:

      如果您因为尝试正确格式化屏幕而需要此信息 - 您应该使用 CSS @media 查询来确定适当的屏幕布局并相应地应用 CSS。

      使用 Google 查找有关“使用 CSS 进行响应式设计”的信息

      【讨论】:

        【解决方案9】:

        我肯定不会在布局页面时使用设备类型,布局应该仅基于屏幕大小

        您可以使用 javascript 属性:

        width = window.innerWidth
        height = window.innerHeight
        

        或使用 CSS:

        .element{   
            height: 50vh;  //(height = 50 percent of screen)
        }
        

        见 vmin,vmax, vh, vw

        【讨论】:

        • 嗯?是的,确实如此!,他想检测设备,然后有一个表,其中包含每个模型的硬编码尺寸!,那是错误的!,他真正的问题不是如何检测模型,而是如何检测模型的大小屏幕,所以我的回答是正确的,任何真正同意使用设备模型来确定屏幕大小的想法的人都不是。
        • 问题是如何检测设备类型。你没有回答问题。
        • 问题是如何检测设备类型来推断屏幕大小,这是错误的!,再读一遍!任何对此答案投反对票的人都会鼓励某人编写无法很好扩展并且会中断的代码。 “我必须检测设备类型,以便管理我的应用程序的高度和宽度”!不是很清楚吗?
        • 问题不在于他只想知道设备类型!
        • 是的,我做到了,问题是检测设备以了解屏幕的大小!!,这是完全错误的。 “必须检测设备类型,以便我可以在不同平台上管理我的应用程序的高度和宽度”我不应该被否决,再次阅读他的问题,他想做的是错误的。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-12-02
        • 1970-01-01
        • 2014-09-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多