A universal library provides access to system information about the physical device.
expo-device
provides access to system information about the physical device, such as its manufacturer and model.
-
npx expo install expo-device
If you are installing this in an existing React Native app, start by installing expo
in your project. Then, follow the additional instructions as mentioned by the library's README under "Installation in bare React Native projects" section.
import { Text, View } from 'react-native';
import * as Device from 'expo-device';
export default function App() {
return (
<View style={{ flex: 1, justifyContent: 'center', alignItems: 'center' }}>
<Text>
{Device.manufacturer}: {Device.modelName}
</Text>
</View>
);
}
import * as Device from 'expo-device';
Device.brand
Type: string | null
The device brand. The consumer-visible brand of the product/hardware. On web, this value is always null
.
Example
Device.brand; // Android: "google", "xiaomi"; iOS: "Apple"; web: null
Device.designName
Type: string | null
The specific configuration or name of the industrial design. It represents the device's name when it was designed during manufacturing into mass production.
On Android, it corresponds to Build.DEVICE
. On web and iOS, this value is always null
.
Example
Device.designName; // Android: "kminilte"; iOS: null; web: null
Device.deviceName
Type: string | null
The human-readable name of the device, which may be set by the device's user. If the device name is unavailable, particularly on web, this value is null
.
On iOS 16 and newer, this value will be set to generic "iPhone" until you add the correct entitlement, see iOS Capabilities page to learn how to add one and check out Apple documentation for more details on this change.
Example
Device.deviceName; // "Vivian's iPhone XS"
Device.deviceType
Type: DeviceType | null
The type of the device as a DeviceType
enum value.
On Android, for devices other than TVs, the device type is determined by the screen resolution (screen diagonal size), so the result may not be completely accurate.
If the screen diagonal length is between 3" and 6.9", the method returns DeviceType.PHONE
. For lengths between 7" and 18", the method returns DeviceType.TABLET
.
Otherwise, the method returns DeviceType.UNKNOWN
.
Example
Device.deviceType; // UNKNOWN, PHONE, TABLET, TV, DESKTOP
Device.deviceYearClass
Type: number | null
The device year class of this device. On web, this value is always null
.
Device.isDevice
Type: boolean
true
if the app is running on a real device and false
if running in a simulator or emulator.
On web, this is always set to true
.
Device.manufacturer
Type: string | null
The actual device manufacturer of the product or hardware. This value of this field may be null
if it cannot be determined.
To view difference between brand
and manufacturer
on Android see official documentation.
Example
Device.manufacturer; // Android: "Google", "xiaomi"; iOS: "Apple"; web: "Google", null
Device.modelId
Type: any
The internal model ID of the device. This is useful for programmatically identifying the type of device and is not a human-friendly string.
On web and Android, this value is always null
.
Example
Device.modelId; // iOS: "iPhone7,2"; Android: null; web: null
Device.modelName
Type: string | null
The human-friendly name of the device model. This is the name that people would typically use to refer to the device rather than a programmatic model identifier.
This value of this field may be null
if it cannot be determined.
Example
Device.modelName; // Android: "Pixel 2"; iOS: "iPhone XS Max"; web: "iPhone", null
Device.osBuildFingerprint
Type: string | null
A string that uniquely identifies the build of the currently running system OS. On Android, it follows this template:
$(BRAND)/$(PRODUCT)/$(DEVICE)/$(BOARD):$(VERSION.RELEASE)/$(ID)/$(VERSION.INCREMENTAL):$(TYPE)/\$(TAGS)
On web and iOS, this value is always null
.Example
Device.osBuildFingerprint;
// Android: "google/sdk_gphone_x86/generic_x86:9/PSR1.180720.075/5124027:user/release-keys";
// iOS: null; web: null
Device.osBuildId
Type: string | null
The build ID of the OS that more precisely identifies the version of the OS. On Android, this corresponds to Build.DISPLAY
(not Build.ID
)
and currently is a string as described here. On iOS, this corresponds to kern.osversion
and is the detailed OS version sometimes displayed next to the more human-readable version. On web, this value is always null
.
Example
Device.osBuildId; // Android: "PSR1.180720.075"; iOS: "16F203"; web: null
Device.osInternalBuildId
Type: string | null
The internal build ID of the OS running on the device. On Android, this corresponds to Build.ID
.
On iOS, this is the same value as Device.osBuildId
. On web, this value is always null
.
Example
Device.osInternalBuildId; // Android: "MMB29K"; iOS: "16F203"; web: null,
Device.osName
Type: string | null
The name of the OS running on the device.
Example
Device.osName; // Android: "Android"; iOS: "iOS" or "iPadOS"; web: "iOS", "Android", "Windows"
Device.osVersion
Type: string | null
The human-readable OS version string. Note that the version string may not always contain three numbers separated by dots.
Example
Device.osVersion; // Android: "4.0.3"; iOS: "12.3.1"; web: "11.0", "8.1.0"
Device.platformApiLevel
Type: number | null
The Android SDK version of the software currently running on this hardware device. This value never changes while a device is booted,
but it may increase when the hardware manufacturer provides an OS update. See here
to see all possible version codes and corresponding versions. On iOS and web, this value is always null
.
Example
Device.platformApiLevel; // Android: 19; iOS: null; web: null
Device.productName
Type: string | null
The device's overall product name chosen by the device implementer containing the development name or code name of the device.
Corresponds to Build.PRODUCT
. On web and iOS, this value is always null
.
Example
Device.productName; // Android: "kminiltexx"; iOS: null; web: null
Device.supportedCpuArchitectures
Type: string[] | null
A list of supported processor architecture versions. The device expects the binaries it runs to be compiled for one of these architectures.
This value is null
if the supported architectures could not be determined, particularly on web.
Example
Device.supportedCpuArchitectures; // ['arm64 v8', 'Intel x86-64h Haswell', 'arm64-v8a', 'armeabi-v7a", 'armeabi']
Device.totalMemory
Type: number | null
The device's total memory, in bytes. This is the total memory accessible to the kernel, but not necessarily to a single app.
This is basically the amount of RAM the device has, not including below-kernel fixed allocations like DMA buffers, RAM for the baseband CPU, etc…
On web, this value is always null
.
Example
Device.totalMemory; // 17179869184
Device.getDeviceTypeAsync()
Checks the type of the device as a DeviceType
enum value.
On Android, for devices other than TVs, the device type is determined by the screen resolution (screen diagonal size), so the result may not be completely accurate.
If the screen diagonal length is between 3" and 6.9", the method returns DeviceType.PHONE
. For lengths between 7" and 18", the method returns DeviceType.TABLET
.
Otherwise, the method returns DeviceType.UNKNOWN
.
Returns a promise that resolves to a DeviceType
enum value.
Example
await Device.getDeviceTypeAsync();
// DeviceType.PHONE
Device.getMaxMemoryAsync()
Returns the maximum amount of memory that the Java VM will attempt to use. If there is no inherent limit then Number.MAX_SAFE_INTEGER
is returned.
Promise<number>
Returns a promise that resolves to the maximum available memory that the Java VM will use, in bytes.
Example
await Device.getMaxMemoryAsync();
// 402653184
Device.getPlatformFeaturesAsync()
Gets a list of features that are available on the system. The feature names are platform-specific. See Android documentation to learn more about this implementation.
Promise<string[]>
Returns a promise that resolves to an array of strings, each of which is a platform-specific name of a feature available on the current device. On iOS and web, the promise always resolves to an empty array.
Example
await Device.getPlatformFeaturesAsync();
// [
// 'android.software.adoptable_storage',
// 'android.software.backup',
// 'android.hardware.sensor.accelerometer',
// 'android.hardware.touchscreen',
// ]
Device.getUptimeAsync()
Gets the uptime since the last reboot of the device, in milliseconds. Android devices do not count time spent in deep sleep.
Promise<number>
Returns a promise that resolves to a number
that represents the milliseconds since last reboot.
Example
await Device.getUptimeAsync();
// 4371054
Device.hasPlatformFeatureAsync(feature)
Parameter | Type | Description |
---|---|---|
feature | string | The platform-specific name of the feature to check for on the device. You can get all available system features with |
Tells if the device has a specific system feature.
Promise<boolean>
Returns a promise that resolves to a boolean value indicating whether the device has the specified system feature.
On iOS and web, the promise always resolves to false
.
Example
await Device.hasPlatformFeatureAsync('amazon.hardware.fire_tv');
// true or false
Device.isRootedExperimentalAsync()
This method is experimental and is not completely reliable. See description below.
Checks whether the device has been rooted (Android) or jailbroken (iOS). This is not completely reliable because there exist solutions to bypass root-detection on both iOS and Android. Further, many root-detection checks can be bypassed via reverse engineering.
"su"
executable but some devices that are not rooted may also have this executable. Therefore, there's no guarantee that this method will always return correctly.false
even if the device is rooted.Promise<boolean>
Returns a promise that resolves to a boolean
that specifies whether this device is rooted.
Example
await Device.isRootedExperimentalAsync();
// true or false
Device.isSideLoadingEnabledAsync()
Using this method requires you to add the REQUEST_INSTALL_PACKAGES
permission.
Returns whether applications can be installed for this user via the system's ACTION_INSTALL_PACKAGE
mechanism rather than through the OS's default app store, like Google Play.
Promise<boolean>
Returns a promise that resolves to a boolean
that represents whether the calling package is allowed to request package installation.
Example
await Device.isSideLoadingEnabledAsync();
// true or false
DeviceType
An enum representing the different types of devices supported by Expo.
DeviceType Values
TABLET
DeviceType.TABLET = 2
Tablet computers, typically with a touch screen that is larger than a usual phone.
Code | Description |
---|---|
ERR_DEVICE_ROOT_DETECTION | Error code thrown for isRootedExperimentalAsync . This may be thrown if there's no read access to certain system files. |