Flutter短信发送插件sms的使用

Flutter短信发送插件sms的使用

概述

这是为Flutter设计的一个短信库。目前仅支持Android平台(因为我不拥有Mac设备,所以无法支持iOS)。


开始使用

如果你已经熟悉了Flutter的基本操作,可以通过在pubspec.yaml文件的依赖项中添加sms插件来开始使用。确保版本号为0.2.0或更高。

添加依赖

pubspec.yaml文件中添加以下内容:

dependencies:
  flutter:
    sdk: flutter

  sms: ^0.2.0

然后运行以下命令以获取依赖:

flutter packages get

查询短信消息

首先,导入sms包并创建一个SmsQuery实例。

import 'package:sms/sms.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: getContactAddress()
});

获取所有线程对话

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

List<SmsThread> threads = await query.getAllThreads;

获取联系人信息

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

import 'package:sms/contact.dart';

void main() {
  ...
  Contact contact = threads.first.contact;
  print(contact.address);
}

查询联系人

可以通过联系人地址查询联系人信息:

import 'package:sms/contact.dart';

void main() {
  ContactQuery contacts = new ContactQuery();
  Contact contact = await contacts.queryContact(someAddress());
  print(contact.fullName);
}

获取联系人头像

可以获取联系人的完整大小或缩略图头像:

Uint8List fullSize = contact.photo.bytes;
Uint8List thumbnail = contact.thumbnail.bytes;

获取用户基本信息

有时需要获取手机主人的基本信息,比如头像、地址等:

import 'package:sms/contact.dart';

UserProfileProvider provider = new UserProfileProvider();
UserProfile profile = await provider.getUserProfile();
print(profile.fullName);

发送短信

基本发送短信

创建一个SmsSender实例并发送短信:

import 'package:sms/sms.dart';

void main() {
  SmsSender sender = new SmsSender();
  String address = someAddress();
  ...
  sender.sendSms(new SmsMessage(address, 'Hello flutter!'));
}

监听短信状态

可以通过监听消息的状态来获取发送和投递的反馈:

import 'package:sms/sms.dart';

void main() {
  SmsSender sender = new SmsSender();
  String address = someAddress();
  ...
  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卡发送短信:

void main() {
  SimCardsProvider provider = new SimCardsProvider();
  SimCard card = await provider.getSimCards()[0];
  SmsSender sender = new SmsSender();
  SmsMessage message = new SmsMessage("address", "message");
  sender.sendSMS(message, simCard: card);
}

注意:使用onSmsDelivered事件只会通知通过SmsSender.send()发送的消息。


接收短信

如果想接收新短信通知,可以订阅SmsReceiver实例:

import 'package:sms/sms.dart';

void main() {
  SmsReceiver receiver = new SmsReceiver();
  receiver.onSmsReceived.listen((SmsMessage msg) => print(msg.body));
}

路线图

  • ✅ 支持短信接收
  • ✅ 支持短信发送
  • ✅ 支持短信投递状态
  • ✅ 支持短信查询
  • ✅ 支持线程对话
  • ❌ 不支持MMS接收
  • ❌ 不支持MMS发送
  • ❌ 不支持MMS投递
  • ❌ 不支持MMS查询
  • ❌ 不支持多SIM卡
  • ✅ 支持联系人查询
  • ✅ 支持联系人头像(完整大小、缩略图)
  • ✅ 支持用户基本信息

贡献者

  • babariviere
  • joanpablo
  • saifulfrank

示例代码

以下是一个完整的示例代码,展示了如何使用插件的基本功能:

import 'package:flutter/material.dart';
import 'package:sms/sms.dart';
import 'package:sms/contact.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 SMS Example')),
        body: Center(
          child: ElevatedButton(
            onPressed: () async {
              // 初始化短信查询器
              SmsQuery query = new SmsQuery();

              // 获取所有短信
              List<SmsMessage> messages = await query.getAllSms;

              // 打印所有短信内容
              messages.forEach((message) {
                print('From: ${message.address}, Body: ${message.body}');
              });

              // 初始化短信发送器
              SmsSender sender = new SmsSender();
              String address = "1234567890"; // 替换为目标电话号码
              SmsMessage smsMessage = new SmsMessage(address, 'Hello Flutter!');

              // 发送短信并监听状态
              smsMessage.onStateChanged.listen((state) {
                if (state == SmsMessageState.Sent) {
                  print("SMS is sent!");
                } else if (state == SmsMessageState.Delivered) {
                  print("SMS is delivered!");
                }
              });

              // 发送短信
              sender.sendSms(smsMessage);
            },
            child: Text('Send SMS'),
          ),
        ),
      ),
    );
  }
}

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

1 回复

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


在Flutter中,你可以使用 sms 插件来发送短信。sms 插件提供了一个简单的接口来发送短信,并且支持在Android和iOS平台上使用。以下是如何使用 sms 插件发送短信的步骤:

1. 添加依赖

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

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

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

2. 导入插件

在你的Dart文件中导入 sms 插件:

import 'package:sms/sms.dart';

3. 发送短信

你可以使用 SmsSender 类来发送短信。以下是一个简单的示例:

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

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

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

  void sendSms() {
    SmsSender sender = SmsSender();
    String address = '1234567890'; // 接收者的电话号码
    String message = 'Hello, this is a test message!'; // 短信内容

    sender.sendSms(SmsMessage(address, message)).then((result) {
      print('SMS sent: $result');
    }).catchError((error) {
      print('Failed to send SMS: $error');
    });
  }
}

4. 处理权限

在Android平台上,发送短信需要 SEND_SMS 权限。你需要在 AndroidManifest.xml 文件中添加以下权限:

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

在iOS平台上,发送短信不需要额外的权限,但你需要确保你的应用已经正确配置了相关的功能。

5. 运行应用

现在你可以运行你的Flutter应用,并点击按钮来发送短信。

注意事项

  • 在Android上,发送短信可能会产生费用,具体取决于用户的运营商和套餐。
  • 在iOS上,发送短信会使用系统默认的短信应用,用户需要手动确认发送。

其他功能

sms 插件还提供了其他功能,例如接收短信、查询短信等。你可以查看插件的官方文档来了解更多信息。

示例代码

以下是一个完整的示例代码,展示了如何使用 sms 插件发送短信:

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

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

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

  void sendSms() {
    SmsSender sender = SmsSender();
    String address = '1234567890'; // 接收者的电话号码
    String message = 'Hello, this is a test message!'; // 短信内容

    sender.sendSms(SmsMessage(address, message)).then((result) {
      print('SMS sent: $result');
    }).catchError((error) {
      print('Failed to send SMS: $error');
    });
  }
}
回到顶部