Query SMS

Requires READ_SMS permission.

Add the following permission in your AndroidManifest.xml

<uses-permission android:name="android.permission.READ_SMS"/>

getInboxSms()

Returns Future<List<SmsMessage>>

Parameters

Type

Description

Optional

Default Value

Columns

List of SmsColumn

Columns to be returned by the query

✔️

[ SmsColumn.ID, SmsColumn.ADDRESS, SmsColumn.BODY, SmsColumn.DATE ]

Filter

SmsFilter

Filters the result by given constraints. Works like SQL WHERE clause.

✔️

null

sortOrder

List of OrderBy

Sorts the result prioritized by order of declaration.

✔️

null

List<SmsMessage> messages = await telephony.getInboxSms(
columns: [SmsColumn.ADDRESS, SmsColumn.BODY],
filter: SmsFilter.where(SmsColumn.ADDRESS)
.equals("1234567890")
.and(SmsColumn.BODY)
.like("starwars"),
sortOrder: [OrderBy(SmsColumn.ADDRESS, sort: Sort.ASC),
OrderBy(SmsColumn.BODY)]
);

All parameters are optional.

List<SmsMessage> messages = await telephony.getInboxSms();

getSentSms()

Returns Future<List<SmsMessage>>

Parameters

Type

Description

Optional

Default Value

Columns

List of SmsColumn

Columns to be returned by the query

✔️

[ SmsColumn.ID, SmsColumn.ADDRESS, SmsColumn.BODY, SmsColumn.DATE ]

Filter

SmsFilter

Filters the result by given constraints. Works like SQL WHERE clause.

✔️

null

sortOrder

List of OrderBy

Sorts the result prioritized by order of declaration.

✔️

null

List<SmsMessage> messages = await telephony.getSentSms(
columns: [SmsColumn.ADDRESS, SmsColumn.BODY],
filter: SmsFilter.where(SmsColumn.ADDRESS)
.equals("1234567890")
.and(SmsColumn.BODY)
.like("starwars"),
sortOrder: [OrderBy(SmsColumn.ADDRESS, sort: Sort.ASC),
OrderBy(SmsColumn.BODY)]
);

All parameters are optional.

List<SmsMessage> messages = await telephony.getSentSms();

getDraftSms()

Returns Future<List<SmsMessage>>

Parameters

Type

Description

Optional

Default Value

Columns

List of SmsColumn

Columns to be returned by the query

✔️

[ SmsColumn.ID, SmsColumn.ADDRESS, SmsColumn.BODY, SmsColumn.DATE ]

Filter

SmsFilter

Filters the result by given constraints. Works like SQL WHERE clause.

✔️

null

sortOrder

List of OrderBy

Sorts the result prioritized by order of declaration.

✔️

null

List<SmsMessage> messages = await telephony.getDraftSms(
columns: [SmsColumn.ADDRESS, SmsColumn.BODY],
filter: SmsFilter.where(SmsColumn.ADDRESS)
.equals("1234567890")
.and(SmsColumn.BODY)
.like("starwars"),
sortOrder: [OrderBy(SmsColumn.ADDRESS, sort: Sort.ASC),
OrderBy(SmsColumn.BODY)]
);

All parameters are optional.

List<SmsMessage> messages = await telephony.getDraftSms();

SmsMessage

Property

Type

id

int

address

String

body

String

date

int in milliseconds

dateSent

int in milliseconds

read

bool

seen

bool

subject

String

subscriptionId

int

threadId

int

type

SmsType

status

SmsStatus

SmsColumn

Columns

ID

ADDRESS

BODY

DATE

DATE_SENT

READ

SEEN

STATUS

SUBJECT

SUBSCRIPTION_ID

THREAD_ID

TYPE

SmsFilter

Generates a filter that will be used by an query. The methods read like an SQL query. The select part is determined columns parameter on one of the query methods. The SmsFilter handle the WHERE part.

Example

WHERE address = '123456789'
AND body LIKE 'falcon'
OR date > '232123432'

Becomes

SmsFilter.where(SmsColumn.ADDRESS)
.equals('123456789')
.and(SmsColumn.BODY)
.like('falcon')
.or(SmsColumn.DATE)
.greaterThan('232123432');

Initializing a filter

Sms Filter works like a SQL WHERE clause. Initialize the filter by calling the where method and pass in the column name.

SmsFilter.where(SmsColumn.ID);

Methods

equals()

Compares equality between the column values and the value provided to the function.

SmsFilter.where(SmsColumn.ID).equals('12');

greaterThan()

Adds a greater than > operator.

SmsFilter.where(SmsColumn.ID).greaterThan('2');

lessThan()

Adds a less than operator.

SmsFilter.where(SmsColumn.ID).lessThan('40');

greaterThanOrEqualTo()

Adds a greater than or equal to operator.

SmsFilter.where(SmsColumn.ID).greaterThanOrEqualTo('6');

lessThanOrEqualTo()

Adds a less than or equal to operator.

SmsFilter.where(SmsColumn.ID).lessThanOrEqualTo('30');

notEqualTo()

Checks for inequality.

SmsFilter.where(SmsColumn.ID).notEqualTo('14');

like()

Adds the LIKE operator.

SmsFilter.where(SmsColumn.BODY).like('%abc%');

inValues()

Adds the IN operator.

SmsFilter.where(SmsColumn.ID).inValues(['13', '15', '20']);

between()

Adds the BETWEEN operator.

SmsFilter.where(SmsColumn.ID).between('10','20');

not

Adds a NOT operator.

SmsFilter.where(SmsColumn.BODY).not.like('%a%');

Combining Methods

and()

Adds the AND operator between two statements.

SmsFilter.where(SmsColumn.ID)
.greaterThanOrEqualTo('6')
.and(SmsColumn.BODY)
.like('%abc%');

or()

Adds the OR operator between two statements.

SmsFilter.where(SmsColumn.ID)
.greaterThan('10')
.or(SmsColumn.ID)
.lessThan('50');

OrderBy

Creates an ORDER BY statement.

OrderBy(SmsColumn.ID);

Optionally you can provide a sort order. Defaults to DESC

OrderBy(SmsColumn.ID, sort: Sort.ASC);

Sort

Values

ASC

DESC