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
相关产品推荐
相关产品推荐

