Files
transfer_sms/app/lib/services/sms_reader_service.dart
2026-04-28 22:04:24 +08:00

61 lines
1.8 KiB
Dart

import 'dart:async';
import 'package:telephony/telephony.dart' as tel;
import '../models/sms_message.dart';
class SmsReaderService {
final _telephony = tel.Telephony.instance;
Future<List<SmsMessage>> queryAllSms() async {
final messages = <SmsMessage>[];
final inbox = await _telephony.getInboxSms(
columns: [tel.SmsColumn.ADDRESS, tel.SmsColumn.BODY, tel.SmsColumn.DATE],
);
for (final s in inbox) {
messages.add(SmsMessage(
phoneNumber: s.address ?? '',
contactName: s.address,
content: s.body ?? '',
type: 'received',
smsDate: s.date != null
? DateTime.fromMillisecondsSinceEpoch(s.date!).toUtc().toIso8601String()
: DateTime.now().toUtc().toIso8601String(),
));
}
final sent = await _telephony.getSentSms(
columns: [tel.SmsColumn.ADDRESS, tel.SmsColumn.BODY, tel.SmsColumn.DATE],
);
for (final s in sent) {
messages.add(SmsMessage(
phoneNumber: s.address ?? '',
contactName: s.address,
content: s.body ?? '',
type: 'sent',
smsDate: s.date != null
? DateTime.fromMillisecondsSinceEpoch(s.date!).toUtc().toIso8601String()
: DateTime.now().toUtc().toIso8601String(),
));
}
return messages;
}
Stream<SmsMessage> listenToIncoming() {
final controller = StreamController<SmsMessage>.broadcast();
_telephony.listenIncomingSms(
onNewMessage: (tel.SmsMessage sms) {
controller.add(SmsMessage(
phoneNumber: sms.address ?? '',
contactName: sms.address,
content: sms.body ?? '',
type: 'received',
smsDate: DateTime.now().toUtc().toIso8601String(),
));
},
listenInBackground: false,
);
return controller.stream;
}
}