You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在React Native应用中实现移动数据的启用与禁用功能?

在React Native中控制移动数据的启用/禁用

React Native本身没有提供直接控制移动数据开关的内置API,因为这涉及系统级权限,不同平台的限制差异很大,以下是具体实现方案:

Android平台

1. API 29(Android 10)及以下版本

可以通过自定义原生模块调用系统API实现控制,但需要先申请权限:

  • 在android/app/src/main/AndroidManifest.xml中添加权限声明:
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
  • 编写原生模块(Java示例):
package com.yourappname;

import android.content.Context;
import android.net.ConnectivityManager;
import android.os.Build;
import androidx.annotation.NonNull;
import com.facebook.react.bridge.ReactApplicationContext;
import com.facebook.react.bridge.ReactContextBaseJavaModule;
import com.facebook.react.bridge.ReactMethod;

public class MobileDataModule extends ReactContextBaseJavaModule {
    private final ReactApplicationContext reactContext;

    public MobileDataModule(ReactApplicationContext reactContext) {
        super(reactContext);
        this.reactContext = reactContext;
    }

    @NonNull
    @Override
    public String getName() {
        return "MobileDataModule";
    }

    @ReactMethod
    public void setMobileDataEnabled(boolean enabled) {
        ConnectivityManager cm = (ConnectivityManager) reactContext.getSystemService(Context.CONNECTIVITY_SERVICE);
        if (cm != null && Build.VERSION.SDK_INT < Build.VERSION_CODES.Q) {
            try {
                // 通过反射调用系统隐藏方法
                java.lang.reflect.Method method = cm.getClass().getDeclaredMethod("setMobileDataEnabled", boolean.class);
                method.setAccessible(true);
                method.invoke(cm, enabled);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
}
  • 在React Native中注册模块并调用:
import { NativeModules } from 'react-native';
const { MobileDataModule } = NativeModules;

// 启用移动数据
const enableMobileData = () => {
  MobileDataModule.setMobileDataEnabled(true);
};

// 禁用移动数据
const disableMobileData = () => {
  MobileDataModule.setMobileDataEnabled(false);
};

2. API 29及以上版本

Android 10开始,setMobileDataEnabled方法被官方废弃,普通应用无法直接通过代码控制移动数据,只能引导用户跳转至系统设置页面操作:

import { Linking, Platform } from 'react-native';

const openMobileDataSettings = () => {
  if (Platform.OS === 'android') {
    Linking.openSettings();
    // 部分设备支持直接跳转至移动数据设置页
    // Linking.openURL('android.settings.DATA_ROAMING_SETTINGS');
  }
};

iOS平台

iOS的沙盒机制严格限制第三方应用权限,普通应用完全无法直接控制移动数据开关,只能引导用户到系统设置页面:

import { Linking, Platform } from 'react-native';

const openMobileDataSettings = () => {
  if (Platform.OS === 'ios') {
    Linking.openURL('app-settings:');
  }
};

注意事项

  • Android高版本中,即使申请了权限,也可能因为厂商定制系统的限制,导致代码无法生效,最终还是需要引导用户手动操作
  • 所有涉及系统权限的操作,都需要先向用户申请对应的运行时权限

内容的提问来源于stack exchange,提问作者Kikoni Stéphane

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 23:56:09