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:
In onCreate():
receiver = new SMSReceiver();
filter = new IntentFilter();
filter.addAction("android.provider.Telephony.SMS_RECEIVED");
In Button Click:
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();
..............
Am I doing any wrong here ?