Domanda

Vorrei sapere se c'è un modo per la lettura del modello di telefono di programmazione in Android.

Vorrei ottenere una stringa come HTC Dream, Milestone, zaffiro o qualunque cosa ...

È stato utile?

Soluzione

Su molti dispositivi popolari il nome commerciale del dispositivo non è disponibile. Per esempio, sul Samsung Galaxy S6 potrebbe essere Build.MODEL il valore di "SM-G920F", "SM-G920I" o "SM-G920W8".

ho creato una piccola biblioteca che prende il nome di mercato (consumer friendly) di un dispositivo. Prende il nome corretto per oltre 10.000 dispositivi e viene costantemente aggiornato. Se si desidera utilizzare la mia libreria clicca sul link sottostante:

AndroidDeviceNames Biblioteca su Github


Se non si desidera utilizzare la libreria di cui sopra, allora questa è la soluzione migliore per ottenere un nome di dispositivo consumer friendly:

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

Esempio dal mio Verizon HTC One M8:

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

Risultato:

  

HTC6525LVW

     

HTC One (M8)

Altri suggerimenti

Io uso il seguente codice per ottenere il nome completo del dispositivo. Diventa modello e produttore corde e li concatena a meno che non stringa di modello contiene già il nome del produttore (su alcuni telefoni lo fa):

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

Ecco alcuni esempi di nomi di dispositivo che ho ricevuto da parte degli utenti:

  

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

In realtà questo non è corretta al 100%. Che si può dare Model (numeri o poi).
Sarà ottenere il produttore del telefono (HTC parte della vostra richiesta):

 Build.MANUFACTURER

Per il nome del prodotto:

 Build.PRODUCT

Per chi chi cerca per la lista completa delle proprietà di Build ecco un esempio per 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

Si può facilmente elencare queste proprietà per il vostro dispositivo in modalità di debug usando "valutare l'espressione" finestra di dialogo utilizzando Kotlin:

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
  

Utilizzare il metodo seguito per ottenere il modello e produttore a livello di codice

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

Le seguenti stringhe sono tutti d'uso quando si desidera recuperare produttore, nome del dispositivo, e / o il modello:

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

A quanto pare è necessario utilizzare l'elenco di Google a https://support.google.com/googleplay/answer/1727131

Le API non restituisce nulla mi aspetto o nulla in Impostazioni. Per il mio Motorola X questo è ciò che ottengo

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

Andare alla pagina cui sopra mappe "fantasma" a Moto X. Sembra che questo potrebbe essere un po ' semplice ...

è possibile utilizzare il seguente codice per ottenere il marchio e marca modello del dispositivo.

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

Ecco il mio codice, Per ottenere Costruttore, marca, versione del sistema operativo e il supporto API livello

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

Output:

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

versione Kotlin

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

Modificato il codice Idolons un po '. Questo metterà a frutto le parole quando ricevendo il modello del dispositivo.

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

È possibile ottenere il nome del dispositivo telefono dal

  

BluetoothAdapter

Nel caso in cui il telefono non supporta il Bluetooth, quindi si deve costruire il nome del dispositivo da

  

android.os.Build classe

Ecco il codice di esempio per ottenere il nome del dispositivo telefono.

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

Si può provare seguente funzione e il suo ritorno il vostro nome phoneModel in formato stringa.

public String phoneModel() {

    return Build.MODEL;
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top