0

I am building an SMS application and there is one activity and a broadcast receiver. The problem is that the broadcast receiver onReceive() method is not getting called. The code for the receiver class and manifest file is given below.

Broadcast Receiver

public class SmsBroadcastReceiver extends BroadcastReceiver {
    public AudioManager audioManager;
    SharedPreferences sharedPreferences;
    boolean b=false;
    String smsBody;
    final int REQUEST_CODE_ASK_PERMISSIONS = 123;

    public static final String SMS_BUNDLE = "pdus";

    SmsMessage smsMessage;
    public void onReceive(Context context, Intent intent) {
        Toast.makeText(context.getApplicationContext(),"Toast Long",Toast.LENGTH_LONG).show();


        sharedPreferences = context.getApplicationContext().getSharedPreferences("Pritom", context.MODE_PRIVATE);
        Bundle intentExtras = intent.getExtras();
        String format = intentExtras.getString("format");
        if (intentExtras != null) {
            Object[] sms = (Object[]) intentExtras.get(SMS_BUNDLE);
            String smsMessageStr = "";
            String pass3 = sharedPreferences.getString("password", null);
            for (int i = 0; i < sms.length; ++i) {

                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {

                    smsMessage = SmsMessage.createFromPdu((byte[]) sms[i], format);
                } else {
                    smsMessage = SmsMessage.createFromPdu((byte[]) sms[i]);
                }
                smsBody = smsMessage.getMessageBody().toString();
                String address = smsMessage.getOriginatingAddress();

                smsMessageStr += "SMS From: " + address + "\n";
                smsMessageStr += smsBody + "\n";
            }
            /*if (smsBody.equals("@general" + pass3)) {
                AudioManager audioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
                audioManager.setRingerMode(audioManager.RINGER_MODE_NORMAL);
            }*/
            Toast.makeText(context, "SMS : " + smsBody + pass3, Toast.LENGTH_SHORT).show();
            Log.d("Message:", smsBody + pass3);

        }
    }
}

The problem here is that the Toast message just below onReceive() is not being displayed which indicates that the method onReceive() is not being called.

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.mytrendin.inappmessaging">
    <uses-permission android:name="android.permission.READ_SMS" />
    <uses-permission android:name="android.permission.RECEIVE_SMS" />
    <uses-permission android:name="android.permission.READ_PHONE_STATE"/>
    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <receiver android:name=".SmsBroadcastReceiver" android:exported="true" >
            <intent-filter android:priority="999" >
                <action android:name="android.provider.Telephony.SMS_RECEIVED" />
            </intent-filter>
        </receiver>
    </application>

</manifest>

I have used Android 5.0.1 for testing my application. Thank you for your help :)

Daniel Nugent
  • 43,104
  • 15
  • 109
  • 137
Pritom Mazumdar
  • 325
  • 5
  • 20

1 Answers1

0

Try setting the higher priority android:priority="2147483647" in receivers intent-filter:

<receiver android:name=".SmsBroadcastReceiver" android:exported="true" >
    <intent-filter android:priority="2147483647" >
        <action android:name="android.provider.Telephony.SMS_RECEIVED" />
    </intent-filter>
</receiver>
Ferdous Ahamed
  • 21,438
  • 5
  • 52
  • 61