Rishabh Ohri
Rishabh Ohri

Reputation: 1310

Detecting Device Type in a web application

We have a Java based application where in we want to detect the device type(mobile or desktop) for the device that is sending the request.

How is it possible?

Upvotes: 38

Views: 99409

Answers (8)

Werner Keil
Werner Keil

Reputation: 642

There's also http://openddr.mobi/, Open Source Device Detection for

  • Java
  • C#
  • VB.net

based on the W3C Device Description Repository.

OpenDDR is comparable to device repositories by 51Degrees, DeviceAtlas or ScientiaMobile/WURFL, but unlike those proprietary, closed source product, it's poen source and free to use.

Upvotes: 0

leonardoborges
leonardoborges

Reputation: 5629

You'll have to read the User-Agent header from the request and decide on that.

In vanilla servlet apps, a crude way of doing it is:

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
  }
}

Upvotes: 52

Paweł Walaszek
Paweł Walaszek

Reputation: 391

You can try to use Spring Mobile. There are convenient classes to solve that.

Device currentDevice = DeviceUtils.getCurrentDevice(servletRequest);
if(currentDevice.isMobile()) { /* Mobile */ }
if(currentDevice.isTablet()) { /* Tablet */ }
if(currentDevice.isNormal()) { /* Desktop */ }

Upvotes: 6

Zarwalski
Zarwalski

Reputation: 69

For Java 51Degrees has a free API on GitHub https://github.com/51Degrees/Java-Device-Detection, it is undated regularly and should be able to cover all the basic detentions that you need.

There is a tutorial how to use the API for Device Type detection here https://51degrees.com/Developers/Documentation/APIs/Java-V32/Tutorials/Web-App

There is also a free cloud version that offers the DeviceType Property (if you want more than just IsMobile) you can find the details on this on the 51Degrees website. You will need to "purchase" the free cloud through the website, but it does not ask for bank details and is completely free. You can also use JavaScript and other integration dependant on your requirements.

Disclosure: I work at 51Degrees.

Upvotes: 0

Karl Lin
Karl Lin

Reputation: 317

You can try this lib I think, yauaa can detect a user agent string is which device/software

https://github.com/nielsbasjes/yauaa

Upvotes: 3

nidhin
nidhin

Reputation: 6930

You can get device information by parsing http header

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

You should parse browserType to get device type

This may help

  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;
  }

Upvotes: 15

Jack
Jack

Reputation: 508

You could get a 3rd party software solution. There are plenty of Open Source ones out there. I've used 51Degrees.mobi's Java solution before now (and have also worked on their open source C solution). Follow that link and hit the download button. It's relatively easy to get up and running.

Upvotes: 5

jbindel
jbindel

Reputation: 5635

You can check the User-Agent HTTP header on the HttpServletRequest object.

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

Upvotes: 0

Related Questions