プログラムでAndroid Phone Modelを取得する


回答:


328

多くの一般的なデバイスでは、デバイスの商品名は利用できません。例えば、サムスンギャラクシーS6上の価値が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 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)


19
Jaredに感謝します。今日はこれが必要でしたが、Xamarin.Androidの場合はファイルをC#に翻訳しました。他の誰かがそれを必要とするなら、あなたはここでそれを見つけることができます。gist.github.com/mohibsheth/5e1b361ae49c257b8caf
Mohib Sheth

1
このDevicesクラスなしで「Xperia Z3」や「Galaxy S3」のような「人間が読める」デバイス名を取得する方法はありますか?今後のすべてのデバイスもサポートされるように、すべてのデバイスの静的リストを使用したくありません。
Radon8472

1
@ Radon8472上記の静的ファクトリーメソッドを名前付きで試しましたgetDeviceName()か?それでも結果が得られない場合、私が知っているより良い解決策はありません。
Jared Rummler、2015年

@Jared:私はすでに「getDeviceName()」の結果のようなデバイス名を持っていますが、エンドユーザーが彼らの便利な店から知っている名前を表示したいです:(
Radon8472

1
こんにちは、Jaredのリストを使用して、ng-foneと呼ばれる角度モジュールを作成しました。以下のリンクは、それを使用する方法についての説明を提供します。 tphangout.com/?p=83
Raja

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

 

ユーザーから取得したデバイス名の例をいくつか示します。

サムスンGT-S5830L
モトローラMB860
ソニーエリクソンLT18i
LGE LG- P500
HTC欲望V
HTCワイルドファイアS A510e


それはあなたが電話から得ることができるすべての可能な答えを保持するどこかにリストがあります。特定の種類の電話に何かをインストールする方法、または特定のモデルに何かを販売する方法についてユーザーをリダイレクトする必要がある場合は、そのように伝えます。
evilfish

7
@evilfish Googleからこのリストを試してください:support.google.com/googleplay/answer/1727131
Idolon

Android Wearで必要だったので、時計で完全に動作します。
Wahib Ul Haq 2015

116

はい:Build.MODEL


エミュレータで試してみると、「x86用にビルドされたAndroid SDK」が常に表示されます。異なるモデル名で実行されているエミュレータで具体的にモデル名を取得できません。
Swathi

はい、それがエミュレータのモデルです。内部ストレージにも同様の名前を使用していることに注意してください。
Cool Guy CG

34

実際、それは100%正しくありません。それはあなたにモデル(時々数)を与えることができます。
電話のメーカーを取得します(リクエストのHTC部分):

 Build.MANUFACTURER

製品名:

 Build.PRODUCT

8
それがString name = Build.MANUFACTURER + " - " + Build.MODEL最も便利な組み合わせであることがわかりました。Build.PRODUCTは予期しない名前を使用することがあります。たとえば、Galaxy Nexusでは、「takgu」を返します。一方、Build.MODELは、[設定]-> [電話について]-> [モデル番号]に表示されるユーザー向けの値です。
Mike Ortiz、

1
それの多くはメーカーに依存します。HTCデバイス(Evo 4G、4G LTE、3D、およびスライド)は、上で述べたものを使用します。
Falcon165o 2012

AXON 7 miniがリストに含まれています。しかし、通常のサイズのAXONはどこにありますか?
セルジュ

30

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

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

どうやらあなたはグーグルからのリストを使用する必要があります https://support.google.com/googleplay/answer/1727131にあるます。

APIが期待するものや設定で何も返しません。私のモトローラXでは、これが私が手に入れるものです

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

上記の「ゴースト」ページにアクセスすると、Moto Xにマップされます。


AXON 7 miniがリストに含まれています。しかし、通常のサイズのAXONはどこにありますか?
セルジュ

7

次のコードを使用して、デバイスのブランド名とブランドモデルを取得できます。

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

3

これは私のコードです、メーカー、ブランド名、OSバージョン、サポート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

3

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


1

Idolonsコードを少し変更しました。これにより、デバイスモデルを取得するときに単語が大文字になります。

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

Kotlinショートバージョン:

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

電話のデバイス名は、

Bluetoothアダプター

電話がBluetoothをサポートしていない場合は、デバイス名を

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

次の関数を試して、phoneModel名を文字列形式で返すことができます。

public String phoneModel() {

    return Build.MODEL;
}

この答えは、同じことを言っていて、1年前にここに残された他のどの答えも改善しません。
Lynn Crumbling 2018
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.