61 lines
1.8 KiB
Dart
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;
|
|
}
|
|
}
|