sms_advanced 0.0.1 sms_advanced: ^0.0.1 copied to clipboard
This is an SMS library for Flutter. Its allow to send, receive, query sms messages, sms delivery and query contacts info. Currently supporting only android
sms_advanced #
This is an SMS library for Flutter.
It only supports Android for now. iOS and MMS is not in the scope of this project.
Getting Started #
Installation and Usage #
Once you're familiar with Flutter you may install this package adding sms_advanced
(1.0.0 or higher) to the dependencies list of the pubspec.yaml
file as follow:
...
dependencies:
flutter:
sdk: flutter
sms_advanced: ^1.0.0
...
Then run the command flutter packages get
on the console.
Querying SMS messages #
Add the import statement for sms_advanced
and create an instance of the SmsQuery class:
import 'package:sms_advanced/sms_advanced.dart';
void main() {
SmsQuery query = new SmsQuery();
}
Getting all SMS messages #
List<SmsMessage> messages = await query.getAllSms;
Note: the use of await
keyword means that getAllSms
is resolved asynchronously and a Future is retorned. To use await, you must be in a function marked async
.
Filtering SMS messages #
The method querySms
from the SmsQuery
class returns a list of filtered SMS messages that match the supplied parameters. For example, for querying all the SMS messages sent and received, you could this code:
await query.querySms({
kinds: [SmsQueryKind.Inbox, SmsQueryKind.Sent]
});
You can also query all the SMS messages sent and received from a specific contact:
await query.querySms({
address: getContactAddress()
});
Getting all Threads Conversations #
With SmsQuery
you can also get the entire list of conversations:
List<SmsThread> threads = await query.getAllThreads;
Getting the Contact info #
Each conversation thread is related with a Contact.
The class Contact
contains all the info of a thread contact (address, photo, full name).
To get access to Contact
class you must import 'package:sms_advanced/contact.dart'
into your dart file:
import 'package:sms_advanced/contact.dart';
void main() {
...
Contact contact = threads.first.contact;
print(contact.address);
}
Querying Contact #
You can also query a contact by its address (phone number):
import 'package:sms_advanced/contact.dart';
void main() {
ContactQuery contacts = new ContactQuery();
Contact contact = await contacts.queryContact(someAddress());
print(contact.fullName);
}
String getAddress() { return someRandomAddress; }
The Contact photo #
You can retrieve the photo of the contact (full size or thumbnail):
...
Uint8List fullSize = contact.photo.bytes;
Uint8List thumbnail = contact.thumbnail.bytes;
User Profile #
Some times it is useful to request basic info of the phone owner, like the contact photo, addresses, etc.
import 'package:sms_advanced/contact.dart';
UserProfileProvider provider = new UserProfileProvider();
UserProfile profile = await provider.getUserProfile();
print(profile.fullName);
Sending SMS #
What about sending a SMS? All you have to do is to create an instance of the SmsSender
class:
import 'package:sms_advanced/sms_advanced.dart';
void main() {
SmsSender sender = new SmsSender();
String address = someAddress();
...
sender.sendSms(new SmsMessage(address, 'Hello flutter world!'));
}
To be notified when the message is sent and/or delivered, you must add a listener to your message:
import 'package:sms_advanced/sms_advanced.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);
}
Some times it is useful to be notified of delivered messages regardless of the message. To do that you must subscribe to the onSmsDelivered
of the SmsSender
class instance:
void main() {
...
SmsSender sender = new SmsSender();
sender.onSmsDelivered.listen((SmsMessage message){
print('${message.address} received your message.');
}));
}
You can also send with another SimCard:
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);
}
Note: Using the onSmsDelivered
from the SmsSender
will only notify to listeners of messages that has been sent through SmsSender.send()
.
Receiving SMS #
If you want to be notified for incoming new messages you must subscribe to an instance of the SmsReceiver
class:
import 'package:sms_advanced/sms_advanced.dart';
void main() {
SmsReceiver receiver = new SmsReceiver();
receiver.onSmsReceived.listen((SmsMessage msg) => print(msg.body));
}
Deleting SMS #
Only deleting one by one is available. Don't forget to make your sms app the default sms app. blogpost guide
import 'package:sms_advanced/sms_advanced.dart';
void main() {
SmsRemover smsRemover = SmsRemover();
<boolean value> = await smsRemover.removeSmsById(sms.id, _smsThread.threadId);
}
Roadmap #
- ✅ SMS Receiver
- ✅ SMS Sender
- ✅ SMS Delivery
- ✅ SMS Query
- ✅ SMS Thread
- ✅ Contact
- ✅ Contact Photo (full size, thumbnail)
- ✅ User profile (basic info)
- ✅ SMS Delete One-by-one
MMS and iOS is not in the scope of this project. If someone wants to add the code and make a merge request for it, I am happy to include it.
Contributions #
Any contribution is welcome.