Frage

Ich möchte wissen, ob es einen Weg gibt, das Handy-Modell programmatisch in Android zu lesen.

Ich möchte eine Zeichenfolge wie HTC Dream bekommen, Milestone, Saphir oder was auch immer ...

War es hilfreich?

Lösung

Auf vielen gängigen Geräten der Markt Name des Geräts ist nicht verfügbar. Zum Beispiel auf dem Samsung Galaxy S6 der Wert Build.MODEL könnte "SM-G920F", "SM-G920I" oder "SM-G920W8" sein.

Ich habe eine kleine Bibliothek, die den Markt (verbraucherfreundlich) Name eines Geräts erhält. Es erhält den richtigen Namen für über 10.000 Geräte und wird ständig aktualisiert. Wenn Sie meine Bibliothek verwenden möchten, klicken Sie auf den unten stehenden Link:

AndroidDeviceNames Bibliothek auf Github


Wenn Sie nicht die Bibliothek oben verwenden wollen, dann ist dies die beste Lösung, die ein verbraucherfreundliche Gerätenamen für immer:

/** 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();
}

Beispiel von meinem Verizon HTC One M8:

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

Ergebnis:

  

HTC6525LVW

     

HTC One (M8)

Andere Tipps

ich den folgenden Code verwenden, um die vollständigen Gerätenamen zu erhalten. Es wird Modell und Hersteller Strings und verkettet sie, es sei denn Modell Zeichenfolge bereits den Namen des Herstellers enthält (auf einigen Telefonen es tut):

public String getDeviceName() {
    String manufacturer = Build.MANUFACTURER;
    String model = Build.MODEL;
    if (model.toLowerCase().startsWith(manufacturer.toLowerCase())) {
        return capitalize(model);
    } else {
        return capitalize(manufacturer) + " " + model;
    }
}


private String capitalize(String s) {
    if (s == null || s.length() == 0) {
        return "";
    }
    char first = s.charAt(0);
    if (Character.isUpperCase(first)) {
        return s;
    } else {
        return Character.toUpperCase(first) + s.substring(1);
    }
} 

Hier sind ein paar Beispiele von Gerätenamen ich von den Benutzern bekommen:

  

Samsung GT-S5830L
  Motorola MB860
  Sony Ericsson LT18i
  LGE LG-P500
  HTC Desire V
  HTC Wildfire S 510e
  ...

Eigentlich ist das nicht 100% richtig. Das kann Ihnen Model (irgendwann Zahlen).
Werden Sie den Hersteller des Telefons (HTC Teil Ihrer Anfrage) erhalten:

 Build.MANUFACTURER

Für einen Produktnamen:

 Build.PRODUCT

Für wen, die hier für die vollständige Liste der Eigenschaften von Build sucht, ist ein Beispiel für das Sony Z1 Compact:

Build.BOARD = MSM8974
Build.BOOTLOADER = s1
Build.BRAND = Sony
Build.CPU_ABI = armeabi-v7a
Build.CPU_ABI2 = armeabi
Build.DEVICE = D5503
Build.DISPLAY = 14.6.A.1.236
Build.FINGERPRINT = Sony/D5503/D5503:5.1.1/14.6.A.1.236/2031203XXX:user/release-keys
Build.HARDWARE = qcom
Build.HOST = BuildHost
Build.ID = 14.6.A.1.236
Build.IS_DEBUGGABLE = false
Build.MANUFACTURER = Sony
Build.MODEL = D5503
Build.PRODUCT = D5503
Build.RADIO = unknown
Build.SERIAL = CB5A1YGVMT
Build.SUPPORTED_32_BIT_ABIS = [Ljava.lang.String;@3dd90541
Build.SUPPORTED_64_BIT_ABIS = [Ljava.lang.String;@1da4fc3
Build.SUPPORTED_ABIS = [Ljava.lang.String;@525f635
Build.TAGS = release-keys
Build.TIME = 144792559XXXX
Build.TYPE = user
Build.UNKNOWN = unknown
Build.USER = BuildUser

Sie können ganz einfach diese Eigenschaften für Ihr Gerät im Debug-Modus Liste mit „Ausdruck auswerten“ Dialog Kotlin mit:

android.os.Build::class.java.fields.map { "Build.${it.name} = ${it.get(it.name)}"}.joinToString("\n")
String deviceName = android.os.Build.MODEL; // returns model name 

String deviceManufacturer = android.os.Build.MANUFACTURER; // returns manufacturer
  

Verwenden Sie folgende Methode bekommen Modell & Hersteller programmatisch

  public String getDeviceName() {
        String manufacturer = Build.MANUFACTURER;
        String model = Build.MODEL;
        if (model.toLowerCase().startsWith(manufacturer.toLowerCase())) {
            return capitalize(model);
        } else {
            return capitalize(manufacturer) + " " + model;
        }
    }


    private String capitalize(String s) {
    if (s == null || s.length() == 0) {
        return "";
    }
    char first = s.charAt(0);
    if (Character.isUpperCase(first)) {
        return s;
    } else {
        return Character.toUpperCase(first) + s.substring(1);
    }

Die folgenden Strings sind alle Einsatz, wenn Sie Hersteller abrufen möchten, Name des Geräts und / oder das Modell:

String manufacturer = Build.MANUFACTURER;
String brand        = Build.BRAND;
String product      = Build.PRODUCT;
String model        = Build.MODEL;

Anscheinend müssen Sie die Liste von Google verwenden unter https://support.google.com/googleplay/answer/1727131

Die APIs nicht zurück, was ich erwarten oder etwas in den Einstellungen. Für meine Motorola X ist das, was ich bekommen

   Build.MODEL = "XT1053"
   Build.BRAND = "motorola"
   Build.PRODUCT = "ghost"

Gehen zum oben „Geist“ genannt Karten zu Moto X. Scheinen, wie dies ein bisschen sein könnte einfacher ...

können Sie den folgenden Code für das Erhalten der Markennamen verwenden und Marke Modell des Geräts.

 String brand = Build.BRAND; // for getting BrandName
 String model = Build.MODEL; // for getting Model of the device

Hier ist mein Code, Hersteller zu erhalten, Markenname, Version und Unterstützung API-Ebene

String manufacturer = Build.MANUFACTURER;

String model = Build.MODEL + " " + android.os.Build.BRAND +" ("
           + android.os.Build.VERSION.RELEASE+")"
           + " API-" + android.os.Build.VERSION.SDK_INT;

if (model.startsWith(manufacturer)) {
    return capitalize(model);
} else {
    return capitalize(manufacturer) + " " + model;
}

Ausgang:

System.out: button press on device name = Lava Alfa L iris(5.0) API-21

Kotlin Version

val Name: String by lazy {
    val manufacturer = Build.MANUFACTURER
    val model = Build.MODEL
    if (model.toLowerCase().startsWith(manufacturer.toLowerCase())) {
        capitalize(model)
    } else {
        capitalize(manufacturer) + " " + model
    }
}

private fun capitalize(s: String?): String {
    if (s == null || s.isEmpty()) {
        return ""
    }
    val first = s[0]
    return if (Character.isUpperCase(first)) {
        s
    } else {
        Character.toUpperCase(first) + s.substring(1)
    }
}

Changed Idolons Code ein wenig. Dies wird also profitieren, wenn das Gerätemodell zu bekommen.

public static String getDeviceName() {
    final String manufacturer = Build.MANUFACTURER, model = Build.MODEL;
    return model.startsWith(manufacturer) ? capitalizePhrase(model) : capitalizePhrase(manufacturer) + " " + model;
}

private static String capitalizePhrase(String s) {
    if (s == null || s.length() == 0)
        return s;
    else {
        StringBuilder phrase = new StringBuilder();
        boolean next = true;
        for (char c : s.toCharArray()) {
            if (next && Character.isLetter(c) || Character.isWhitespace(c))
                next = Character.isWhitespace(c = Character.toUpperCase(c));
            phrase.append(c);
        }
        return phrase.toString();
    }
}

Sie können die Telefongerätenamen erhalten aus dem

  

Bluetoothadapter

Falls Telefon Bluetooth nicht unterstützt, dann muss man von den Gerätenamen konstruieren

  

android.os.Build Klasse

Hier ist der Beispielcode die Telefongerätenamen zu erhalten.

public String getPhoneDeviceName() {  
        String name=null;
        // Try to take Bluetooth name
        BluetoothAdapter adapter = BluetoothAdapter.getDefaultAdapter();
        if (adapter != null) {
            name = adapter.getName();
        }

        // If not found, use MODEL name
        if (TextUtils.isEmpty(name)) {
            String manufacturer = Build.MANUFACTURER;
            String model = Build.MODEL;
            if (model.startsWith(manufacturer)) {
                name = model;
            } else {
                name = manufacturer + " " + model;
            }
        } 
        return name;
}

können Sie versuchen, folgende Funktion und seine Rückkehr Ihren phoneModel Namen im String-Format.

public String phoneModel() {

    return Build.MODEL;
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top