Android: Get Hardware Information Programmatically

AndroidAndroid Hardware

Android Problem Overview


I have a requirement for obtaining the hardware related information on an Android device that runs my application. I need information of the following sort.

  • CPU Manufacturer, model and serial number
  • SD Card Manufacturer and serial number
  • Camera Manufacturer and other related specs
  • Bluetooth related hardware information
  • WiFi related hardware information
  • RAM Vendor / model
  • Display vendor and model

Any help on this topic would be highly appreciated.

Android Solutions


Solution 1 - Android

    Log.i("TAG", "SERIAL: " + Build.SERIAL);
    Log.i("TAG","MODEL: " + Build.MODEL);
    Log.i("TAG","ID: " + Build.ID);
    Log.i("TAG","Manufacture: " + Build.MANUFACTURER);
    Log.i("TAG","brand: " + Build.BRAND);
    Log.i("TAG","type: " + Build.TYPE);
    Log.i("TAG","user: " + Build.USER);
    Log.i("TAG","BASE: " + Build.VERSION_CODES.BASE);
    Log.i("TAG","INCREMENTAL " + Build.VERSION.INCREMENTAL);
    Log.i("TAG","SDK  " + Build.VERSION.SDK);
    Log.i("TAG","BOARD: " + Build.BOARD);
    Log.i("TAG","BRAND " + Build.BRAND);
    Log.i("TAG","HOST " + Build.HOST);
    Log.i("TAG","FINGERPRINT: "+Build.FINGERPRINT);
    Log.i("TAG","Version Code: " + Build.VERSION.RELEASE);

Solution 2 - Android

Log.i("ManuFacturer :", Build.MANUFACTURER);
Log.i("Board : ", Build.BOARD);
Log.i("Display : ", Build.DISPLAY);

More info can be found at from http://developer.android.com/reference/android/os/Build.html

Solution 3 - Android

**This Code give you information about following **

  1. Manufacturer of device

  2. Brand

  3. Model

  4. Board

  5. Hardware

  6. Serial No.

  7. Android_ID

  8. Screen Resolution

  9. Screen Density

  10. Boot Loader

  11. User

  12. Host

  13. API Level

  14. Build ID

  15. Build Time

  16. Fingerprint

       DisplayMetrics dm = new DisplayMetrics();
       getActivity().getWindowManager().getDefaultDisplay().getMetrics(dm);
       double x = Math.pow(mWidthPixels / dm.xdpi, 2);
       double y = Math.pow(mHeightPixels / dm.ydpi, 2);
       screenInches = Math.sqrt(x + y);
       rounded = df2.format(screenInches);
       densityDpi = (int) (dm.density * 160f);
    

    Manufacturer_value = Build.MANUFACTURER; Brand_value = Build.BRAND; Model_value = Build.MODEL; Board_value = Build.BOARD; Hardware_value = Build.HARDWARE; Serial_nO_value = Build.SERIAL; UID_value = tManager.getDeviceId(); android_id = Settings.Secure.getString(getContext().getContentResolver(), Settings.Secure.ANDROID_ID); ScreenResolution_value = mHeightPixels + " * " + mWidthPixels + " Pixels"; screen_size = rounded + " Inches"; screen_density = String.valueOf(densityDpi) + " dpi"; BootLoader_value = Build.BOOTLOADER; User_value = Build.USER; Host_value = Build.HOST; Version = Build.VERSION.RELEASE; API_level = Build.VERSION.SDK_INT + ""; Build_ID = Build.ID; Build_Time = Build.TIME + ""; Fingerprint = Build.FINGERPRINT;

Solution 4 - Android

You can also get real-time hardware info. Build.* parameters are set during compilation of Android before even deploying it on hardware itself.

You can access Linux real-time hardware info by reading /proc/* "files".

You can do that with https://stackoverflow.com/a/3528239/997381

Simply as command put cat /proc/cpuinfo.

You can test this with adb shell, and you don't need root permissions.

Solution 5 - Android

maybe someone needs kotlin solution

example

class DeviceInfoHelper constructor(val context: Context) {

    val model = deviceModel

    val imei = context.imei

    val hardware: String? = HARDWARE

    val board: String? = BOARD

    val bootloader: String? = BOOTLOADER

    val user: String? = USER

    val host: String? = HOST

    val version: String? = RELEASE

    val apiLevel = SDK_INT

    val id: String? = ID

    val time = TIME

    val fingerPrint: String? = FINGERPRINT

    val display: String? = DISPLAY

    private val deviceModel
        @SuppressLint("DefaultLocale")
        get() = capitalize(
                if (MODEL.toLowerCase().startsWith(MANUFACTURER.toLowerCase())) {
                    MODEL
                } else {
                    "$MANUFACTURER $MODEL"
                })


    private fun capitalize(str: String) = str.apply {
        if (isNotEmpty()) {
            first().run { if (isLowerCase()) toUpperCase() }
        }
    }

    private val Context.imei
        @SuppressLint("HardwareIds", "MissingPermission")
        get() = telephonyManager?.run {
            if (isReadPhoneStatePermissionGranted()) {
                if (SDK_INT >= VERSION_CODES.O) {
                    imei
                } else {
                    deviceId
                }
            } else DEFAULT_DEVICE_ID
        } ?: DEFAULT_DEVICE_ID

    private fun Context.isReadPhoneStatePermissionGranted() =
            ContextCompat.checkSelfPermission(
                    this,
                    Manifest.permission.READ_PHONE_STATE
            ) == PackageManager.PERMISSION_GRANTED

    private val Context.telephonyManager
        get() = getSystemService(Context.TELEPHONY_SERVICE) as TelephonyManager?
}

Solution 6 - Android

The "Build" class in android.os looks like it will contain some of the information you require

use it as

string build = Build.VERSION.DEVICE;

android Hardware Info

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionHeshan PereraView Question on Stackoverflow
Solution 1 - AndroidYaminiView Answer on Stackoverflow
Solution 2 - AndroidRichaView Answer on Stackoverflow
Solution 3 - AndroidM TalhaView Answer on Stackoverflow
Solution 4 - AndroidcadavreView Answer on Stackoverflow
Solution 5 - AndroidCubeView Answer on Stackoverflow
Solution 6 - Androidry8806View Answer on Stackoverflow