Flutter短信功能插件flutter_sms_plus的使用

Flutter短信功能插件flutter_sms_plus的使用

介绍

这个项目是从由babariviere创建的Flutter SMS插件(Flutter SMS)衍生而来的。
这是一个用于Flutter的短信库。

目前它仅支持Android平台(因为我不拥有Mac设备,所以无法实现iOS支持)。


开始使用

安装

首先,确保你已经熟悉Flutter开发。然后在pubspec.yaml文件的依赖项列表中添加sms插件:

dependencies:
  flutter:
    sdk: flutter

  sms: ^1.0.0

运行以下命令以安装依赖:

flutter pub get

查询短信消息

导入插件并初始化查询对象

首先导入flutter_sms_plus包,并创建一个SmsQuery实例:

import 'package:flutter_sms_plus/flutter_sms_plus.dart';

void main() {
  SmsQuery query = new SmsQuery();
}

获取所有短信消息

通过调用getAllSms方法获取所有短信记录:

List<SmsMessage> messages = await query.getAllSms;

注意await关键字表示getAllSms是一个异步操作,返回的是一个Future


筛选短信消息

通过querySms方法可以根据参数筛选短信记录。例如,查询所有已发送和接收的短信:

await query.querySms({
  kinds: [SmsQueryKind.Inbox, SmsQueryKind.Sent] // 查询收件箱和已发送的短信
});

你也可以根据特定联系人查询短信:

await query.querySms({
  address: "1234567890" // 替换为实际的电话号码
});

获取所有会话线程

通过SmsQuery可以获取所有会话线程:

List<SmsThread> threads = await query.getAllThreads;

每个线程都与一个联系人相关联,可以通过contact属性访问联系人信息。


获取联系人信息

每个会话线程都有一个对应的联系人。Contact类包含联系人的详细信息(如地址、头像、全名)。要访问这些信息,需要导入contact.dart

import 'package:sms/contact.dart';

void main() {
  SmsQuery query = new SmsQuery();
  List<SmsThread> threads = await query.getAllThreads;

  Contact contact = threads.first.contact;
  print(contact.address); // 打印联系人的电话号码
}

查询联系人

你可以通过联系人的电话号码查询联系人信息:

import 'package:sms/contact.dart';

void main() {
  ContactQuery contacts = new ContactQuery();
  Contact contact = await contacts.queryContact("1234567890"); // 替换为实际的电话号码
  print(contact.fullName); // 打印联系人的全名
}

获取联系人头像

你可以获取联系人的大图或缩略图:

Uint8List fullSize = contact.photo.bytes; // 获取联系人大图
Uint8List thumbnail = contact.thumbnail.bytes; // 获取联系人缩略图

发送短信

创建发送者并发送短信

使用SmsSender类发送短信:

import 'package:flutter_sms_plus/flutter_sms_plus.dart';

void main() {
  SmsSender sender = new SmsSender();
  String address = "1234567890"; // 替换为实际的电话号码
  sender.sendSms(new SmsMessage(address, 'Hello flutter!'));
}

监听短信状态

你可以监听短信的状态(如已发送或已送达):

import 'package:flutter_sms_plus/flutter_sms_plus.dart';

void main() {
  SmsSender sender = new SmsSender();
  String address = "1234567890"; // 替换为实际的电话号码

  SmsMessage message = new SmsMessage(address, 'Hello flutter!');
  message.onStateChanged.listen((state) {
    if (state == SmsMessageState.Sent) {
      print("SMS is sent!"); // 短信已发送
    } else if (state == SmsMessageState.Delivered) {
      print("SMS is delivered!"); // 短信已送达
    }
  });

  sender.sendSms(message);
}

监听所有已送达的短信

如果你想监听所有已送达的短信,可以订阅onSmsDelivered事件:

void main() {
  SmsSender sender = new SmsSender();

  sender.onSmsDelivered.listen((SmsMessage message) {
    print('${message.address} received your message.'); // 打印收到短信的电话号码
  });
}

使用其他SIM卡发送短信

你还可以指定使用哪个SIM卡发送短信:

import 'package:flutter_sms_plus/flutter_sms_plus.dart';

void main() {
  SimCardsProvider provider = new SimCardsProvider();
  SimCard card = await provider.getSimCards()[0]; // 获取第一个SIM卡
  SmsSender sender = new SmsSender();
  SmsMessage message = new SmsMessage("1234567890", "message");

  sender.sendSms(message, simCard: card); // 使用指定的SIM卡发送短信
}

注意:使用onSmsDelivered监听器只会通知通过send()方法发送的消息。


接收短信

如果想监听新接收到的短信,可以订阅SmsReceiver实例:

import 'package:flutter_sms_plus/flutter_sms_plus.dart';

void main() {
  SmsReceiver receiver = new SmsReceiver();
  receiver.onSmsReceived.listen((SmsMessage msg) => print(msg.body)); // 打印接收到的短信内容
}

路线图

  • ✅ 支持短信接收
  • ✅ 支持短信发送
  • ✅ 支持短信送达通知
  • ✅ 支持短信查询
  • ✅ 支持会话线程
  • ❌ 不支持MMS接收
  • ❌ 不支持MMS发送
  • ❌ 不支持MMS送达通知
  • ❌ 不支持MMS查询
  • ❌ 不支持多SIM卡
  • ✅ 支持联系人信息
  • ✅ 支持联系人头像(大图、缩略图)
  • ✅ 支持用户基本信息

贡献者


示例代码

完整的示例代码可以在以下链接查看: example/lib/main.dart

import 'package:flutter/widgets.dart';
import './app.dart';

void main() => runApp(new App());

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

1 回复

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


flutter_sms_plus 是一个用于在 Flutter 应用中发送短信的插件。它提供了一个简单的接口,允许开发者直接调用设备的短信发送功能。以下是使用 flutter_sms_plus 插件的基本步骤:

1. 添加依赖

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

dependencies:
  flutter:
    sdk: flutter
  flutter_sms_plus: ^1.0.0  # 请使用最新版本

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

2. 导入包

在你的 Dart 文件中导入 flutter_sms_plus 包:

import 'package:flutter_sms_plus/flutter_sms_plus.dart';

3. 发送短信

使用 flutter_sms_plus 发送短信非常简单。你可以通过调用 sendSMS 方法来发送短信。

void sendSms() async {
  String message = "Hello, this is a test message!";
  List<String> recipients = ["+1234567890", "+0987654321"];

  try {
    await FlutterSmsPlus.sendSMS(
      message: message,
      recipients: recipients,
    );
    print("SMS sent successfully!");
  } catch (e) {
    print("Failed to send SMS: $e");
  }
}

4. 处理权限

在某些设备上,发送短信可能需要用户授予权限。你可以在发送短信之前请求必要的权限。

import 'package:permission_handler/permission_handler.dart';

void requestSmsPermission() async {
  var status = await Permission.sms.status;
  if (!status.isGranted) {
    await Permission.sms.request();
  }
}

在发送短信之前调用 requestSmsPermission 方法:

void sendSmsWithPermission() async {
  await requestSmsPermission();
  sendSms();
}

5. 处理回调

flutter_sms_plus 插件还提供了一些回调来处理短信发送的结果。

void sendSmsWithCallback() async {
  String message = "Hello, this is a test message!";
  List<String> recipients = ["+1234567890", "+0987654321"];

  try {
    await FlutterSmsPlus.sendSMS(
      message: message,
      recipients: recipients,
      onSMSFailed: (error) {
        print("SMS failed to send: $error");
      },
      onSMSSent: () {
        print("SMS sent successfully!");
      },
    );
  } catch (e) {
    print("Failed to send SMS: $e");
  }
}

6. 处理多个收件人

你可以一次性发送短信给多个收件人,只需将多个电话号码添加到 recipients 列表中。

List<String> recipients = ["+1234567890", "+0987654321", "+1122334455"];

7. 处理异常

在发送短信时,可能会遇到各种异常情况,如权限被拒绝、设备不支持短信功能等。确保你处理了这些异常情况。

void sendSmsWithExceptionHandling() async {
  String message = "Hello, this is a test message!";
  List<String> recipients = ["+1234567890", "+0987654321"];

  try {
    await FlutterSmsPlus.sendSMS(
      message: message,
      recipients: recipients,
    );
    print("SMS sent successfully!");
  } on PlatformException catch (e) {
    print("PlatformException: ${e.message}");
  } catch (e) {
    print("Failed to send SMS: $e");
  }
}
回到顶部