Several changes in Android O affect the way that this library functions, specifically the broadcasts sent to let you know when an SMS/MMS has been sent or delivered. When upgrading to version 4.0.0+ of the library from 3.x.x, several changes are required for functionality to work correctly.
Specifically, each receiver
that you have registered in your AndroidManifest.xml
that is from
this library needs to be modified. You'll need to remove the intent-filter
tag and instead add
a taskAffinity
item.
The old entry looks like this:
<receiver
android:name=".MmsSentReceiver">
<intent-filter>
<action android:name="com.klinker.android.messaging.MMS_SENT" />
</intent-filter>
</receiver>
The changes should look like this:
<receiver
android:name=".MmsSentReceiver"
android:taskAffinity="com.klinker.android.messaging.MMS_SENT"/>
For a full example, here are the receivers from one of my own apps:
<receiver
android:name=".receiver.SmsReceivedReceiver"
android:permission="android.permission.BROADCAST_SMS">
<intent-filter>
<action android:name="android.provider.Telephony.SMS_DELIVER" />
</intent-filter>
</receiver>
<receiver
android:name=".receiver.SmsSentReceiver"
android:exported="false">
<intent-filter>
<action android:name="${applicationId}.SMS_SENT" />
</intent-filter>
</receiver>
<receiver
android:name=".receiver.SmsDeliveredReceiver"
android:exported="false">
<intent-filter>
<action android:name="${applicationId}.SMS_DELIVERED" />
</intent-filter>
</receiver>
<receiver
android:name="com.android.mms.transaction.PushReceiver"
android:permission="android.permission.BROADCAST_WAP_PUSH">
<intent-filter>
<action android:name="android.provider.Telephony.WAP_PUSH_DELIVER" />
<data android:mimeType="application/vnd.wap.mms-message" />
</intent-filter>
</receiver>
<receiver
android:name=".receiver.MmsSentReceiver"
android:exported="true">
<intent-filter>
<action android:name="com.klinker.android.messaging.MMS_SENT" />
</intent-filter>
</receiver>
<receiver
android:name=".receiver.MmsReceivedReceiver"
android:exported="true">
<intent-filter>
<action android:name="com.klinker.android.messaging.MMS_RECEIVED" />
</intent-filter>
</receiver>
After the changes, this gets reduced to the following:
<receiver
android:name=".receiver.SmsReceivedReceiver"
android:permission="android.permission.BROADCAST_SMS">
<intent-filter>
<action android:name="android.provider.Telephony.SMS_DELIVER" />
</intent-filter>
</receiver>
<receiver
android:name=".receiver.SmsSentReceiver"
android:taskAffinity="${applicationId}.SMS_SENT"/>
<receiver
android:name=".receiver.SmsDeliveredReceiver"
android:taskAffinity="${applicationId}.SMS_DELIVERED"/>
<receiver
android:name="com.android.mms.transaction.PushReceiver"
android:permission="android.permission.BROADCAST_WAP_PUSH">
<intent-filter>
<action android:name="android.provider.Telephony.WAP_PUSH_DELIVER" />
<data android:mimeType="application/vnd.wap.mms-message" />
</intent-filter>
</receiver>
<receiver
android:name=".receiver.MmsSentReceiver"
android:taskAffinity="com.klinker.android.messaging.MMS_SENT"/>
<receiver
android:name=".receiver.MmsReceivedReceiver"
android:taskAffinity="com.klinker.android.messaging.MMS_RECEIVED"/>