Flutter短信发送插件sms_advanced的使用

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

Flutter短信发送插件sms_advanced的使用

概述

sms_advanced 是一个用于Flutter的SMS库,允许开发者在Flutter应用程序中发送、接收和查询短信。它提供了丰富的功能,包括但不限于发送短信、接收短信通知、查询短信和线程、获取联系人信息等。

安装与使用

添加依赖

首先,在你的 pubspec.yaml 文件中添加 sms_advanced 依赖:

dependencies:
  flutter:
    sdk: flutter

  sms_advanced: ^1.0.1

然后运行命令 flutter packages get 来安装依赖包。

导入包

在需要使用该库的地方导入 sms_advanced 包:

import 'package:sms_advanced/sms_advanced.dart';

功能示例

发送短信

创建一个 SmsSender 实例,并使用它来发送短信:

void sendSmsExample() async {
  SmsSender sender = SmsSender();
  String address = "123456789"; // 替换为实际电话号码
  SmsMessage message = SmsMessage(address, 'Hello from Flutter!');
  
  message.onStateChanged.listen((state) {
    if (state == SmsMessageState.Sent) {
      print("SMS is sent!");
    } else if (state == SmsMessageState.Delivered) {
      print("SMS is delivered!");
    }
  });

  await sender.sendSms(message);
}

接收短信

订阅 SmsReceiveronSmsReceived 流以监听新收到的短信:

void receiveSmsExample() {
  SmsReceiver receiver = SmsReceiver();
  receiver.onSmsReceived.listen((SmsMessage msg) {
    print("New SMS received: ${msg.body}");
  });
}

查询短信

使用 SmsQuery 类来查询所有或特定条件下的短信:

void querySmsExample() async {
  SmsQuery query = SmsQuery();
  List<SmsMessage> messages = await query.getAllSms;
  for (var message in messages) {
    print("Message: ${message.body}, From: ${message.address}");
  }
}

获取线程(会话)

获取所有的短信会话:

void getAllThreadsExample() async {
  SmsQuery query = SmsQuery();
  List<SmsThread> threads = await query.getAllThreads;
  for (var thread in threads) {
    print("Thread with ${thread.contact?.address}: ${thread.messages.last.body}");
  }
}

示例应用

下面是一个完整的例子,展示了如何在Flutter应用中列出所有短信会话:

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

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

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

  @override
  State<MyApp> createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  final SmsQuery query = SmsQuery();
  List<SmsThread> threads = [];

  @override
  void initState() {
    super.initState();
    query.getAllThreads.then((value) {
      threads = value;
      setState(() {});
    });
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: Scaffold(
        appBar: AppBar(
          title: const Text("SMS Threads"),
        ),
        body: ListView.builder(
          itemCount: threads.length,
          itemBuilder: (BuildContext context, int index) {
            return Column(
              mainAxisSize: MainAxisSize.min,
              children: [
                ListTile(
                  minVerticalPadding: 8,
                  minLeadingWidth: 4,
                  title: Text(threads[index].messages.last.body ?? 'empty'),
                  subtitle: Text(threads[index].contact?.address ?? 'empty'),
                ),
                const Divider()
              ],
            );
          },
        ),
      ),
    );
  }
}

这个简单的应用会在启动时加载所有短信会话,并将每个会话的最新消息及其发件人显示在一个列表中。

通过这些代码片段和完整示例,你可以开始在Flutter项目中集成和使用 sms_advanced 插件进行短信相关的操作。如果你有更多问题或者需要进一步的帮助,请随时提问!


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

1 回复

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


当然,以下是如何在Flutter项目中使用sms_advanced插件发送短信的示例代码。sms_advanced是一个强大的Flutter插件,用于发送短信,支持Android和iOS平台。在使用之前,请确保您已经在pubspec.yaml文件中添加了依赖项。

1. 添加依赖项

首先,在您的pubspec.yaml文件中添加sms_advanced依赖项:

dependencies:
  flutter:
    sdk: flutter
  sms_advanced: ^0.5.0  # 请检查最新版本号

然后运行flutter pub get来获取依赖项。

2. 导入插件

在您的Dart文件中导入sms_advanced插件:

import 'package:sms_advanced/sms_advanced.dart';

3. 请求权限

在Android上,发送短信需要SEND_SMS权限。在iOS上,发送短信需要用户授权。您需要在运行时请求这些权限。

Android 权限请求(在AndroidManifest.xml中)

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

运行时权限请求(在Dart代码中)

import 'package:permission_handler/permission_handler.dart';

Future<void> requestSmsPermission() async {
  var status = await Permission.sms.status;
  if (!status.isGranted) {
    var result = await Permission.sms.request();
    if (!result.isGranted) {
      // 处理权限被拒绝的情况
      throw Exception("SMS permission is required to send messages.");
    }
  }
}

请注意,这里使用了permission_handler插件来处理权限请求。因此,您还需要在pubspec.yaml中添加permission_handler依赖项。

4. 发送短信

下面是一个完整的示例,展示了如何请求权限并发送短信:

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('SMS Advanced Example'),
        ),
        body: Center(
          child: SendSmsButton(),
        ),
      ),
    );
  }
}

class SendSmsButton extends StatefulWidget {
  @override
  _SendSmsButtonState createState() => _SendSmsButtonState();
}

class _SendSmsButtonState extends State<SendSmsButton> {
  @override
  void initState() {
    super.initState();
    _sendSms();
  }

  Future<void> _sendSms() async {
    try {
      await requestSmsPermission();

      String phoneNumber = "1234567890";  // 替换为实际的电话号码
      String message = "Hello, this is a test message!";

      bool result = await SmsAdvanced.sendSms(
        phoneNumber: phoneNumber,
        message: message,
        defaultSlotId: 0,  // 可选参数,默认为0
        sentIntent: null,  // 可选参数,用于监听发送结果(仅Android)
        deliveryIntent: null,  // 可选参数,用于监听送达结果(仅Android)
      );

      if (result) {
        print("SMS sent successfully.");
      } else {
        print("Failed to send SMS.");
      }
    } catch (e) {
      print("Error sending SMS: $e");
    }
  }

  Future<void> requestSmsPermission() async {
    var status = await Permission.sms.status;
    if (!status.isGranted) {
      var result = await Permission.sms.request();
      if (!result.isGranted) {
        throw Exception("SMS permission is required to send messages.");
      }
    }
  }

  @override
  Widget build(BuildContext context) {
    return ElevatedButton(
      onPressed: () {
        // 调用_sendSms方法发送短信
        // 这里已经在initState中调用,仅作为示例可以放在按钮点击事件中
      },
      child: Text('Send SMS'),
    );
  }
}

注意事项

  1. 电话号码格式:确保电话号码的格式符合您所在地区的标准。
  2. 权限处理:在生产环境中,应妥善处理权限被拒绝的情况,并为用户提供友好的提示。
  3. 测试:在实际设备上测试短信发送功能,因为模拟器可能不支持短信发送。

通过上述步骤,您应该能够在Flutter应用中成功使用sms_advanced插件发送短信。

回到顶部