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

React Native如何获取设备日期时间设置(自动/自定义)?

获取设备日期时间自动/自定义模式配置信息

目前主流的React Native第三方库(比如你提到的react-native-device-info)并没有提供直接获取设备日期时间自动设置状态的API,要实现这个需求需要通过自定义原生模块对接iOS和Android的系统API:

iOS 实现方案

iOS系统可通过UserDefaults读取系统时间设置状态,核心是读取系统配置的自动时间、自动时区开关:

原生模块代码(Swift)

import Foundation
import React

@objc(DateTimeSettingsModule)
class DateTimeSettingsModule: NSObject, RCTBridgeModule {
  static func moduleName() -> String! {
    return "DateTimeSettingsModule"
  }

  static func requiresMainQueueSetup() -> Bool {
    return true
  }

  @objc func isAutoDateTimeEnabled(_ resolve: RCTPromiseResolveBlock, reject: RCTPromiseRejectBlock) {
    let autoTimeEnabled = UserDefaults.standard.bool(forKey: "AppleAutoTime")
    let autoTimeZoneEnabled = UserDefaults.standard.bool(forKey: "AppleAutoTimeZone")
    resolve(autoTimeEnabled && autoTimeZoneEnabled)
  }
}

React Native 端调用

import { NativeModules } from 'react-native';
const { DateTimeSettingsModule } = NativeModules;

// 获取自动时间设置状态
DateTimeSettingsModule.isAutoDateTimeEnabled()
  .then(isEnabled => {
    console.log('自动时间模式:', isEnabled ? '开启' : '关闭(自定义)');
  })
  .catch(error => {
    console.error('获取失败:', error);
  });

Android 实现方案

Android系统可通过Settings.Global类的常量读取时间自动同步状态,需先申请权限:

1. 添加权限(AndroidManifest.xml)

<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.WRITE_SETTINGS" />

2. 原生模块代码(Kotlin)

import android.provider.Settings
import com.facebook.react.bridge.Promise
import com.facebook.react.bridge.ReactApplicationContext
import com.facebook.react.bridge.ReactContextBaseJavaModule
import com.facebook.react.bridge.ReactMethod

class DateTimeSettingsModule(reactContext: ReactApplicationContext) : ReactContextBaseJavaModule(reactContext) {
  override fun getName(): String {
    return "DateTimeSettingsModule"
  }

  @ReactMethod
  fun isAutoDateTimeEnabled(promise: Promise) {
    try {
      val autoTime = Settings.Global.getInt(reactApplicationContext.contentResolver, Settings.Global.AUTO_TIME)
      val autoTimeZone = Settings.Global.getInt(reactApplicationContext.contentResolver, Settings.Global.AUTO_TIME_ZONE)
      promise.resolve(autoTime == 1 && autoTimeZone == 1)
    } catch (e: Settings.SettingNotFoundException) {
      promise.reject("SETTING_NOT_FOUND", "无法读取时间设置", e)
    }
  }
}

3. React Native 端调用

与iOS端调用逻辑一致,通过NativeModules调用原生方法即可。


内容的提问来源于stack exchange,提问作者Newever

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 02:57:07