iqbalmineraltown / flutter_sms_receiver

SMS Receiver API Flutter Plugin
BSD 3-Clause "New" or "Revised" License
22 stars 22 forks source link

Crash on Android 14 #27

Open MatrixDev opened 9 months ago

MatrixDev commented 9 months ago
Fatal Exception: java.lang.SecurityException
One of RECEIVER_EXPORTED or RECEIVER_NOT_EXPORTED should be specified when a receiver isn't being registered exclusively for system broadcasts
- android.os.Parcel.createExceptionOrNull (Parcel.java:3069)
- android.content.ContextWrapper.registerReceiver (ContextWrapper.java:772)
- com.oval.sms_receiver.SmsReceiverPlugin$startListening$1.invoke (SmsReceiverPlugin.java:1)
- com.oval.sms_receiver.SmsReceiverPlugin$startListening$1.invoke (SmsReceiverPlugin.java:1)
- com.oval.sms_receiver.SmsReceiverPlugin.startListening$lambda$1 (SmsReceiverPlugin.java:1)
- com.google.android.gms.tasks.zzm.run (zzm.java:25)
- com.android.internal.os.ZygoteInit.main (ZygoteInit.java:1103)
image

Most probably you should add RECEIVER_EXPORTED when registering a BroadcastReceiver in SmsReceiverPlugin.kt#84:

// old
activity.registerReceiver(smsBroadcastReceiver,
        IntentFilter(SmsRetriever.SMS_RETRIEVED_ACTION))

// new
if (Build.VERSION.SDK_INT >= 33) {
  activity.registerReceiver(smsBroadcastReceiver,
    IntentFilter(SmsRetriever.SMS_RETRIEVED_ACTION),
    Context.RECEIVER_EXPORTED)
} else {
  activity.registerReceiver(smsBroadcastReceiver,
    IntentFilter(SmsRetriever.SMS_RETRIEVED_ACTION))
}