Flutter获取电话信息插件flutter_telephony_info的使用
Flutter获取电话信息插件flutter_telephony_info的使用
插件简介
flutter_telephony_info
是一个轻量级的平台插件,通过 Pigeon
代码生成器与 Android 设备交互,以从 Android 平台的 Telephony
模块中获取信息。该插件适用于 Android 12 及以上版本。
获取的信息
- 运营商名称
- 移动网络代码 (MNC)
- 移动网络代(如 LTE, HSDPA 等)
- 移动网络类型(如 5G, 4G … 2G)
- 小区 ID (cid)
- 信号强度
最低 SDK 版本
应用的最低 SDK 版本必须为 30。请确保在 android/app/build.gradle
文件中设置 minSdkVersion
为 30:
defaultConfig {
...
minSdkVersion 30
...
}
必要权限
插件需要以下 Android 权限才能正常工作:
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
注意事项
- 注意! 该插件仅适用于 Android 12 及以上版本。
- 别忘了开启 GPS,因为某些信息(如信号强度)依赖于位置服务。
使用示例
以下是一个完整的示例代码,展示了如何使用 flutter_telephony_info
插件来获取电话信息。
示例代码
import 'package:flutter/material.dart';
import 'dart:async';
import 'package:flutter/services.dart';
import 'package:flutter_telephony_info/flutter_telephony_info.dart';
import 'package:permission_handler/permission_handler.dart';
void main() async {
// 确保 Flutter 引擎已初始化
WidgetsFlutterBinding.ensureInitialized();
// 请求必要的权限
await [Permission.phone, Permission.locationWhenInUse].request();
// 启动应用
runApp(const MyApp());
}
class MyApp extends StatefulWidget {
const MyApp({super.key});
[@override](/user/override)
State<MyApp> createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
List<TelephonyInfo?>? _telephonyInfo;
final _flutterTelephonyInfoPlugin = TelephonyAPI();
[@override](/user/override)
void initState() {
super.initState();
// 初始化平台状态
initPlatformState();
}
// 异步方法用于初始化平台状态
Future<void> initPlatformState() async {
List<TelephonyInfo?>? telephonyInfo;
try {
// 获取电话信息
telephonyInfo = await _flutterTelephonyInfoPlugin.getInfo();
} on PlatformException {
// 处理平台异常
telephonyInfo = null;
}
// 如果 widget 已经从树中移除,则不更新状态
if (!mounted) return;
// 更新状态
setState(() {
_telephonyInfo = telephonyInfo;
});
}
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: const Text('Plugin example app'),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text('SIM 运营商: ${_telephonyInfo?.first?.displayName ?? '未知'}'),
Text('移动网络代码 (MNC): ${_telephonyInfo?.first?.mnc ?? '未知'}'),
Text('移动网络代: ${_telephonyInfo?.first?.networkGeneration ?? '未知'}'),
Text('移动网络类型: ${_telephonyInfo?.first?.radioType ?? '未知'}'),
Text('小区 ID (cid): ${_telephonyInfo?.first?.cid ?? '未知'}'),
Text('信号强度: ${_telephonyInfo?.first?.signalStrength ?? '未知'}'),
],
),
),
),
);
}
}
更多关于Flutter获取电话信息插件flutter_telephony_info的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
1 回复