Holen Sie sich Android Phone Model programmgesteuert

355

Ich würde gerne wissen, ob es eine Möglichkeit gibt, das Telefonmodell programmgesteuert in Android zu lesen.

Ich hätte gerne eine Saite wie HTC Dream, Milestone, Sapphire oder was auch immer ...

Andrea Baccega
quelle

Antworten:

328

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

Ich habe eine kleine Bibliothek erstellt, die den Marktnamen (verbraucherfreundlich) eines Geräts erhält. Es erhält den korrekten Namen für über 10.000 Geräte und wird ständig aktualisiert. Wenn Sie meine Bibliothek nutzen möchten, klicken Sie auf den folgenden Link:

AndroidDeviceNames Library auf Github


Wenn Sie die oben genannte Bibliothek nicht verwenden möchten, ist dies die beste Lösung, um einen verbraucherfreundlichen Gerätenamen zu erhalten:

/** 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)

Jared Rummler
quelle
19
Danke Jared. Ich brauchte das heute aber für Xamarin.Android also übersetzte deine Datei in C #. Wenn jemand anderes es braucht, finden Sie es hier. gist.github.com/mohibsheth/5e1b361ae49c257b8caf
Mohib Sheth
1
Gibt es eine Möglichkeit, den "menschlich lesbaren" Gerätenamen wie "Xperia Z3" oder "Galaxy S3" ohne diese Geräteklasse zu erhalten? Ich möchte keine statische Liste aller Geräte verwenden, um sicherzustellen, dass auch alle zukünftigen Geräte unterstützt werden.
Radon8472
1
@ Radon8472 Haben Sie die oben genannte statische Factory-Methode ausprobiert getDeviceName()? Wenn das nicht zu den gewünschten Ergebnissen führt, gibt es keine bessere Lösung, die mir bekannt ist.
Jared Rummler
@Jared: Ich habe bereits einen Gerätenamen wie die Ergebnisse von 'getDeviceName ()', aber ich möchte den Namen anzeigen, den Endbenutzer aus ihren praktischen Geschäften kennen :(
Radon8472
1
Hallo zusammen, ich habe ein Winkelmodul für dieses namens ng-fone unter Verwendung der Liste von Jared geschrieben. Der folgende Link enthält Anweisungen zur Verwendung. tphangout.com/?p=83
Raja Yogan
427

Ich verwende den folgenden Code, um den vollständigen Gerätenamen zu erhalten. Es werden Modell- und Herstellerzeichenfolgen abgerufen und verkettet, es sei denn, die Modellzeichenfolge enthält bereits den Herstellernamen (auf einigen Telefonen ist dies der Fall):

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 einige Beispiele für Gerätenamen, die ich von den Benutzern erhalten habe:

Samsung GT-S5830L
Motorola MB860
Sony Ericsson LT18i
LGE LG-P500
HTC Wunsch V
HTC Wildfire S A510e

Idolon
quelle
Es gibt irgendwo eine Liste, die alle möglichen Antworten enthält, die Sie aus dem Telefon bekommen können. Angenommen, Sie müssen einen Benutzer darüber informieren, wie etwas auf einem bestimmten Telefontyp installiert oder an ein bestimmtes Modell verkauft werden soll.
Evilfish
7
@evilfish Versuchen Sie diese Liste von Google: support.google.com/googleplay/answer/1727131
Idolon
Funktioniert perfekt auf der Uhr, da ich es für Android Wear brauchte.
Wahib Ul Haq
116

Ja: Build.MODEL .

Mirko N.
quelle
Es gibt mir immer "Android SDK für x86 gebaut", wenn ich es mit Emulator versuche. Der Modellname kann nicht speziell im Emulator mit einem anderen Modellnamen ausgeführt werden.
Swathi
Ja, das ist das Modell des Emulators. Beachten Sie, dass für den internen Speicher sogar ein ähnlicher Name verwendet wird.
Cool Guy CG
34

Eigentlich ist das nicht 100% richtig. Das kann Ihnen Modell geben (manchmal Zahlen).
Erhalten Sie den Hersteller des Telefons (HTC-Teil Ihrer Anfrage):

 Build.MANUFACTURER

Für einen Produktnamen:

 Build.PRODUCT
Falcon165o
quelle
8
Ich habe festgestellt, dass String name = Build.MANUFACTURER + " - " + Build.MODELdies die nützlichste Kombination ist. Build.PRODUCT verwendet manchmal einen unerwarteten Namen. Auf dem Galaxy Nexus wird beispielsweise "takgu" zurückgegeben. Build.MODEL hingegen ist der benutzerbezogene Wert, der unter Einstellungen-> Über Telefon-> Modellnummer angezeigt wird.
Mike Ortiz
1
Vieles hängt vom Hersteller ab; HTC-Geräte (Evo 4G, 4G LTE, 3D und Slide) verwenden das, was ich oben angegeben habe.
Falcon165o
AXON 7 mini ist in der Liste. Doch wo ist AXON in normaler Größe?
Serge
30

Für wen, die nach einer vollständigen Liste der Eigenschaften von Buildhier suchen , ist ein Beispiel für 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 diese Eigenschaften für Ihr Gerät im Debug-Modus einfach auflisten, indem Sie den Dialog "Ausdruck auswerten" mit kotlin verwenden:

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

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

Verwenden Sie die folgende Methode, um Modell und Hersteller programmgesteuert abzurufen

  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);
    }
Ajay Pandya
quelle
8

Die folgenden Zeichenfolgen sind alle nützlich, wenn Sie den Hersteller, den Namen des Geräts und / oder das Modell abrufen möchten:

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

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

Die APIs geben nichts zurück, was ich erwarte oder was in den Einstellungen steht. Für mein Motorola X bekomme ich das

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

Gehen Sie zu der oben genannten Seite "Ghost" -Karten zu Moto X. Scheint, als könnte dies ein bisschen einfacher sein ...

Edwin Evans
quelle
AXON 7 mini ist in der Liste. Doch wo ist der normal große AXON?
Serge
7

Mit dem folgenden Code können Sie den Markennamen und das Markenmodell des Geräts abrufen.

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

Hier ist mein Code, um Hersteller, Markenname, Os-Version und Support-API-Level zu erhalten

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

Ausgabe:

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

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)
    }
}
Francisco Pereira
quelle
Ich habe eine kürzere Version mit capitalize Kotlins stackoverflow.com/a/59158474/1446466
Sean
1

Der Idolons-Code wurde ein wenig geändert. Dadurch werden Wörter beim Abrufen des Gerätemodells großgeschrieben.

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();
    }
}
Xjasz
quelle
1

Kotlin Kurzversion:

import android.os.Build.MANUFACTURER
import android.os.Build.MODEL

fun getDeviceName(): String =
    (if (MODEL.startsWith(MANUFACTURER, ignoreCase = true)) {
        MODEL
    } else {
        "$MANUFACTURER $MODEL"
    }).capitalize()
Sean
quelle
1
Build.DEVICE // The name of the industrial design.

Build.DEVICE Gibt den für einige Geräte lesbaren Namen für einige Geräte anBuild.MODEL

Build.DEVICE = OnePlus6
Build.MANUFACTURER = OnePlus
Build.MODEL = ONEPLUS A6003
Majurageerthan
quelle
0

Sie können den Namen des Telefongeräts von abrufen

BluetoothAdapter

Wenn das Telefon Bluetooth nicht unterstützt, müssen Sie den Gerätenamen aus erstellen

android.os.Build Klasse

Hier ist der Beispielcode, um den Namen des Telefongeräts abzurufen.

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;
}
Sridhar Nalam
quelle
2
VIELEN DANK!! Beachten Sie, dass die Berechtigung BLUETOOTH erforderlich ist, damit dies funktioniert.
user2923322
-4

Sie können die folgende Funktion ausprobieren und Ihren phoneModel-Namen im Zeichenfolgenformat zurückgeben.

public String phoneModel() {

    return Build.MODEL;
}
Quantum4U
quelle
Diese Antwort verbessert keine der anderen Antworten, die dasselbe sagten und vor einem Jahr hier gelassen wurden.
Lynn Crumbling