Получить имя устройства 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()
Пробовал эти библиотеки, но ничего не работало в соответствии с моими ожиданиями и давало абсолютно неправильные имена.
Поэтому я сам создал эту библиотеку, используя те же данные. Вот ссылка
Чтобы использовать эту библиотеку, просто добавьте ее для реализации
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
λ