Skip to content

oksigenia_sms · SMS plugin for Flutter

Open sourceMobile

Long SMS on Android, with a single permission

On Android 12 and later, splitting a long SMS the standard way requires reading the phone state. oksigenia_sms splits the message itself and sends it with SEND_SMS alone; it is the SMS engine inside Oksigenia SOS.

flutter run — oksigenia_sms

Minimal use: split a long SMS and send it as a single one

cat lib/main.dart

// Emulator number (not a real phone). AVD 5554 sends to 5556.

const String to = '5556';

…

final r = await OksigeniaSms.send(to: to, message: msg);

Run on an Android emulator, granting only the SEND_SMS permission

adb shell pm grant com.oksigenia.oksms_demo android.permission.SEND_SMS

flutter run -d emulator-5554

Launching lib/main.dart on sdk gphone64 x86 64 in debug mode...

Running Gradle task 'assembleDebug'... 56.7s

…

I/flutter ( 2973): to : 5556

I/flutter ( 2973): message : 167 chars

I/flutter ( 2973): result : OksigeniaSmsResult(sent, 2/2 parts)

A multipart SMS with only the SEND_SMS permission, never touching phone identity

oksigenia_sms sends a real multipart SMS on an Android emulator

Who it is for

  • Safety and emergency apps
  • Privacy-first apps
  • Hardened Android and GrapheneOS
  • Field work and IoT

What it does

  1. SEND_SMS only

    The whole message goes out without asking for READ_PHONE_STATE.

  2. Encoding-aware splitting

    GSM-7 and UCS-2, without breaking words.

  3. Confirmed delivery

    A result for every segment of the message.

  4. Stock and hardened Android

    Tested on Android 12 to 17 and on GrapheneOS, with no Google Play Services.

  • 1

    permission (SEND_SMS)

  • 2

    encodings (GSM-7 and UCS-2)

  • 12–17

    Android versions tested

Standard

  • Minimal permissions
  • No Google Play Services
  • Open source (Apache 2.0)

Pricing

Free · open source

Licence: Apache 2.0