Flutter电话信息访问插件flutter_telephony的使用

flutter_telephony 插件可以帮助开发者在 Flutter 应用中访问设备的电话相关信息。该插件基于 Android 的 TelephonyManager 和 iOS 的 CoreTelephony 提供支持。

安装

pubspec.yaml 文件配置:

dependencies:
  flutter_telephony: any

或者从 GitHub 获取最新版本:

dependencies:
  flutter_telephony:
    git:
      url: git://github.com/aliazimoshan/flutter_telephony.git

Android 配置

在 Android 中使用 flutter_telephony 时,需要添加以下权限到 AndroidManifest.xml 文件中:

<manifest
    ...
    xmlns:tools="http://schemas.android.com/tools" >
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
    <uses-permission android:name="android.permission.READ_PHONE_STATE"/>
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
    <uses-permission android:name="android.permission.MODIFY_PHONE_STATE"/>
    <uses-permission android:name="android.permission.READ_SMS"/>
    <uses-permission android:name="android.permission.READ_PHONE_NUMBERS"/>
    ...
</manifest>

支持的功能:

  • cellInfocellLocation:获取当前蜂窝网络的信息。
  • dataNetworkType:获取数据网络类型。
  • deviceSoftwareVersion:获取设备软件版本。
  • IMEI (International Mobile Equipment Identity):获取国际移动设备标识符。
  • isDataEnabled:检查是否启用数据连接。
  • line1Number:获取电话号码。
  • MEID (Mobile Equipment Identifier):获取移动设备标识符。
  • Network Access Identifier (NAI):获取网络接入标识符。

iOS 配置

在 iOS 上,flutter_telephony 可以获取有关用户蜂窝服务提供商的信息。

支持的功能:

  • allowsVOIP:指示运营商是否允许在其网络上进行 VoIP 呼叫。
  • carrierName:获取用户的家庭蜂窝服务提供商名称。
  • isoCountryCode:获取用户蜂窝服务提供商的 ISO 国家代码。
  • mobileCountryCode:获取用户蜂窝服务提供商的移动国家代码 (MCC)。
  • mobileNetworkCode:获取用户蜂窝服务提供商的移动网络代码。

示例代码

以下是一个完整的示例代码,展示如何使用 flutter_telephony 插件来获取电话相关信息。

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

void main() => runApp(MyApp());

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

class _MyAppState extends State<MyApp> {
  FlutterTelephony _info;

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

  Future<void> getFlutterTelephony() async {
    FlutterTelephony info;
    try {
      info = await FlutterTelephony.info;
    } on PlatformException {}

    if (!mounted) return;

    setState(() {
      _info = info;
    });
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('Flutter Telephony Example'),
        ),
        body: Center(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: [
            Text('Phone Number: ${_info?.line1Number ?? "N/A"}\n'),
            Text('Device Software Version: ${_info?.deviceSoftwareVersion ?? "N/A"}\n'),
            Text('IMEI: ${_info?.imei ?? "N/A"}\n'),
            Text('MEID: ${_info?.meid ?? "N/A"}\n'),
            ],
          ),
        ),
      ),
    );
  }
}

说明

  1. 导入必要的包flutter_telephony 是主要的依赖包,用于访问电话信息。
  2. 初始化插件:在 initState 方法中调用 getFlutterTelephony() 方法获取电话信息。
  3. UI 显示:通过 Text 小部件将获取到的信息显示在界面上。

运行效果

运行上述代码后,应用会显示类似以下内容:

Phone Number: 1234567890
Device Software Version: 1.0.0
IMEI: 351746111111119
MEID: N/A

更多关于Flutter电话信息访问插件flutter_telephony的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter电话信息访问插件flutter_telephony的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


flutter_telephony 是一个 Flutter 插件,用于访问设备的电话和信息功能。它允许你获取 SIM 卡信息、设备电话状态、发送短信等。以下是如何使用 flutter_telephony 插件的详细步骤。

1. 添加依赖

首先,你需要在 pubspec.yaml 文件中添加 flutter_telephony 插件的依赖:

dependencies:
  flutter:
    sdk: flutter
  flutter_telephony: ^0.1.0  # 请检查最新版本

然后运行 flutter pub get 来安装依赖。

2. 配置权限

为了访问电话和信息功能,你需要在 AndroidManifest.xml 文件中添加以下权限:

<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<uses-permission android:name="android.permission.SEND_SMS"/>
<uses-permission android:name="android.permission.RECEIVE_SMS"/>
<uses-permission android:name="android.permission.READ_SMS"/>

3. 请求运行时权限

在 Android 6.0(API 23)及以上版本中,你需要在运行时请求权限。你可以使用 permission_handler 插件来请求权限。

首先,添加 permission_handler 依赖:

dependencies:
  permission_handler: ^10.0.0  # 请检查最新版本

然后,在代码中请求权限:

import 'package:permission_handler/permission_handler.dart';

Future<void> requestPermissions() async {
  var status = await Permission.phone.status;
  if (!status.isGranted) {
    await Permission.phone.request();
  }
}

4. 使用 flutter_telephony 插件

以下是一些常见的使用示例:

获取 SIM 卡信息

import 'package:flutter_telephony/flutter_telephony.dart';

Future<void> getSimInfo() async {
  FlutterTelephony flutterTelephony = FlutterTelephony();
  var simInfo = await flutterTelephony.getSimInfo();
  print('SIM Info: $simInfo');
}

获取设备电话状态

import 'package:flutter_telephony/flutter_telephony.dart';

Future<void> getPhoneState() async {
  FlutterTelephony flutterTelephony = FlutterTelephony();
  var phoneState = await flutterTelephony.getPhoneState();
  print('Phone State: $phoneState');
}

发送短信

import 'package:flutter_telephony/flutter_telephony.dart';

Future<void> sendSms() async {
  FlutterTelephony flutterTelephony = FlutterTelephony();
  await flutterTelephony.sendSms(phoneNumber: '1234567890', message: 'Hello, this is a test message!');
}

5. 处理权限请求结果

在请求权限后,你需要检查权限是否被授予,并根据结果执行相应的操作。

Future<void> checkAndRequestPermissions() async {
  var status = await Permission.phone.status;
  if (status.isGranted) {
    // 权限已授予,执行相关操作
    getSimInfo();
    getPhoneState();
    sendSms();
  } else {
    // 权限未授予,提示用户
    print('Permission not granted');
  }
}

6. 完整示例

以下是一个完整的示例,展示了如何使用 flutter_telephony 插件:

import 'package:flutter/material.dart';
import 'package:flutter_telephony/flutter_telephony.dart';
import 'package:permission_handler/permission_handler.dart';

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

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Flutter Telephony Example'),
        ),
        body: Center(
          child: ElevatedButton(
            onPressed: () {
              checkAndRequestPermissions();
            },
            child: Text('Get SIM Info and Send SMS'),
          ),
        ),
      ),
    );
  }
}

Future<void> checkAndRequestPermissions() async {
  var status = await Permission.phone.status;
  if (status.isGranted) {
    getSimInfo();
    getPhoneState();
    sendSms();
  } else {
    await Permission.phone.request();
  }
}

Future<void> getSimInfo() async {
  FlutterTelephony flutterTelephony = FlutterTelephony();
  var simInfo = await flutterTelephony.getSimInfo();
  print('SIM Info: $simInfo');
}

Future<void> getPhoneState() async {
  FlutterTelephony flutterTelephony = FlutterTelephony();
  var phoneState = await flutterTelephony.getPhoneState();
  print('Phone State: $phoneState');
}

Future<void> sendSms() async {
  FlutterTelephony flutterTelephony = FlutterTelephony();
  await flutterTelephony.sendSms(phoneNumber: '1234567890', message: 'Hello, this is a test message!');
}
回到顶部