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

Flutter中如何检测设备日期与时间是自动还是手动设置

检测设备日期时间的设置模式(自动/手动)

在Flutter中,你可以通过原生平台API调用或现成插件来判断设备的日期时间是自动同步还是手动设置的,以下是具体实现方案:

方案一:使用device_info_plus插件(推荐)

这个插件已经封装了Android和iOS的系统设置信息,无需自己编写原生代码。

步骤1:添加依赖

在pubspec.yaml中加入:

dependencies:
  device_info_plus: ^9.1.0

步骤2:编写检测代码

import 'package:device_info_plus/device_info_plus.dart';
import 'package:flutter/foundation.dart';

Future<bool> checkDateTimeAutoSetting() async {
  final deviceInfo = DeviceInfoPlugin();
  
  if (defaultTargetPlatform == TargetPlatform.android) {
    final androidInfo = await deviceInfo.androidInfo;
    // 返回null时默认按手动处理
    return androidInfo.isAutoTimeEnabled ?? false;
  } else if (defaultTargetPlatform == TargetPlatform.iOS) {
    final iosInfo = await deviceInfo.iosInfo;
    return iosInfo.isAutomaticDateAndTimeEnabled;
  }
  
  // 其他平台(如Web、桌面)暂不支持,返回默认值
  return false;
}

方案二:自定义MethodChannel调用原生API

如果不想依赖第三方插件,可以直接通过MethodChannel调用原生系统API:

Android端(Kotlin)

在MainActivity.kt中添加通道处理逻辑:

import android.provider.Settings
import io.flutter.embedding.android.FlutterActivity
import io.flutter.embedding.engine.FlutterEngine
import io.flutter.plugin.common.MethodChannel

class MainActivity : FlutterActivity() {
    private val CHANNEL = "your.app.package/datetime_settings"

    override fun configureFlutterEngine(flutterEngine: FlutterEngine) {
        super.configureFlutterEngine(flutterEngine)
        MethodChannel(flutterEngine.dartExecutor.binaryMessenger, CHANNEL).setMethodCallHandler { call, result ->
            when (call.method) {
                "isAutoDateTimeSet" -> {
                    val isAutoEnabled = Settings.Global.getInt(contentResolver, Settings.Global.AUTO_TIME, 0) == 1
                    result.success(isAutoEnabled)
                }
                else -> result.notImplemented()
            }
        }
    }
}

iOS端(Swift)

在AppDelegate.swift中添加通道处理逻辑:

import UIKit
import Flutter

@UIApplicationMain
@objc class AppDelegate: FlutterAppDelegate {
    private let CHANNEL = "your.app.package/datetime_settings"

    override func application(
        _ application: UIApplication,
        didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
    ) -> Bool {
        let controller : FlutterViewController = window?.rootViewController as! FlutterViewController
        let channel = FlutterMethodChannel(name: CHANNEL, binaryMessenger: controller.binaryMessenger)
        
        channel.setMethodCallHandler { [weak self] call, result in
            guard let self = self else { return }
            if call.method == "isAutoDateTimeSet" {
                let isAutoEnabled = UIDevice.current.isAutomaticDateAndTimeEnabled
                result.success(isAutoEnabled)
            } else {
                result.notImplemented()
            }
        }
        return super.application(application, didFinishLaunchingWithOptions: launchOptions)
    }
}

Flutter端调用代码

import 'package:flutter/services.dart';

const MethodChannel _channel = MethodChannel('your.app.package/datetime_settings');

Future<bool> checkDateTimeAutoSetting() async {
  try {
    return await _channel.invokeMethod('isAutoDateTimeSet');
  } on PlatformException catch (e) {
    print("获取设置失败: ${e.message}");
    return false;
  }
}

注意事项

  • Android端:读取AUTO_TIME设置无需额外权限,系统已允许应用访问该信息。
  • iOS端:isAutomaticDateAndTimeEnabled属性仅支持iOS 10.0及以上版本,低版本设备需额外兼容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 14:26:11