A Flutter plugin fork from telephony to use telephony features such as fetch network info, start phone calls, send and receive SMS, and fixed for listen for incoming SMS.
Package selection guidance compiled from public package information, community data, and project usage.
Another Telephony is a Flutter plugin forked from the original telephony package, designed to enable Android apps to access telephony features. It allows developers to fetch network information, initiate phone calls, send and receive SMS messages, and listen for incoming SMS. The package includes fixes for reliable incoming SMS detection, making it suitable for applications requiring real-time SMS interaction. Built specifically for Android, it provides a straightforward interface for integrating core telephony functionalities into Flutter apps.
Use cases
SMS verification systems
Call initiation within apps
Real-time incoming SMS monitoring
Network status tracking
Two-factor authentication
Automated message handling
Key features
Supports sending and receiving SMS
Enables phone call initiation
Fetches network information
Fixed incoming SMS listener
Android-only platform support
Simple API integration
Suitable for
Developers building SMS-based authentication
Apps needing automated SMS processing
Mobile apps requiring telephony access
Android-focused Flutter projects
Applications with real-time messaging needs
Considerations
Limited to Android platform
Requires runtime permissions for SMS and calls
Incoming SMS listening may have battery impact
Depends on device-specific telephony services
Not compatible with iOS
May require additional configuration for background execution
Original README
Original README snapshot from the linked source repository. Visit the repository for the latest content.
Telephony
We create this fork because the original package is not maintained anymore. We will try to keep this package up to date with the latest Flutter version.
:exclamation: This plugin currently only works on Android Platform
Contribute or meet a problem
Please create pull-request/issue in the original package, i will check and fix it as soon as possible.
Happy to contribute this project together :heart:
From VietNam (with Paracel & Spratly Islands) contributor
Contact me for [instantly support](mailto:dangtrongthanh1998@gmail.com)
A Flutter plugin to use telephony features such as
Send SMS Messages
Query SMS Messages
Listen for incoming SMS
Retrieve various network parameters
Start phone calls
This plugin tries to replicate some of the functionality provided by Android's Telephony class.
Check the Features section to see the list of implemented and missing features.
Although this plugin will check and ask for permissions at runtime, it is advisable to manually ask for permissions before calling any other functions.
The plugin will only request those permission that are listed in the AndroidManifest.xml.
SMS can either be sent directly or via the default SMS app.
Send SMS directly from your app:
telephony.sendSms(
to: "1234567890",
message: "May the force be with you!"
);
If you want to listen to the status of the message being sent, provide SmsSendStatusListener to the sendSms function.
finalSmsSendStatusListener listener = (SendStatus status) {
// Handle the status
};
telephony.sendSms(
to: "1234567890",
message: "May the force be with you!",
statusListener: listener
);
If the body of the message is longer than the standard SMS length limit of 160 characters, you can send a multipart SMS by setting the isMultipart flag.
Send SMS via the default SMS app:
telephony.sendSmsByDefaultApp(to: "1234567890", message: "May the force be with you!");
As of the 1.12 release of Flutter, plugins are automatically registered. This will allow you to use plugins as you normally do even in the background execution context.
Fetch various metrics such as network type, sim state, etc.
// Check if a device is capable of sending SMSbool canSendSms = await telephony.isSmsCapable;
// Get sim stateSimState simState = await telephony.simState;
If you want to call the telephony methods in background, you can do in the following ways.
1. Using only Telephony.instance
If you want to continue using Telephony.instance in the background, you will need to make sure that once the app comes back to the front, it again calls Telephony.instance.
@pragma('vm:entry-point')
backgroundMessageHandler(SmsMessage message) async {
// Handle background messageTelephony.instance.sendSms(to: "123456789", message: "Message from background")
}
voidmain() {
runApp(MyApp());
}
class_MyAppStateextendsState<MyApp> {
String _message;
// This will not work as the instance will be replaced by// the one in background.final telephony = Telephony.instance;
@overridevoidinitState() {
super.initState();
// You should make sure call to instance is made every time // app comes to foregroundfinal inbox = Telephony.instance.getInboxSms()
}
2. Use backgroundInstance
If you cannot make sure that the call to instance would be made every time app comes to foreground, or if you would prefer to maintain a separate background instance,
you can use Telephony.backgroundInstance in the background execution context.