Flutter获取Android SDK版本插件sdk_int的使用

发布于 1周前 作者 eggper 来自 Flutter

Flutter获取Android SDK版本插件sdk_int的使用

此插件可让您获取当前Android系统的SDK版本。它包括所有版本代码以便进行比较。


实现

SDKInt.currentSDKVersion 是一个 Future<int> 类型,返回当前操作系统的SDK版本。


Android实现

使用 Build.VERSION.SDK_INT 来获取当前SDK版本。


示例

import 'package:flutter/material.dart';
import 'package:sdk_int/sdk_int.dart';

void main() {
  runApp(const MaterialApp(home: MyApp()));
}

class MyApp extends StatefulWidget {
  const MyApp({Key? key}) : super(key: key);

  [@override](/user/override)
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      body: Center(
        child: FutureBuilder(
          future: SDKInt.currentSDKVersion,
          builder: (context, AsyncSnapshot<int> snapshot) {
            // 检查是否有数据
            if (snapshot.hasData) {
              return Text(
                "当前SDK版本\n" + snapshot.data.toString(),
                textAlign: TextAlign.center,
              );
            }
            // 如果没有数据,显示空容器
            return const SizedBox.shrink();
          },
        ),
      ),
    );
  }
}

更多关于Flutter获取Android SDK版本插件sdk_int的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter获取Android SDK版本插件sdk_int的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


在Flutter中,你可以通过调用原生Android代码来获取Android设备的SDK版本(即sdk_int)。为了实现这一点,你可以使用MethodChannel来与原生Android代码进行通信。以下是一个完整的示例,展示了如何在Flutter中获取Android SDK版本。

1. 创建Flutter插件

首先,你需要在Flutter项目中创建一个插件来与原生代码通信。不过,为了简化示例,这里我们直接在MainActivity.kt(对于Kotlin项目)或MainActivity.java(对于Java项目)中实现逻辑,并通过MethodChannel暴露给Flutter。

Kotlin示例(MainActivity.kt)

package com.example.myflutterapp

import android.os.Bundle
import io.flutter.embedding.android.FlutterActivity
import io.flutter.embedding.engine.FlutterEngine
import io.flutter.plugin.common.MethodChannel

class MainActivity: FlutterActivity() {
    private val CHANNEL = "com.example.myflutterapp/channel"

    override fun configureFlutterEngine(flutterEngine: FlutterEngine) {
        super.configureFlutterEngine(flutterEngine)
        MethodChannel(flutterEngine.dartExecutor.binaryMessenger, CHANNEL).setMethodCallHandler { call, result ->
            if (call.method == "getAndroidSdkVersion") {
                val sdkVersion = android.os.Build.VERSION.SDK_INT
                result.success(sdkVersion)
            } else {
                result.notImplemented()
            }
        }
    }
}

Java示例(MainActivity.java)

package com.example.myflutterapp;

import android.os.Bundle;
import io.flutter.embedding.android.FlutterActivity;
import io.flutter.embedding.engine.FlutterEngine;
import io.flutter.plugin.common.MethodChannel;

public class MainActivity extends FlutterActivity {
    private static final String CHANNEL = "com.example.myflutterapp/channel";

    @Override
    public void configureFlutterEngine(FlutterEngine flutterEngine) {
        super.configureFlutterEngine(flutterEngine);
        new MethodChannel(flutterEngine.getDartExecutor().getBinaryMessenger(), CHANNEL)
                .setMethodCallHandler(
                        (call, result) -> {
                            if (call.method.equals("getAndroidSdkVersion")) {
                                int sdkVersion = android.os.Build.VERSION.SDK_INT;
                                result.success(sdkVersion);
                            } else {
                                result.notImplemented();
                            }
                        }
                );
    }
}

2. 在Flutter代码中调用原生方法

接下来,在你的Flutter代码中,你可以使用MethodChannel来调用上面定义的getAndroidSdkVersion方法。

import 'package:flutter/material.dart';
import 'package:flutter/services.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatefulWidget {
  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  static const platform = MethodChannel('com.example.myflutterapp/channel');
  int? _androidSdkVersion;
  String? _versionMessage;

  @override
  void initState() {
    super.initState();
    _getAndroidSdkVersion();
  }

  Future<void> _getAndroidSdkVersion() async {
    try {
      final int version = await platform.invokeMethod('getAndroidSdkVersion');
      setState(() {
        _androidSdkVersion = version;
        _versionMessage = 'Android SDK Version: $_androidSdkVersion';
      });
    } on PlatformException catch (e) {
      setState(() {
        _versionMessage = 'Failed to get Android SDK version: '${e.message ?? ''}';
      });
    }
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('Plugin example app'),
        ),
        body: Center(
          child: Text(_versionMessage ?? 'Loading...'),
        ),
      ),
    );
  }
}

在这个Flutter代码中,我们定义了一个MethodChannel,其名称与在MainActivity中定义的名称相匹配。然后,我们调用invokeMethod方法来执行getAndroidSdkVersion方法,并处理返回的结果。

这样,你就可以在Flutter应用中获取并显示Android设备的SDK版本了。

回到顶部