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>>

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>>

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>>

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

SmsColumn

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

Last updated