0 purchases
sms advanced
sms_advanced #
This is an SMS library for Flutter.
Getting Started #
Installation and Usage #
Once you're familiar with Flutter you may install this package adding sms_advanced (1.0.1 or higher) to the dependencies list of the pubspec.yaml file as follow:
...
dependencies:
flutter:
sdk: flutter
sms_advanced: ^1.0.1
...
copied to clipboard
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();
}
copied to clipboard
Getting all SMS messages #
List<SmsMessage> messages = await query.getAllSms;
copied to clipboard
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]
});
copied to clipboard
You can also query all the SMS messages sent and received from a specific contact:
await query.querySms({
address: getContactAddress()
});
copied to clipboard
Getting all Threads Conversations #
With SmsQuery you can also get the entire list of conversations:
List<SmsThread> threads = await query.getAllThreads;
copied to clipboard
extract information #
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');
}
copied to clipboard
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);
}
copied to clipboard
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; }
copied to clipboard
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;
copied to clipboard
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);
copied to clipboard
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!'));
}
copied to clipboard
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);
}
copied to clipboard
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.');
}));
}
copied to clipboard
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);
}
copied to clipboard
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));
}
copied to clipboard
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);
}
copied to clipboard
Roadmap #
IOS
Web
Android
SMS Sender
✓
✓
✓
SMS Receiver
✓
SMS Delivery
✓
SMS Query
✓
SMS Thread
✓
Contact
✓
Contact Photo (full size, thumbnail)
✓
User profile (basic info)
✓
SMS Delete One-by-one
✓
Android Integration #
Activity Changes #
Note that sms_advanced requires the use of a FragmentActivity instead of an
Activity. To update your application:
If you are using FlutterActivity directly, change it to
FlutterFragmentActivity in your AndroidManifest.xml.
If you are using a custom activity, update your MainActivity.java:
import io.flutter.embedding.android.FlutterFragmentActivity;
public class MainActivity extends FlutterFragmentActivity {
// ...
}
copied to clipboard
or MainActivity.kt:
import io.flutter.embedding.android.FlutterFragmentActivity
class MainActivity: FlutterFragmentActivity() {
// ...
}
copied to clipboard
to inherit from FlutterFragmentActivity.
Contributions #
Any contribution is welcome.
For personal and professional use. You cannot resell or redistribute these repositories in their original state.
There are no reviews.