【问题标题】:Using UADetector to get Android device name from User agent使用 UADetector 从用户代理获取 Android 设备名称
【发布时间】:2013-02-19 07:56:21
【问题描述】:

我在 Google App Engine 中使用 UADetector 来解析这个用户代理,如下所示:

Mozilla/5.0 (Linux; U; Android 2.2; en-ca; GT-P1000M Build/FROYO) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1

我可以getOperatingSystem(),但我无法获得像GT-P1000M 这样的Android 设备名称

我该怎么做?

谢谢

【问题讨论】:

    标签: java android google-app-engine user-agent


    【解决方案1】:

    此功能经常被请求,但目前尚未实现。为了能够实现这一点,我们需要一个包含相应设备信息的用户代理字符串的大列表。我认为我们没有得到这份清单,但我们应该能够部分实施(按需)。

    最近几天,我想实现一组已知的片段,这样你就可以写这样的东西:

    UserAgentStringParser parser = UADetectorServiceFactory.getResourceModuleParser();
    UserAgent ua = parser.parse(anyUserAgentString);
    if (ua.getKnownFragments().contains(KnownFragments.GT_P1000M)) {
        System.out.println("Seems to be a Galaxy Tab GT-P1000.");
    } else if (ua.getKnownFragments().contains(KnownFragments.IPAD)) {
        System.out.println("Seems to be an iPad.");
    } else if (ua.getKnownFragments().contains(KnownFragments.IPHONE)) {
        System.out.println("Seems to be an iPhone.");
    }
    

    如果此功能可以帮助您,请参与。此功能将在https://github.com/before/uadetector/issues/20 上讨论。非常感谢任何反馈或帮助。

    (我是UADetector的作者。)

    【讨论】:

    • 感谢您的评论。为什么不从用户代理字符串中获取呢?
    • 因为它取决于设备和/或软件生产商。 HTTP 标头中的 User-Agent 标准化程度很低,每个生产者实现它都有点不同。这就是存在这种工具的原因之一。更多关于 User-Agent 字符串格式的信息可以在*.com/questions/2601372/… 下获得。