• About Us
  • Blog
  • Basket
  • Account
  • Sign In
  •  

Java API

What's Covered

51Degrees device detector returns all detection results as a string. This tutorial demonstrates how to return results for the IsMobile property value as a boolean.

Code and Explanation

Getting started example of using 51Degrees device detection. The example shows how to:

  1. Instantiate 51Degrees detection provider
          provider = new Provider(StreamFactory.create(
          Shared.getLitePatternV32(), false));
      
  2. Pass in a single HTTP User-Agent header
          Match match = provider.match(userAgent);
      
  3. Extract the value of the IsMobile property as boolean
          match.getValues("IsMobile").toBool();
      

Full Source File
    // Device detection provider which takes User-Agents and returns matches.
    protected final Provider provider;
    
    // User-Agent string of a iPhone mobile device.
    protected final String mobileUserAgent = "Mozilla/5.0 (iPhone; CPU iPhone "
            + "OS 7_1 like Mac OS X) AppleWebKit/537.51.2 (KHTML, like Gecko) "
            + "Version/7.0 Mobile/11D167 Safari/9537.53";
    
    // User-Agent string of Firefox Web browser of version 41 used on desktop.
    protected final String desktopUserAgent = "Mozilla/5.0 (Windows NT 6.3; " +
            "WOW64; rv:41.0) Gecko/20100101 Firefox/41.0";
    
    // User-Agent string of a MediaHub device.
    protected final String mediaHubUserAgent = "Mozilla/5.0 (Linux; Android 4.4"
            + ".2; X7 Quad Core Build/KOT49H) AppleWebKit/537.36 (KHTML, like "
            + "Gecko) Version/4.0 Chrome/30.0.0.0 Safari/537.36";
    
    /**
     * Initialises the device detection Provider with the included Lite data
     * file. For more data see: 
     * <a href="https://51degrees.com/compare-data-options">compare data options
     * </a>
     * 
     * @throws IOException can be thrown if there is a problem reading from the 
     * provided data file.
     */
    public StronglyTypedValues() throws IOException {
        provider = new Provider(StreamFactory.create(
                Shared.getLitePatternV32(), false));
    }

    /**
     * Matches provided User-Agent string and returns the IsMobile property 
     * value as boolean.
     * Detection initiated by invoking {@link Provider#match(java.lang.String)}.
     * Detection results are then stored in the {@link Match} object and can be 
     * accessed using the {@code Match.getValues("PropertyName")} method.
     * 
     * @param userAgent HTTP User-Agent string.
     * @return True if the User-Agent is mobile, False otherwise.
     * @throws IOException if there is a problem accessing the data file. 
     */
    public boolean isMobile(String userAgent) throws IOException {
        Match match = provider.match(userAgent);
        return match.getValues("IsMobile").toBool();
    }
    
    /**
     * Main entry point for this example. For each of the User-Agents defined 
     * in this class: 
     * <ol> 
     * <li>invokes {@link #isMobile(java.lang.String) } method; and
     * <li>prints output depending on the boolean value returned by the 
     * {@code isMobile} method.
     * </ol>
     * 
     * @param args command line arguments, not used.
     * @throws IOException if there is a problem accessing the data file. 
     */
     public static void main(String[] args) throws IOException {
        System.out.println("Starting GettingStartedStronglyTyped example.");
        StronglyTypedValues gs = new StronglyTypedValues();
        try {
            System.out.println("User-Agent: "+gs.mobileUserAgent);
            if(gs.isMobile(gs.mobileUserAgent)) {
                System.out.println("Mobile");
            } else {
                System.out.println("Non-Mobile");
            }
            System.out.println("User-Agent: "+gs.desktopUserAgent);
            if(gs.isMobile(gs.desktopUserAgent)) {
                System.out.println("Mobile");
            } else {
                System.out.println("Non-Mobile");
            }
            System.out.println("User-Agent: "+gs.mediaHubUserAgent);
            if(gs.isMobile(gs.mediaHubUserAgent)) {
                System.out.println("Mobile");
            } else {
                System.out.println("Non-Mobile");
            }
        } finally {
            gs.close();
        }
    }
     
     /**
     * Closes the {@link fiftyone.mobile.detection.Dataset} by releasing data 
     * file readers and freeing the data file from locks. This method should 
     * only be used when the {@code Dataset} is no longer required, i.e. when 
     * device detection functionality is no longer required, or the data file 
     * needs to be freed.
     * 
     * @throws IOException if there is a problem accessing the data file.
     */
    @Override
    public void close() throws IOException {
        provider.dataSet.close();
    }

Full Source File

Summary

In this tutorial you have seen how to use the detector to retrieve the IsMobile property for a pre-defined User-Agent string. It sets a boolean value to true or false from the original string value of "True" or "False", making if statements simpler to test.