Получить имя устройства Android

Как получить имя устройства Android? Я использую HTC desire. Когда я подключил его через HTC Sync, программа отображает имя "HTC Smith". Я хотел бы получить это имя с помощью кода.

Как это возможно в Android?

Спасибо

16 ответов

Решение

Для того, чтобы получить имя устройства Android, вы должны добавить только одну строку кода:

android.os.Build.MODEL;

Найдено здесь: получение-android-device-name

Ответы вы можете посмотреть здесь. Получить модель телефона Android программно

public String getDeviceName() {
   String manufacturer = Build.MANUFACTURER;
   String model = Build.MODEL;
   if (model.startsWith(manufacturer)) {
      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);
    }
}

Я решил это, получив имя Bluetooth, но не из BluetoothAdapter (для этого нужно разрешение Bluetooth).

Вот код:

Settings.Secure.getString(getContentResolver(), "bluetooth_name");

Никаких дополнительных разрешений не требуется.

На многих популярных устройствах рыночное название устройства недоступно. Например, на Samsung Galaxy S6 значение Build.MODEL может быть "SM-G920F", "SM-G920I", или же "SM-G920W8",

Я создал небольшую библиотеку, которая получает рыночное (дружественное к потребителю) имя устройства. Он получает правильное имя для более чем 10000 устройств и постоянно обновляется. Если вы хотите использовать мою библиотеку, нажмите на ссылку ниже:

Библиотека AndroidDeviceNames на Github


Если вы не хотите использовать библиотеку, указанную выше, то это лучшее решение для получения удобного для пользователя имени устройства:

/** 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;
    String phrase = "";
    for (char c : arr) {
        if (capitalizeNext && Character.isLetter(c)) {
            phrase += Character.toUpperCase(c);
            capitalizeNext = false;
            continue;
        } else if (Character.isWhitespace(c)) {
            capitalizeNext = true;
        }
        phrase += c;
    }
    return phrase;
}

Пример из моего Verizon HTC One M8:

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

Результат:

HTC6525LVW

HTC One (M8)

Попытайся. Вы можете получить имя устройства через Bluetooth.

Надеюсь, это поможет вам

public String getPhoneName() {  
        BluetoothAdapter myDevice = BluetoothAdapter.getDefaultAdapter();
        String deviceName = myDevice.getName();     
        return deviceName;
    }

Ты можешь использовать:

Из Android-док:

MANUFACTURER :

String MANUFACTURER

Производитель продукта / оборудования.

MODEL :

String MODEL

Видимое конечному пользователю имя для конечного продукта.

DEVICE :

String DEVICE

Название промышленного образца.

Как пример:

String deviceName = android.os.Build.MANUFACTURER + " " + android.os.Build.MODEL;
//to add to textview
TextView textView = (TextView) findViewById(R.id.text_view);
textView.setText(deviceName);

Кроме того, в классе Build есть множество атрибутов, которые вы можете использовать, например:

  • os.android.Build.BOARD
  • os.android.Build.BRAND
  • os.android.Build.BOOTLOADER
  • os.android.Build.DISPLAY
  • os.android.Build.CPU_ABI
  • os.android.Build.PRODUCT
  • os.android.Build.HARDWARE
  • os.android.Build.ID

Также есть другие способы получить имя устройства без использования Build класс (через блютус).

Следующие работы для меня.

String deviceName = Settings.Global.getString (.getContentResolver (), Settings.Global.DEVICE_NAME);

Я не думаю, что это дубликат ответа. Приведенный выше документ говорит о настройке безопасности, для меня настройка безопасности дает ноль, если я использую настройку global, это работает. В любом случае спасибо.

универсальный способ получить определяемое пользователем имя устройства, работающее практически для всех устройств и не требующее каких-либо разрешений

      String userDeviceName = Settings.Global.getString(getContentResolver(), Settings.Global.DEVICE_NAME);
if(userDeviceName == null)
    userDeviceName = Settings.Secure.getString(getContentResolver(), "bluetooth_name");

Попробуйте этот код. Вы получаете имя устройства Android.

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

ОБНОВЛЕНИЕ Вы можете легко получить устройство из buildprop.

static String GetDeviceName() {
    Process p;
    String propvalue = "";
    try {
        p = new ProcessBuilder("/system/bin/getprop", "ro.semc.product.name").redirectErrorStream(true).start();
        BufferedReader br = new BufferedReader(new InputStreamReader(p.getInputStream()));
        String line;
        while ((line = br.readLine()) != null) {
            propvalue = line;
        }
        p.destroy();
    } catch (IOException e) {
        e.printStackTrace();
    }
    return propvalue;
}

Но имейте в виду, это не работает на некоторых устройствах.

Ответ @hbhakhra будет делать.

Если вас интересует подробное объяснение, полезно заглянуть в Документ определения совместимости Android. (3.2.2 Параметры сборки)

Ты найдешь:

УСТРОЙСТВО - значение, выбранное разработчиком устройства, содержащее имя разработки или кодовое имя, идентифицирующее конфигурацию аппаратных функций и промышленный дизайн устройства. Значение этого поля ДОЛЖНО быть закодировано как 7-битный ASCII и соответствовать регулярному выражению "^[a-zA-Z0-9_-]+$".

MODEL - значение, выбранное разработчиком устройства, содержащее имя устройства, известное конечному пользователю. Это ДОЛЖНО быть тем же именем, под которым устройство продается и продается конечным пользователям. Нет никаких требований к определенному формату этого поля, за исключением того, что оно НЕ ДОЛЖНО быть нулевым или пустой строкой ("").

ИЗГОТОВИТЕЛЬ - торговое наименование производителя оригинального оборудования (OEM) продукта. Нет никаких требований к определенному формату этого поля, за исключением того, что оно НЕ ДОЛЖНО быть нулевым или пустой строкой ("").

 static String getDeviceName() {
        try {
            Class systemPropertiesClass = Class.forName("android.os.SystemProperties");
            Method getMethod = systemPropertiesClass.getMethod("get", String.class);
            Object object = new Object();
            Object obj = getMethod.invoke(object, "ro.product.device");
            return (obj == null ? "" : (String) obj);
        } catch (Exception e) {
            e.printStackTrace();
            return "";
        }
    }

таким образом вы можете получить idol3.

Просто использовать

BluetoothAdapter.getDefaultAdapter().getName()

Пробовал эти библиотеки, но ничего не работало в соответствии с моими ожиданиями и давало абсолютно неправильные имена.

Поэтому я сам создал эту библиотеку, используя те же данные. Вот ссылка

AndroidPhoneNamesFinder

Чтобы использовать эту библиотеку, просто добавьте ее для реализации

      implementation 'com.github.aishik212:AndroidPhoneNamesFinder:v1.0.2'

Затем используйте следующий код котлина

      DeviceNameFinder.getPhoneValues(this, object : DeviceDetailsListener
{  
    override fun details(doQuery: DeviceDetailsModel?) 
    {  
        super.details(doQuery)  
        Log.d(TAG, "details: "+doQuery?.calculatedName)  
    }  
})

Это значения, которые вы получите от DeviceDetailsModel.

      val brand: String? #This is the brandName of the Device  
val commonName: String?, #This is the most common Name of the Device  
val codeName: String?,  #This is the codeName of the Device
val modelName: String?,  #This is the another uncommon Name of the Device
val calculatedName: String?, #This is the special name that this library tries to create from the above data.

Пример эмулятора Android -

      brand=Google 
commonName=Google Android Emulator 
codeName=generic_x86_arm 
modelName=sdk_gphone_x86 
calculatedName=Google Android Emulator

В среде Android GNU / Linux, например, оболочку UNIX на устройстве без черезполномочийTermux root, он доступен через /system/bin/getprop команда, тогда как значение каждого значения объясняется в Build.javaв Android (также в googlesource ):

      % /system/bin/getprop | fgrep ro.product | tail -3
[ro.product.manufacturer]: [Google]
[ro.product.model]: [Pixel 2 XL]
[ro.product.name]: [taimen]
% /system/bin/getprop ro.product.model
Pixel 2 XL
% /system/bin/getprop ro.product.model | tr ' ' _
Pixel_2_XL

Например, его можно установить как pane_title для status-right в tmux вот так:

tmux select-pane -T "$(getprop ro.product.model)"

Первый,

оболочка adb getprop >prop_list.txt

Второй,

найдите имя вашего устройства в prop_list.txt, чтобы получить имя реквизита, например, имя моего устройства ro.oppo.market.name

Окончательно,

adb shell getprop ro.oppo.market.name

D:\winusr\adbl

λ adb shell getprop ro.oppo.market.name

ОППО Р17

D:\winusr\adbl

λ

Другие вопросы по тегам