Search code examples
androidmodelandroid-hardware

Get Android Phone Model programmatically , How to get Device name and model programmatically in android?


I would like to know if there is a way for reading the Phone Model programmatically in Android.

I would like to get a string like HTC Dream, Milestone, Sapphire or whatever...


Solution

  • On many popular devices the market name of the device is not available. For example, on the Samsung Galaxy S6 the value of Build.MODEL could be "SM-G920F", "SM-G920I", or "SM-G920W8".

    I created a small library that gets the market (consumer friendly) name of a device. It gets the correct name for over 10,000 devices and is constantly updated. If you wish to use my library click the link below:

    AndroidDeviceNames Library on Github


    If you do not want to use the library above, then this is the best solution for getting a consumer friendly device name:

    /** Returns the consumer friendly device name */
    public static String getDeviceName() {
      String manufacturer = Build.MANUFACTURER;
      String model = Build.MODEL;
      if (model.startsWith(manufacturer)) {
        return capitalize(model);
      }
      return capitalize(manufacturer) + " " + model;
    }
    
    private static String capitalize(String str) {
      if (TextUtils.isEmpty(str)) {
        return str;
      }
      char[] arr = str.toCharArray();
      boolean capitalizeNext = true;
    
      StringBuilder phrase = new StringBuilder();
      for (char c : arr) {
        if (capitalizeNext && Character.isLetter(c)) {
          phrase.append(Character.toUpperCase(c));
          capitalizeNext = false;
          continue;
        } else if (Character.isWhitespace(c)) {
          capitalizeNext = true;
        }
        phrase.append(c);
      }
    
      return phrase.toString();
    }
    

    Example from my Verizon HTC One M8:

    // using method from above
    System.out.println(getDeviceName());
    // Using https://github.com/jaredrummler/AndroidDeviceNames
    System.out.println(DeviceName.getDeviceName());
    

    Result:

    HTC6525LVW

    HTC One (M8)