import React, {Component, useCallback, memo} from 'react';
import {
ScrollView,
StyleSheet,
Text,
SafeAreaView,
View,
TouchableOpacity,
NativeModules,
} from 'react-native';
import DeviceInfo from 'react-native-device-info';
import {
getManufacturer,
getManufacturerSync,
syncUniqueId,
getUniqueId,
getUniqueIdSync,
useBatteryLevel,
useBatteryLevelIsLow,
usePowerState,
useFirstInstallTime,
useDeviceName,
useManufacturer,
useHasSystemFeature,
useIsEmulator,
useIsHeadphonesConnected,
useBrightness,
} from 'react-native-device-info';
const FunctionalComponent = () => {
const batteryLevel = useBatteryLevel();
const batteryLevelIsLow = useBatteryLevelIsLow();
const powerState = usePowerState();
const firstInstallTime = useFirstInstallTime();
const deviceName = useDeviceName();
const manufacturer = useManufacturer();
const hasSystemFeature = useHasSystemFeature('amazon.hardware.fire_tv');
const isEmulator = useIsEmulator();
const isHeadphonesConnected = useIsHeadphonesConnected();
const brightness = useBrightness();
const deviceJSON = {
batteryLevel,
batteryLevelIsLow,
powerState,
firstInstallTime,
deviceName,
manufacturer,
hasSystemFeature,
isEmulator,
isHeadphonesConnected,
brightness,
};
return (
{JSON.stringify(deviceJSON, null, ' ')}
);
};
const ActionExtensionHeader = memo(({isActionExtension}) => {
const onDonePress = useCallback(() => {
NativeModules.ActionExtension.done();
}, []);
return isActionExtension ? (
Done
) : (
);
});
export default class TestNativeInfo extends Component {
constructor(props) {
super(props);
this.state = {
activeTab: 'constant',
constantdeviceinfo: this.getConstantDeviceInfo(),
asyncdeviceinfo: {},
syncdeviceinfo: this.getSyncDeviceInfo(),
};
}
getConstantDeviceInfo() {
let deviceJSON = {};
deviceJSON.deviceId = DeviceInfo.getDeviceId();
deviceJSON.bundleId = DeviceInfo.getBundleId();
deviceJSON.systemName = DeviceInfo.getSystemName();
deviceJSON.systemVersion = DeviceInfo.getSystemVersion();
deviceJSON.version = DeviceInfo.getVersion();
deviceJSON.readableVersion = DeviceInfo.getReadableVersion();
deviceJSON.buildNumber = DeviceInfo.getBuildNumber();
deviceJSON.isTablet = DeviceInfo.isTablet();
deviceJSON.appName = DeviceInfo.getApplicationName();
deviceJSON.brand = DeviceInfo.getBrand();
deviceJSON.model = DeviceInfo.getModel();
deviceJSON.deviceType = DeviceInfo.getDeviceType();
return deviceJSON;
}
getSyncDeviceInfo() {
let deviceJSON = {};
deviceJSON.uniqueId = getUniqueIdSync();
deviceJSON.manufacturer = getManufacturerSync();
deviceJSON.buildId = DeviceInfo.getBuildIdSync();
deviceJSON.isCameraPresent = DeviceInfo.isCameraPresentSync();
deviceJSON.deviceName = DeviceInfo.getDeviceNameSync();
deviceJSON.usedMemory = DeviceInfo.getUsedMemorySync();
deviceJSON.instanceId = DeviceInfo.getInstanceIdSync();
deviceJSON.installReferrer = DeviceInfo.getInstallReferrerSync();
deviceJSON.installerPackageName = DeviceInfo.getInstallerPackageNameSync();
deviceJSON.isEmulator = DeviceInfo.isEmulatorSync();
deviceJSON.fontScale = DeviceInfo.getFontScaleSync();
deviceJSON.hasNotch = DeviceInfo.hasNotch();
deviceJSON.hasDynamicIsland = DeviceInfo.hasDynamicIsland();
deviceJSON.firstInstallTime = DeviceInfo.getFirstInstallTimeSync();
deviceJSON.lastUpdateTime = DeviceInfo.getLastUpdateTimeSync();
deviceJSON.serialNumber = DeviceInfo.getSerialNumberSync();
deviceJSON.androidId = DeviceInfo.getAndroidIdSync();
deviceJSON.IpAddress = DeviceInfo.getIpAddressSync();
deviceJSON.MacAddress = DeviceInfo.getMacAddressSync(); // needs android.permission.ACCESS_WIFI_STATE
deviceJSON.phoneNumber = "DeviceInfo.getPhoneNumberSync()"; // needs android.permission.READ_PHONE_STATE
deviceJSON.ApiLevel = DeviceInfo.getApiLevelSync();
deviceJSON.carrier = DeviceInfo.getCarrierSync();
deviceJSON.totalMemory = DeviceInfo.getTotalMemorySync();
deviceJSON.maxMemory = DeviceInfo.getMaxMemorySync();
deviceJSON.totalDiskCapacity = DeviceInfo.getTotalDiskCapacitySync();
deviceJSON.totalDiskCapacityOld = DeviceInfo.getTotalDiskCapacityOldSync();
deviceJSON.freeDiskStorage = DeviceInfo.getFreeDiskStorageSync();
deviceJSON.freeDiskStorageOld = DeviceInfo.getFreeDiskStorageOldSync();
deviceJSON.batteryLevel = DeviceInfo.getBatteryLevelSync();
deviceJSON.isLandscape = DeviceInfo.isLandscapeSync();
deviceJSON.isAirplaneMode = DeviceInfo.isAirplaneModeSync();
deviceJSON.isBatteryCharging = DeviceInfo.isBatteryChargingSync();
deviceJSON.isPinOrFingerprintSet = DeviceInfo.isPinOrFingerprintSetSync();
deviceJSON.supportedAbis = DeviceInfo.supportedAbisSync();
deviceJSON.hasSystemFeature = DeviceInfo.hasSystemFeatureSync(
'android.software.webview',
);
deviceJSON.getSystemAvailableFeatures = DeviceInfo.getSystemAvailableFeaturesSync();
deviceJSON.powerState = DeviceInfo.getPowerStateSync();
deviceJSON.isLocationEnabled = DeviceInfo.isLocationEnabledSync();
deviceJSON.headphones = DeviceInfo.isHeadphonesConnectedSync();
deviceJSON.getAvailableLocationProviders = DeviceInfo.getAvailableLocationProvidersSync();
deviceJSON.bootloader = DeviceInfo.getBootloaderSync();
deviceJSON.device = DeviceInfo.getDeviceSync();
deviceJSON.display = DeviceInfo.getDisplaySync();
deviceJSON.fingerprint = DeviceInfo.getFingerprintSync();
deviceJSON.hardware = DeviceInfo.getHardwareSync();
deviceJSON.host = DeviceInfo.getHostSync();
deviceJSON.product = DeviceInfo.getProductSync();
deviceJSON.tags = DeviceInfo.getTagsSync();
deviceJSON.type = DeviceInfo.getTypeSync();
deviceJSON.baseOS = DeviceInfo.getBaseOsSync();
deviceJSON.previewSdkInt = DeviceInfo.getPreviewSdkIntSync();
deviceJSON.securityPatch = DeviceInfo.getSecurityPatchSync();
deviceJSON.codename = DeviceInfo.getCodenameSync();
deviceJSON.incremental = DeviceInfo.getIncrementalSync();
deviceJSON.brightness = DeviceInfo.getBrightnessSync();
deviceJSON.supported32BitAbis = DeviceInfo.supported32BitAbisSync();
deviceJSON.supported64BitAbis = DeviceInfo.supported64BitAbisSync();
deviceJSON.hasGms = DeviceInfo.hasGmsSync();
deviceJSON.hasHms = DeviceInfo.hasHmsSync();
deviceJSON.isMouseConnected = DeviceInfo.isMouseConnectedSync();
deviceJSON.isKeyboardConnected = DeviceInfo.isKeyboardConnectedSync();
return deviceJSON;
}
async componentDidMount() {
let deviceJSON = {};
try {
deviceJSON.uniqueId = await getUniqueId();
deviceJSON.syncUniqueId = await syncUniqueId();
deviceJSON.manufacturer = await getManufacturer();
deviceJSON.buildId = await DeviceInfo.getBuildId();
deviceJSON.isCameraPresent = await DeviceInfo.isCameraPresent();
deviceJSON.deviceName = await DeviceInfo.getDeviceName();
deviceJSON.usedMemory = await DeviceInfo.getUsedMemory();
deviceJSON.userAgent = await DeviceInfo.getUserAgent();
deviceJSON.instanceId = await DeviceInfo.getInstanceId();
deviceJSON.installReferrer = await DeviceInfo.getInstallReferrer();
deviceJSON.installerPackageName = await DeviceInfo.getInstallerPackageName();
deviceJSON.isEmulator = await DeviceInfo.isEmulator();
deviceJSON.fontScale = await DeviceInfo.getFontScale();
deviceJSON.hasNotch = await DeviceInfo.hasNotch();
deviceJSON.hasDynamicIsland = await DeviceInfo.hasDynamicIsland();
deviceJSON.firstInstallTime = await DeviceInfo.getFirstInstallTime();
deviceJSON.lastUpdateTime = await DeviceInfo.getLastUpdateTime();
deviceJSON.serialNumber = await DeviceInfo.getSerialNumber();
deviceJSON.androidId = await DeviceInfo.getAndroidId();
deviceJSON.IpAddress = await DeviceInfo.getIpAddress();
deviceJSON.MacAddress = await DeviceInfo.getMacAddress(); // needs android.permission.ACCESS_WIFI_STATE
deviceJSON.phoneNumber = "await DeviceInfo.getPhoneNumber()"; // needs android.permission.READ_PHONE_STATE
deviceJSON.ApiLevel = await DeviceInfo.getApiLevel();
deviceJSON.carrier = await DeviceInfo.getCarrier();
deviceJSON.totalMemory = await DeviceInfo.getTotalMemory();
deviceJSON.maxMemory = await DeviceInfo.getMaxMemory();
deviceJSON.totalDiskCapacity = await DeviceInfo.getTotalDiskCapacity();
deviceJSON.totalDiskCapacityOld = await DeviceInfo.getTotalDiskCapacityOld();
deviceJSON.freeDiskStorage = await DeviceInfo.getFreeDiskStorage();
deviceJSON.freeDiskStorageOld = await DeviceInfo.getFreeDiskStorageOld();
deviceJSON.batteryLevel = await DeviceInfo.getBatteryLevel();
deviceJSON.isLandscape = await DeviceInfo.isLandscape();
deviceJSON.isAirplaneMode = await DeviceInfo.isAirplaneMode();
deviceJSON.isBatteryCharging = await DeviceInfo.isBatteryCharging();
deviceJSON.isPinOrFingerprintSet = await DeviceInfo.isPinOrFingerprintSet();
deviceJSON.supportedAbis = await DeviceInfo.supportedAbis();
deviceJSON.hasSystemFeature = await DeviceInfo.hasSystemFeature(
'android.software.webview',
);
deviceJSON.getSystemAvailableFeatures = await DeviceInfo.getSystemAvailableFeatures();
deviceJSON.powerState = await DeviceInfo.getPowerState();
deviceJSON.isLocationEnabled = await DeviceInfo.isLocationEnabled();
deviceJSON.headphones = await DeviceInfo.isHeadphonesConnected();
deviceJSON.getAvailableLocationProviders = await DeviceInfo.getAvailableLocationProviders();
deviceJSON.bootloader = await DeviceInfo.getBootloader();
deviceJSON.device = await DeviceInfo.getDevice();
deviceJSON.display = await DeviceInfo.getDisplay();
deviceJSON.fingerprint = await DeviceInfo.getFingerprint();
deviceJSON.hardware = await DeviceInfo.getHardware();
deviceJSON.host = await DeviceInfo.getHost();
deviceJSON.product = await DeviceInfo.getProduct();
deviceJSON.tags = await DeviceInfo.getTags();
deviceJSON.type = await DeviceInfo.getType();
deviceJSON.baseOS = await DeviceInfo.getBaseOs();
deviceJSON.previewSdkInt = await DeviceInfo.getPreviewSdkInt();
deviceJSON.securityPatch = await DeviceInfo.getSecurityPatch();
deviceJSON.codename = await DeviceInfo.getCodename();
deviceJSON.incremental = await DeviceInfo.getIncremental();
deviceJSON.brightness = await DeviceInfo.getBrightness();
deviceJSON.supported32BitAbis = await DeviceInfo.supported32BitAbis();
deviceJSON.supported64BitAbis = await DeviceInfo.supported64BitAbis();
deviceJSON.hasGms = await DeviceInfo.hasGms();
deviceJSON.hasHms = await DeviceInfo.hasHms();
deviceJSON.synchronizedUniqueId = await DeviceInfo.syncUniqueId();
deviceJSON.isMouseConnected = await DeviceInfo.isMouseConnected();
deviceJSON.isKeyboardConnected = await DeviceInfo.isKeyboardConnected();
deviceJSON.isTabletMode = await DeviceInfo.isTabletMode();
try {
deviceJSON.deviceToken = await DeviceInfo.getDeviceToken();
} catch (e) {
console.log(
'Trouble getting device token, likely a simulator or not iOS11+',
);
}
} catch (e) {
console.log('Trouble getting device info ', e);
}
// eslint-disable-next-line react/no-did-mount-set-state
this.setState({asyncdeviceinfo: deviceJSON});
this.forceUpdate();
}
render() {
return (
{this.state.activeTab === 'constant' ? (
<>
react-native-device-info example - constant info:
{JSON.stringify(this.state.constantdeviceinfo, null, ' ')}
>
) : this.state.activeTab === 'sync' ? (
<>
react-native-device-info example - sync info:
{JSON.stringify(this.state.syncdeviceinfo, null, ' ')}
>
) : this.state.activeTab === 'async' ? (
<>
react-native-device-info example - async info:
{JSON.stringify(this.state.asyncdeviceinfo, null, ' ')}
>
) : this.state.activeTab === 'hooks' ? (
<>
react-native-device-info example - hooks:
>
) : null}
this.setState({activeTab: 'constant'})}>
Constant
this.setState({activeTab: 'sync'})}>
Sync
this.setState({activeTab: 'async'})}>
Async
this.setState({activeTab: 'hooks'})}>
Hooks
);
}
}
const styles = StyleSheet.create({
container: {
flex: 1,
backgroundColor: '#F5FCFF',
},
welcome: {
fontSize: 20,
textAlign: 'center',
margin: 10,
},
instructions: {
textAlign: 'left',
color: '#333333',
margin: 5,
},
tabBar: {
flexDirection: 'row',
borderTopColor: '#333333',
borderTopWidth: 1,
},
tab: {
height: 50,
flex: 1,
alignItems: 'center',
justifyContent: 'center',
},
tabText: {
color: '#333333',
},
boldText: {
fontWeight: '700',
},
});