34

我们有一个基于 Java 的应用程序,我们希望在其中检测发送请求的设备的设备类型(移动设备或桌面设备)。

这怎么可能?

4

8 回答 8

48

您必须User-Agent从请求中读取标头并做出决定。

在 vanilla servlet 应用程序中,一种粗略的做法是:

public void doGet(HttpServletRequest request,
                HttpServletResponse response) throws ServletException, IOException {
  if(request.getHeader("User-Agent").contains("Mobi")) {
    //you're in mobile land
  } else {
    //nope, this is probably a desktop
  }
}
于 2011-12-15T04:48:38.620 回答
15

可以通过解析http header获取设备信息

String browserType = request.getHeader("User-Agent");

您应该解析 browserType 以获取设备类型

这可能会有所帮助

  public String  getBrowserInfo( String Information )
  {
    String browsername = "";
    String browserversion = "";
    String browser = Information;
    if (browser.contains("MSIE"))
    {
      String subsString = browser.substring(browser.indexOf("MSIE"));
      String info[] = (subsString.split(";")[0]).split(" ");
      browsername = info[0];
      browserversion = info[1];
    } else if (browser.contains("Firefox"))
    {

      String subsString = browser.substring(browser.indexOf("Firefox"));
      String info[] = (subsString.split(" ")[0]).split("/");
      browsername = info[0];
      browserversion = info[1];
    } else if (browser.contains("Chrome"))
    {

      String subsString = browser.substring(browser.indexOf("Chrome"));
      String info[] = (subsString.split(" ")[0]).split("/");
      browsername = info[0];
      browserversion = info[1];
    } else if (browser.contains("Opera"))
    {

      String subsString = browser.substring(browser.indexOf("Opera"));
      String info[] = (subsString.split(" ")[0]).split("/");
      browsername = info[0];
      browserversion = info[1];
    } else if (browser.contains("Safari"))
    {

      String subsString = browser.substring(browser.indexOf("Safari"));
      String info[] = (subsString.split(" ")[0]).split("/");
      browsername = info[0];
      browserversion = info[1];
    }
    return browsername + "-" + browserversion;
  }
于 2011-12-15T04:46:02.890 回答
5

您可以获得第 3 方软件解决方案。那里有很多开源的。我以前使用过51Degrees.mobi 的 Java 解决方案(并且还研究过他们的开源 C 解决方案)。按照该链接并点击下载按钮。启动和运行相对容易。

于 2012-09-17T09:56:36.127 回答
5

您可以尝试使用Spring Mobile。有方便的课程来解决这个问题。

Device currentDevice = DeviceUtils.getCurrentDevice(servletRequest);
if(currentDevice.isMobile()) { /* Mobile */ }
if(currentDevice.isTablet()) { /* Tablet */ }
if(currentDevice.isNormal()) { /* Desktop */ }
于 2018-01-14T00:20:02.953 回答
3

你可以试试这个库,我认为,yauaa 可以检测用户代理字符串是哪个设备/软件

https://github.com/nielsbasjes/yauaa

于 2017-04-10T10:13:29.003 回答
0

您可以检查对象上的User-Agent HTTP 标头HttpServletRequest

参考:http ://www.w3.org/Protocols/HTTP/HTRQ_Headers.html#user-agent

于 2011-12-15T04:45:54.247 回答
0

对于 Java 51Degrees 在 GitHub https://github.com/51Degrees/Java-Device-Detection上有一个免费的 API ,它定期没有日期,应该能够涵盖您需要的所有基本保留。

这里有一个如何使用 API 进行设备类型检测的教程https://51degrees.com/Developers/Documentation/APIs/Java-V32/Tutorials/Web-App

还有一个提供 DeviceType 属性的免费云版本(如果您想要的不仅仅是 IsMobile),您可以在 51Degrees 网站上找到有关此内容的详细信息。您需要通过网站“购买”免费云,但它不要求提供银行详细信息,并且完全免费。您还可以根据您的要求使用 JavaScript 和其他集成。

披露:我在 51Degrees 工作。

于 2017-04-12T09:34:02.030 回答
0

还有http://openddr.mobi/,开源设备检测

  • 爪哇
  • C#
  • VB.net

基于W3C 设备描述存储库

OpenDDR 可与 51Degrees、DeviceAtlas 或 ScientiaMobile/WURFL 提供的设备存储库相媲美,但与那些专有的闭源产品不同,它是开源且免费使用的。

于 2020-10-27T21:55:40.063 回答