سؤال

أود أن أعرف ما إذا كانت هناك طريقة لقراءة نموذج الهاتف برمجياً في Android.

أود الحصول على سلسلة مثل حلم HTC أو معلم أو الياقوت أو أي شيء ...

هل كانت مفيدة؟

المحلول

في العديد من الأجهزة الشائعة ، لا يتوفر اسم السوق للجهاز. على سبيل المثال ، على Samsung Galaxy S6 قيمة Build.MODEL ممكن ان يكون "SM-G920F", "SM-G920I", ، أو "SM-G920W8".

لقد قمت بإنشاء مكتبة صغيرة تحصل على اسم السوق (صديق للمستهلك) للجهاز. يحصل على الاسم الصحيح ل أكثر من 10000 الأجهزة ويتم تحديثها باستمرار. إذا كنت ترغب في استخدام مكتبتي ، انقر على الرابط أدناه:

مكتبة Androiddevicenames على جيثب


إذا كنت لا ترغب في استخدام المكتبة أعلاه ، فهذا هو الحل الأفضل للحصول على اسم جهاز صديق للمستهلك:

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

مثال من بلدي 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)

نصائح أخرى

يمكنني استخدام الكود التالي للحصول على اسم الجهاز الكامل. إنه يحصل على سلاسل النموذج والشركة المصنعة وتسلسلها إلا إذا كانت سلسلة النموذج تحتوي بالفعل على اسم الشركة المصنعة (على بعض الهواتف التي تقوم بها):

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

 

فيما يلي بعض الأمثلة على أسماء الأجهزة التي حصلت عليها من المستخدمين:

Samsung GT-S5830L
موتورولا MB860
Sony Ericsson LT18I
LGE LG-P500
HTC Desire v
HTC Wildfire S A510E

نعم: Build.Model.

في الواقع هذا ليس صحيح 100 ٪. يمكن أن يمنحك النموذج (أرقام في وقت ما).
سوف تحصل على الشركة المصنعة للهاتف (جزء HTC من طلبك):

 Build.MANUFACTURER

لاسم المنتج:

 Build.PRODUCT

لمن يبحث عن قائمة كاملة من خصائص Build فيما يلي مثال على 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

يمكنك بسهولة سرد هذه الخصائص لجهازك في وضع التصحيح باستخدام مربع الحوار "تقييم التعبير" باستخدام 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

استخدم الطريقة التالية للحصول على النموذج والمصنع برمجيًا

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

الأوتار التالية كلها تستخدم عندما تريد استرداد الشركة المصنعة واسم الجهاز و/أو النموذج:

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

يبدو أنك تحتاج إلى استخدام القائمة من Google في https://support.google.com/googleplay/answer/1727131

لا تعيد واجهات برمجة التطبيقات أي شيء أتوقعه أو أي شيء في الإعدادات. بالنسبة إلى Motorola X هذا ما أحصل عليه

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

الذهاب الى صفحة المذكورة أعلاه "Ghost" Maps to Moto X. يبدو أن هذا قد يكون أبسط ...

يمكنك استخدام الكود التالي للحصول على اسم العلامة التجارية ونموذج العلامة التجارية للجهاز.

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

فيما يلي رمز بلدي ، للحصول على الشركة المصنعة ، اسم العلامة التجارية ، إصدار نظام التشغيل ومستوى API

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

انتاج:

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

نسخة كوتلين

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

تم تغيير كود الأوثان قليلا. سيستفيد هذا من الكلمات عند الحصول على نموذج الجهاز.

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

يمكنك الحصول على اسم جهاز الهاتف من

بلوتوثادابتر

في حالة عدم دعم الهاتف إلى Bluetooth ، يجب عليك إنشاء اسم الجهاز من

Android.OS.Build Class

فيما يلي نموذج رمز للحصول على اسم جهاز الهاتف.

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

يمكنك محاولة اتباع الوظيفة وإرجاع اسم phonemodel الخاص بك بتنسيق السلسلة.

public String phoneModel() {

    return Build.MODEL;
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top