Flutter短信功能插件sms_plugin_mp的使用
Flutter短信功能插件sms_plugin_mp的使用
简介
这是一个用于Flutter的短信库。
开始使用
安装和使用
首先,你需要在pubspec.yaml
文件的依赖列表中添加sms_plugin_mp
(版本0.0.3或更高):
dependencies:
flutter:
sdk: flutter
sms_plugin_mp: ^0.0.3
然后在控制台运行命令flutter packages get
。
查询短信消息
导入sms_plugin_mp
并创建一个SmsQuery
类的实例:
import 'package:sms_plugin_mp/sms_plugin.dart';
void main() {
SmsQuery query = new SmsQuery();
}
获取所有短信消息
List<SmsMessage> messages = await query.getAllSms;
注意: 使用await
关键字意味着getAllSms
方法是异步解析的,并返回一个Future。要使用await
,你必须在一个标记为async
的函数中。
过滤短信消息
SmsQuery
类中的querySms
方法返回与提供的参数匹配的过滤后的短信消息列表。例如,查询所有发送和接收的短信消息,可以使用以下代码:
await query.querySms({
kinds: [SmsQueryKind.Inbox, SmsQueryKind.Sent]
});
你也可以查询特定联系人发送和接收的所有短信消息:
await query.querySms({
address: getContactAddress()
});
获取所有线程对话
使用SmsQuery
还可以获取整个对话列表:
List<SmsThread> threads = await query.getAllThreads;
提取信息
List<SmsThread> threads = await query.getAllThreads;
for( var index = num ; index >= threads.length; index-- ) {
String sendernumber = threads[index].contact?.address;
String sim = threads[index].messages.first.sim.toString();
String message = threads[index].messages.first.body;
print('sender number: $sendernumber');
print('reciever sim: $sim');
print('message: $message');
}
获取联系人信息
每个对话线程都关联着一个联系人。Contact
类包含线程联系人的所有信息(地址、照片、全名)。要访问Contact
类,必须将'package:sms_plugin_mp/contact.dart'
导入到你的Dart文件中:
import 'package:sms_plugin_mp/contact.dart';
void main() {
...
Contact contact = threads.first.contact;
print(contact.address);
}
查询联系人
你还可以通过联系人的地址(电话号码)查询联系人:
import 'package:sms_plugin_mp/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_plugin_mp/contact.dart';
UserProfileProvider provider = new UserProfileProvider();
UserProfile profile = await provider.getUserProfile();
print(profile.fullName);
发送短信
要发送短信,只需创建一个SmsSender
类的实例:
import 'package:sms_plugin_mp/sms_plugin.dart';
void main() {
SmsSender sender = new SmsSender();
String address = someAddress();
...
sender.sendSms(new SmsMessage(address, 'Hello flutter world!'));
}
为了在消息发送和/或送达时收到通知,你必须向你的消息添加一个监听器:
import 'package:sms_plugin_mp/sms_plugin.dart';
void main() {
SmsSender sender = new SmsSender();
String address = someAddress();
...
SmsMessage message = new SmsMessage(address, 'Hello flutter world!');
message.onStateChanged.listen((state) {
if (state == SmsMessageState.Sent) {
print("SMS is sent!");
} else if (state == SmsMessageState.Delivered) {
print("SMS is delivered!");
}
});
sender.sendSms(message);
}
你也可以订阅SmsSender
类实例的onSmsDelivered
来接收已发送消息的通知:
void main() {
...
SmsSender sender = new SmsSender();
sender.onSmsDelivered.listen((SmsMessage message){
print('${message.address} received your message.');
}));
}
你还可以使用其他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);
}
注意: 使用SmsSender
的onSmsDelivered
只会通知已通过SmsSender.send()
发送的消息的监听器。
接收短信
如果想被通知新消息的到来,你必须订阅一个SmsReceiver
类的实例:
import 'package:sms_plugin_mp/sms_plugin.dart';
void main() {
SmsReceiver receiver = new SmsReceiver();
receiver.onSmsReceived.listen((SmsMessage msg) => print(msg.body));
}
删除短信
目前只支持逐个删除。别忘了让你的短信应用成为默认短信应用。
import 'package:sms_plugin_mp/sms_plugin.dart';
void main() {
SmsRemover smsRemover = SmsRemover();
bool value = await smsRemover.removeSmsById(sms.id, _smsThread.threadId);
}
Android集成
活动更改
注意,sms_plugin_mp
需要使用FragmentActivity
而不是Activity
。要更新你的应用:
- 如果你直接使用
FlutterActivity
,将其更改为AndroidManifest.xml
中的FlutterFragmentActivity
。 - 如果你使用的是自定义活动,请更新你的
MainActivity.java
:
import io.flutter.embedding.android.FlutterFragmentActivity;
public class MainActivity extends FlutterFragmentActivity {
// ...
}
或者MainActivity.kt
:
import io.flutter.embedding.android.FlutterFragmentActivity
class MainActivity: FlutterFragmentActivity() {
// ...
}
更多关于Flutter短信功能插件sms_plugin_mp的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter短信功能插件sms_plugin_mp的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
在Flutter中,sms_plugin_mp
是一个用于发送和接收短信的插件,特别是在多平台(如iOS和Android)开发中非常有用。以下是如何在Flutter项目中集成和使用 sms_plugin_mp
插件的一个基本示例。
1. 添加依赖
首先,你需要在 pubspec.yaml
文件中添加 sms_plugin_mp
的依赖:
dependencies:
flutter:
sdk: flutter
sms_plugin_mp: ^最新版本号 # 请替换为实际的最新版本号
然后运行 flutter pub get
来获取依赖。
2. 导入插件
在你的 Dart 文件中导入插件:
import 'package:sms_plugin_mp/sms_plugin_mp.dart';
3. 配置权限
Android
在 android/app/src/main/AndroidManifest.xml
文件中添加短信发送和接收权限:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.yourapp">
<uses-permission android:name="android.permission.SEND_SMS"/>
<uses-permission android:name="android.permission.RECEIVE_SMS"/>
<uses-permission android:name="android.permission.READ_SMS"/>
<application
... >
<!-- 其他配置 -->
</application>
</manifest>
iOS
对于iOS,你需要在 Info.plist
文件中添加权限请求描述。打开 ios/Runner/Info.plist
并添加以下条目:
<key>NSMessageUsageDescription</key>
<string>This app needs access to send and receive SMS messages.</string>
4. 请求权限(可选)
在发送短信前,你可能需要请求用户授予权限。这里是一个简单的权限请求示例:
Future<void> requestSmsPermissions() async {
bool hasPermission = await SmsPluginMp.hasSendSmsPermission;
if (!hasPermission) {
bool permissionGranted = await SmsPluginMp.requestSendSmsPermission;
if (!permissionGranted) {
// 处理权限被拒绝的情况
}
}
}
5. 发送短信
使用 SmsPluginMp
发送短信:
Future<void> sendSms(String phoneNumber, String message) async {
try {
bool success = await SmsPluginMp.sendSms(
phoneNumber: phoneNumber,
message: message,
);
if (success) {
print("SMS sent successfully!");
} else {
print("Failed to send SMS.");
}
} catch (e) {
print("Error sending SMS: $e");
}
}
6. 监听短信(仅适用于Android,iOS需要额外配置)
由于监听短信涉及更多安全和隐私考虑,这里仅提供一个基本的监听注册示例,具体实现需根据平台文档进行:
void listenForIncomingSms() {
SmsPluginMp.smsReceivedStream.listen((SmsMessage message) {
print("Received SMS: ${message.body} from ${message.address}");
});
}
注意:监听短信在iOS上可能受到严格限制,通常需要使用特定的API和权限,且用户必须明确授予访问权限。
完整示例
以下是一个完整的示例,将上述所有步骤整合在一起:
import 'package:flutter/material.dart';
import 'package:sms_plugin_mp/sms_plugin_mp.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatefulWidget {
@override
_MyAppState createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
@override
void initState() {
super.initState();
requestSmsPermissions();
listenForIncomingSms();
}
Future<void> requestSmsPermissions() async {
bool hasPermission = await SmsPluginMp.hasSendSmsPermission;
if (!hasPermission) {
bool permissionGranted = await SmsPluginMp.requestSendSmsPermission;
if (!permissionGranted) {
// Handle permission denied
}
}
}
void listenForIncomingSms() {
SmsPluginMp.smsReceivedStream.listen((SmsMessage message) {
print("Received SMS: ${message.body} from ${message.address}");
});
}
Future<void> _sendSms() async {
String phoneNumber = '+1234567890'; // 替换为实际电话号码
String message = 'Hello, this is a test SMS!';
try {
bool success = await SmsPluginMp.sendSms(
phoneNumber: phoneNumber,
message: message,
);
if (success) {
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(content: Text('SMS sent successfully!')),
);
} else {
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(content: Text('Failed to send SMS.')),
);
}
} catch (e) {
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(content: Text('Error sending SMS: $e')),
);
}
}
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('SMS Plugin Demo'),
),
body: Center(
child: ElevatedButton(
onPressed: _sendSms,
child: Text('Send SMS'),
),
),
),
);
}
}
这个示例展示了如何集成 sms_plugin_mp
插件,请求发送短信权限,发送短信,以及监听收到的短信(在支持的平台上)。请确保在实际应用中处理所有可能的错误和异常情况,并根据需要调整权限请求和用户体验。