Reference version

This is documentation for the next SDK version. For up-to-date documentation, see the latest version (SDK 55).

Expo 蜂窝网络 iconExpo 蜂窝网络

一个提供用户蜂窝服务提供商信息的 API。

Android
iOS
Web
Included in Expo Go

For the complete documentation index, see llms.txt. Use this Use this file to discover all available pages.

expo-cellular 提供有关用户蜂窝服务提供商的信息,例如其唯一标识符、蜂窝连接类型,以及其网络是否允许 VoIP 通话。

安装

Terminal
npx expo install expo-cellular

If you are installing this in an existing React Native app, make sure to install expo in your project.

配置

Are you using this library in an existing React Native app?

如果你没有使用 Continuous Native Generation (CNG),或者你正在手动使用原生 android 项目,那么你需要在项目的 AndroidManifest.xml 中添加 android.permission.READ_PHONE_STATE 权限。此权限用于 TelephonyManager

android/app/src/main/AndroidManifest.xml
<uses-permission android:name="android.permission.READ_PHONE_STATE" />

此库不需要更敏感的 READ_PRIVILEGED_PHONE_STATE 权限。

API

import * as Cellular from 'expo-cellular';

Hooks

usePermissions(options)

Android
iOS
Web
ParameterType
options(optional)PermissionHookOptions<object>

Check or request permissions to access the phone state. This uses both Cellular.requestPermissionsAsync and Cellular.getPermissionsAsync to interact with the permissions.

Returns:
[PermissionResponse | null, RequestPermissionMethod<PermissionResponse>, GetPermissionMethod<PermissionResponse>]

Example

const [status, requestPermission] = Cellular.usePermissions();

Methods

Cellular.allowsVoipAsync()

Android
Returns:
Promise<boolean | null>

Returns if the carrier allows making VoIP calls on its network. On Android, this checks whether the system supports SIP-based VoIP API. See here to view more information.

On iOS, if you configure a device for a carrier and then remove the SIM card, this property retains the boolean value indicating the carrier’s policy regarding VoIP. If you then install a new SIM card, its VoIP policy boolean replaces the previous value of this property.

On iOS and web, this returns null.

Example

await Cellular.allowsVoipAsync(); // true or false

Cellular.getCarrierNameAsync()

Android
Returns:
Promise<string | null>

Returns name of the user’s home cellular service provider. If the device has dual SIM cards, only the carrier for the currently active SIM card is returned.

On Android, this value is only available when the SIM state is SIM_STATE_READY. Otherwise, this returns null.

On iOS and web, this returns null.

Example

await Cellular.getCarrierNameAsync(); // "T-Mobile" or "Verizon"

Cellular.getCellularGenerationAsync()

Android
iOS
Web

Returns a promise which fulfils with a Cellular.CellularGeneration enum value that represents the current cellular-generation type.

You need to check if the native permission has been accepted to obtain generation. If the permission is denied, getCellularGenerationAsync resolves with Cellular.CellularGeneration.UNKNOWN.

On web, this method uses navigator.connection.effectiveType to detect the effective type of the connection using a combination of recently observed round-trip time and downlink values. See here to view browser compatibility.

Example

await Cellular.getCellularGenerationAsync(); // CellularGeneration.CELLULAR_4G

Cellular.getIsoCountryCodeAsync()

Android
Returns:
Promise<string | null>

Returns the ISO country code for the user’s cellular service provider.

On iOS, the value is null if any of the following apply:

  • The device is in airplane mode.
  • There is no SIM card in the device.
  • The device is outside of cellular service range.

On iOS and web, this returns null.

Example

await Cellular.getIsoCountryCodeAsync(); // "us" or "au"

Cellular.getMobileCountryCodeAsync()

Android
Returns:
Promise<string | null>

Returns mobile country code (MCC) for the user’s current registered cellular service provider.

On Android, this value is only available when SIM state is SIM_STATE_READY. Otherwise, this returns null. On iOS, the value may be null on hardware prior to iPhone 4S when in airplane mode. Furthermore, the value for this property is null if any of the following apply:

  • There is no SIM card in the device.
  • The device is outside of cellular service range.

On iOS and web, this returns null.

Example

await Cellular.getMobileCountryCodeAsync(); // "310"

Cellular.getMobileNetworkCodeAsync()

Android
Returns:
Promise<string | null>

Returns the mobile network code (MNC) for the user’s current registered cellular service provider.

On Android, this value is only available when SIM state is SIM_STATE_READY. Otherwise, this returns null. On iOS, the value may be null on hardware prior to iPhone 4S when in airplane mode. Furthermore, the value for this property is null if any of the following apply:

  • There is no SIM card in the device.
  • The device is outside of cellular service range.

On iOS and web, this returns null.

Example

await Cellular.getMobileNetworkCodeAsync(); // "310"

Cellular.getPermissionsAsync()

Android
iOS
Web

Checks user's permissions for accessing phone state.

Returns:
Promise<PermissionResponse>

Cellular.requestPermissionsAsync()

Android
iOS
Web

Asks the user to grant permissions for accessing the phone state.

Returns:
Promise<PermissionResponse>

Enums

CellularGeneration

Android
iOS
Web

Describes the current generation of the cellular connection. It is an enum with these possible values:

UNKNOWN

CellularGeneration.UNKNOWN = 0

Either we are not currently connected to a cellular network or type could not be determined.

CELLULAR_2G

CellularGeneration.CELLULAR_2G = 1

Currently connected to a 2G cellular network. Includes CDMA, EDGE, GPRS, and IDEN type connections.

CELLULAR_3G

CellularGeneration.CELLULAR_3G = 2

Currently connected to a 3G cellular network. Includes EHRPD, EVDO, HSPA, HSUPA, HSDPA, HSPAP, and UTMS type connections.

CELLULAR_4G

CellularGeneration.CELLULAR_4G = 3

Currently connected to a 4G cellular network. Includes LTE type connections.

CELLULAR_5G

CellularGeneration.CELLULAR_5G = 4

Currently connected to a 5G cellular network. Includes NR and NRNSA type connections.

错误代码

代码描述
ERR_CELLULAR_GENERATION_UNKNOWN_NETWORK_TYPE无法访问网络类型,或未连接到蜂窝网络

权限

Android

你必须在 expo.android.permissions 数组中,将以下权限添加到你的 app.json 里。

Android PermissionDescription

READ_PHONE_STATE

Allows read only access to phone state, including the current cellular network information, the status of any ongoing calls, and a list of any PhoneAccounts registered on the device.

Allows read only access to phone state, including the current cellular network information, the status of any ongoing calls, and a list of any PhoneAccounts registered on the device.

iOS

无需权限