Android : Telephony.SMS_RECEIVED: onReceive() called two times

on Sunday, August 10, 2014


I have used broadcastreceiver to handle a phone number verification part. It works but in a problematic way.


Issue: When there is no message , onReceive() just execute once and return from if (extras == null){... part. this is fine. But if message sent to inbox , onReceive() called null i.e if (extras == null){.. part first(in 1 seconds) and then executes the original part again(after 3/4 seconds). Some of my codes:



registerReceiver(receiver, filter);
mProgressDialog = MyProgressDialog.show(RegisterActivity.this, null, null);

SmsManager sm = SmsManager.getDefault();
sm.sendTextMessage(mobileNumber, null, "Verified", null, null);
Intent i = new Intent();
i.setAction("android.provider.Telephony.SMS_RECEIVED");
sendBroadcast(i);


onReceive():



private class SMSReceiver extends BroadcastReceiver{

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

if(intent.getAction() != null && intent.getAction().equals("android.provider.Telephony.SMS_RECEIVED")){

Bundle extras = intent.getExtras();

if (extras == null){
_submit.setText("Register");
_mobile_number.setError("Invalid Number");
mProgressDialog.dismiss();
Toast.makeText(RegisterActivity.this, "Invalid Mobile Number", ast.LENGTH_LONG).show();
return;
}

try{

Object[] pdus = (Object[]) extras.get("pdus");
SmsMessage msg = SmsMessage.createFromPdu((byte[]) pdus[0]);
String origNumber = msg.getOriginatingAddress();
String msgBody = msg.getMessageBody();

..............


Is I'm doing any wrong here ?


0 comments:

Post a Comment