एंड्रॉइड फोन मॉडल को प्रोग्रामिक रूप से प्राप्त करें


355

मैं जानना चाहूंगा कि क्या एंड्रॉइड में फोन मॉडल को प्रोग्रामेटिक रूप से पढ़ने का कोई तरीका है।

मैं HTC ड्रीम, माइलस्टोन, नीलम या जो भी हो ...

जवाबों:


327

कई लोकप्रिय उपकरणों पर डिवाइस का बाजार नाम उपलब्ध नहीं है। उदाहरण के लिए, सैमसंग गैलेक्सी एस 6 पर , या , का मूल्य Build.MODELहो सकता है ।"SM-G920F""SM-G920I""SM-G920W8"

मैंने एक छोटी सी लाइब्रेरी बनाई जो डिवाइस के बाजार (उपभोक्ता के अनुकूल) नाम प्राप्त करती है। यह 10,000 से अधिक उपकरणों के लिए सही नाम प्राप्त करता है और लगातार अपडेट किया जाता है। यदि आप मेरे पुस्तकालय का उपयोग करना चाहते हैं तो नीचे दिए गए लिंक पर क्लिक करें:

Github पर 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 एचटीसी वन M8 से उदाहरण:

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

परिणाम:

HTC6525LVW

एचटीसी वन (M8)


19
धन्यवाद जेरेड। मुझे आज इसकी आवश्यकता थी लेकिन Xamarin के लिए। और थायराइड ने आपकी फ़ाइल का C # में अनुवाद किया। अगर किसी और को इसकी आवश्यकता है, तो आप इसे यहां पा सकते हैं। gist.github.com/mohibsheth/5e1b361ae49c257b8caf
मोहिब शेठ

1
क्या इस उपकरण वर्ग के बिना "एक्सपीरिया जेड 3" या "गैलेक्सी एस 3" जैसे "मानव पठनीय" डेसिनेम पाने का एक तरीका है? मैं यह सुनिश्चित करने के लिए सभी उपकरणों की एक स्थिर सूची का उपयोग करना पसंद नहीं करता, यहां तक ​​कि भविष्य के सभी उपकरणों का भी समर्थन किया जाएगा।
Radon8472

1
@ Radon8472 क्या आपने नाम से ऊपर स्थिर कारखाना विधि की कोशिश की है getDeviceName()? यदि वह आपको वह परिणाम नहीं देता है जो आप देख रहे हैं तो बेहतर समाधान नहीं है जो मुझे पता है।
जेरेड रुम्मलर

@ जारेड: मेरे पास पहले से ही 'getDeviceName ()' के परिणाम की तरह एक विचलन है, लेकिन मुझे उनके काम के स्टोर से जाने जाने वाले नाम को प्रदर्शित करना पसंद है :(
Radon8472

1
हाय सब मैंने इस के लिए एक कोणीय मॉड्यूल लिखा, जिसे जेरेड से सूची का उपयोग करके एनजी-फ़ोन कहा जाता है। नीचे दिए गए लिंक का उपयोग करने के तरीके के बारे में निर्देश दिए गए हैं। tphangout.com/?p=83
राजा

427

पूर्ण डिवाइस नाम प्राप्त करने के लिए मैं निम्नलिखित कोड का उपयोग करता हूं। यह मॉडल और निर्माता तार प्राप्त करता है और उन्हें तब तक समेटता है जब तक कि मॉडल स्ट्रिंग में पहले से ही निर्माता का नाम (कुछ फोन पर ऐसा नहीं होता है):

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
Motorola MB860
Sony Ericsson LT18i
LGE LG-P500
एचटीसी डिजायर वी
एचटीसी वाइल्डफायर एस A510e


इसमें कहीं एक सूची है जो सभी संभावित उत्तर को पकड़ती है जिससे आप फोन से बाहर निकल सकते हैं यदि आपको किसी विशिष्ट फ़ोन प्रकार पर कुछ स्थापित करने या किसी विशिष्ट मॉडल को बेचने के लिए किसी उपयोगकर्ता को पुनर्निर्देशित करने की आवश्यकता है, तो कहें।
बर्डफिश

7
@evilfish Google से इस सूची को आज़माएं: support.google.com/googleplay/answer/1727131
Idolon

पूरी तरह से घड़ी पर काम करता है क्योंकि मुझे Android Wear के लिए इसकी आवश्यकता थी।
वाहिब उल हक

116

हां: Build.MODEL


यह हमेशा मुझे "x86 के लिए बनाया गया एंड्रॉइड एसडीके" देता है जब मैं इसे एमुलेटर के साथ आज़माता हूं। विशेष रूप से विभिन्न मॉडल के नाम से चलने वाले एमुलेटर में मॉडल नाम प्राप्त करने में सक्षम नहीं हो सकते।
स्वाति

हां, यह एमुलेटर का मॉडल है। ध्यान दें कि यह आंतरिक भंडारण के लिए समान नाम का भी उपयोग करता है।
कूल गाइ सीजी

34

वास्तव में यह 100% सही नहीं है। वह आपको मॉडल (कुछ समय संख्या) दे सकता है।
आपको फ़ोन का निर्माता (आपके अनुरोध का HTC भाग) मिलेगा:

 Build.MANUFACTURER

एक उत्पाद के नाम के लिए:

 Build.PRODUCT

8
मैंने पाया है कि String name = Build.MANUFACTURER + " - " + Build.MODELसबसे उपयोगी संयोजन होना चाहिए। Build.PRODUCT कभी-कभी एक अप्रत्याशित नाम का उपयोग करता है। उदाहरण के लिए, गैलेक्सी नेक्सस पर, यह "टेकगु" लौटाता है। दूसरी ओर Build.MODEL, सेटिंग-> फ़ोन के बारे में>> मॉडल नंबर के तहत प्रदर्शित उपयोगकर्ता-सामना का मूल्य है।
माइक ऑर्टिज़

1
इसका बहुत कुछ निर्माता पर निर्भर करता है; एचटीसी डिवाइस (ईवो 4 जी, 4 जी एलटीई, 3 डी और स्लाइड) जो मैंने ऊपर कहा था, उसका उपयोग करते हैं।
फाल्कन 165o

AXON 7 मिनी सूची में है। फिर भी एक्सॉन का आकार नियमित रूप से कहां है?
सर्ज

30

जिनके लिए Buildयहां की संपत्तियों की पूरी सूची की तलाश सोनी Z1 कॉम्पैक्ट के लिए एक उदाहरण है:

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

आप आसानी से कोटलिन का उपयोग करके "अभिव्यक्ति का मूल्यांकन करें" संवाद का उपयोग करके डिबग मोड में अपने डिवाइस के लिए उन गुणों को सूचीबद्ध कर सकते हैं:

android.os.Build::class.java.fields.map { "Build.${it.name} = ${it.get(it.name)}"}.joinToString("\n")

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

8

जब आप निर्माता, डिवाइस का नाम और / या मॉडल प्राप्त करना चाहते हैं, तो निम्न स्ट्रिंग्स सभी उपयोग में हैं:

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

8

स्पष्ट रूप से आपको Google से सूची का उपयोग करने की आवश्यकता है https://support.google.com/googleplay/answer/1727131

API मुझे कुछ भी नहीं देता जिसकी मुझे उम्मीद है या सेटिंग्स में कुछ भी। मेरे मोटोरोला एक्स के लिए यह वही है जो मुझे मिलता है

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

के लिए जा रहे पेज मोटो एक्स के लिए "भूत" नक्शे ऊपर उल्लेख किया है लगता है जैसे यह एक बालक सरल हो सकता है ...


AXON 7 मिनी सूची में है। फिर भी एक्सॉन नियमित रूप से आकार कहां है?
सर्ज

7

आप डिवाइस का ब्रांड नाम और ब्रांड मॉडल प्राप्त करने के लिए निम्न कोड का उपयोग कर सकते हैं।

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

3

यहाँ मेरा कोड है, निर्माता, ब्रांड नाम, ओएस संस्करण और समर्थन एपीआई स्तर प्राप्त करने के लिए

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

3

कोटलिन संस्करण

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

मैं Kotlin के साथ एक छोटा संस्करण पोस्ट किया है capitalize stackoverflow.com/a/59158474/1446466
शॉन

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

1

कोटलिन लघु संस्करण:

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

fun getDeviceName(): String =
    (if (MODEL.startsWith(MANUFACTURER, ignoreCase = true)) {
        MODEL
    } else {
        "$MANUFACTURER $MODEL"
    }).capitalize()

1
Build.DEVICE // The name of the industrial design.

Build.DEVICE कुछ उपकरणों के लिए मानव पठनीय नाम देता हैBuild.MODEL

Build.DEVICE = OnePlus6
Build.MANUFACTURER = OnePlus
Build.MODEL = ONEPLUS A6003

0

आप फोन डिवाइस का नाम से प्राप्त कर सकते हैं

BluetoothAdapter

यदि फोन ब्लूटूथ का समर्थन नहीं करता है, तो आपको डिवाइस नाम से निर्माण करना होगा

android.os.Build वर्ग

यहाँ फोन डिवाइस का नाम प्राप्त करने के लिए नमूना कोड है।

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

2
धन्यवाद!! ध्यान दें कि इस कार्य के लिए BLUETOOTH की अनुमति आवश्यक है।
user2923322

-4

आप निम्नलिखित कार्य करने की कोशिश कर सकते हैं और इसके स्वरूप में अपना फोन मोडल नाम लौटा सकते हैं।

public String phoneModel() {

    return Build.MODEL;
}

यह उत्तर किसी भी अन्य उत्तर में सुधार नहीं करता है जो एक ही बात कहता है, और एक साल पहले यहां छोड़ दिया गया था।
लिन क्रंबलिंग
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.