Search code examples
androidbroadcastreceiver

Cannot Receive SMS with broadcast


I just need to get incoming SMS to handle it, but nothing is called from onRecieve method. everything looks just ok , but nothing is happened when i receive SMS!

here is my manifest tags inside application tags :

    <receiver android:name="com.chargeirancell.key0098.view.RubinAppWidget" >
        <intent-filter>
            <action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
        </intent-filter>
        <meta-data
            android:name="android.appwidget.provider"
            android:resource="@xml/rubinwidgetinfo" />
    </receiver>
    <receiver android:name="com.chargeirancell.key0098.RubinRecieveSMS">
        <intent-filter android:priority="2147483647">
            <action android:name="android.provider.Telephony.SMS_RECEIVED" />
        </intent-filter>
    </receiver>

here also are permissions outside application tag:

    <uses-permission android:name="android.permission.CALL_PHONE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.READ_CONTACTS" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.RECEIVE_SMS" />
<uses-permission android:name="android.permission.READ_SMS" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

this my receiver class :

public class RubinRecieveSMS extends BroadcastReceiver {


@Override
public void onReceive(Context context, Intent intent) {

        Log.i("SMS", "HI");
        if (ChargeApp.mShared.getBoolean("sms", true)) {
            Log.i("SMS", "HI");

            String number = "";
            String message = "";
            Bundle bundle = intent.getExtras();
            if (bundle != null) {
                try {
                    int i;
                    Object[] pdusObj = (Object[]) bundle.get("pdus");
                    SmsMessage[] currentMessages = new SmsMessage[pdusObj.length];
                    for (i = 0; i < currentMessages.length; i++) {
                        currentMessages[i] = SmsMessage
                                .createFromPdu((byte[]) pdusObj[i]);
                        number = currentMessages[i].getOriginatingAddress();
                        message = message
                                + currentMessages[i].getMessageBody();
                    }
                    String pin;
                    if (number.contains("3453")) {
                        pin = message.substring(message.indexOf("ز:"),
                                message.indexOf("ک")).replace("ز:", "");
                        Intent i1 = new Intent(context,
                                ActivityDialogCharge.class);
                        i1.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK
                                | Intent.FLAG_ACTIVITY_CLEAR_TOP);
                        i1.putExtra("pin", pin);
                        context.startActivity(i1);
                    } else if (number.contains("8801 9574")) {
                        pin = message.substring(message.indexOf("ز:"),
                                message.indexOf("ک")).replace("ز:", "");
                        Intent i1 = new Intent(context,
                                ActivityDialogCharge.class);
                        i1.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK
                                | Intent.FLAG_ACTIVITY_CLEAR_TOP);
                        i1.putExtra("pin", pin);
                        context.startActivity(i1);
                    }
                } catch (Exception e) {
                }
            }
        }
    }

}

even Hi is not printed in logCat! can anyone please help me on this?


Solution

  • Replace code into your manifest file:

       <receiver android:name=".RubinRecieveSMS" android:exported="true" >
            <intent-filter android:priority="999" >
                <action android:name="android.provider.Telephony.SMS_RECEIVED" />
            </intent-filter>
        </receiver>