1

I've been banging my head at this problem for a few days now and decided I would ask for some help. I'm trying to have my Android app respond to the receipt of an mms message. Here's what I have in main:

private IntentFilter filter = new IntentFilter(MMSReceiver.MMS_RECEIVED);
private MMSReceiver mmsReceiver = new MMSReceiver();
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    ...

    registerReceiver(mmsReceiver, filter);

    ...
}

and I also have an MMSReceiver class:

public class MMSReceiver extends BroadcastReceiver {

public static final String MMS_RECEIVED = "android.provider.Telephony.MMS_RECEIVED";

public void onReceive(Context context, Intent intent) {
    if (intent.getAction().equals(MMS_RECEIVED)){
        System.out.println("b:mms received");
    }
}

I've also tried making the string "android.provider.Telephony.WAP_PUSH_RECEIVED" after seeing that suggested on another question. This code works for sms so it must be something specific to mms. This is my first time posting here so please let me know if I'm missing something.

user1959417
  • 224
  • 2
  • 8

2 Answers2

0

Have you declared them in the AndroidManifest.xml? Did you add the required permissions to the Manifest?

<uses-permission android:name="android.permission.RECEIVE_MMS" />
Givi
  • 3,283
  • 4
  • 20
  • 23
0

This worked out for me:

At onCreate():

try {
    IntentFilter filter = new IntentFilter();
    filter.addAction("android.provider.Telephony.WAP_PUSH_RECEIVED");
    filter.addDataType("application/vnd.wap.mms-message");
    receivedMMSListener = new ReceivedMMSListener();
    registerReceiver(receivedMMSListener, filter);
} catch(Exception e){
    Log.d(TAG, "----> ERROR ADDING MMS FILTER: " + e.getLocalizedMessage());
}

And the Broadcast Receiver:

    public class ReceivedMMSListener extends BroadcastReceiver {

        @Override
        public void onReceive(Context context, Intent intent) {
            /*
            "transactionId" - (Integer) The WAP transaction ID
            "pduType" - (Integer) The WAP PDU type
            "header" - (byte[]) The header of the message
            "data" - (byte[]) The data payload of the message
            */

            try {
                Bundle bundle = intent.getExtras();
                Integer transactionId = bundle.getInt("transactionId");
                Integer pduType = bundle.getInt("pduType");
                byte[] header = bundle.getByteArray("header");
                byte[] data = bundle.getByteArray("data");

                Log.d("TAG", "---> MMS | transactionId: " + transactionId.toString());
                Log.d("TAG", "---> MMS | pduType: " + pduType.toString());
                Log.d("TAG", "---> MMS | header: " + header.toString());
                Log.d("TAG", "---> MMS | data: " + data.toString());

            } catch(Exception e){
                Log.d(TAG, "---> ERROR EXTRACTING MMS: " + e.getLocalizedMessage());
            }
        }  
    }