I have a sms sender with pendingIntent and once the sms sent it opens a dialog. Here's the code from SMS sender
public final void sendSmsByManager(final String code)
{
progressDialog = new ProgressDialog(Registration.this);
progressDialog.setTitle("Please wait");
progressDialog.setMessage("Sending SMS Verification Code...");
progressDialog.setCancelable(false);
progressDialog.setCanceledOnTouchOutside(false);
progressDialog.show();
String sent = "SMS_SENT";
PendingIntent sentPI = PendingIntent.getBroadcast(Registration.this,
2, new Intent(sent), 0);
Registration.this.registerReceiver(new BroadcastReceiver() {
@Override
public void onReceive(Context arg0, Intent arg1) {
switch (getResultCode())
{
case Activity.RESULT_OK:
// Toast.makeText(getBaseContext(), "SMS sent",
// Toast.LENGTH_SHORT).show();
progressDialog.dismiss();
dialog_confirm(code,Registration.this);
// saveRegistration();
break;
case SmsManager.RESULT_ERROR_GENERIC_FAILURE:
progressDialog.dismiss();
Toast.makeText(getApplicationContext(), "Generic failure",
Toast.LENGTH_SHORT).show();
// Toast.makeText(getApplicationContext(), "code" + code,
// Toast.LENGTH_SHORT).show();
status = "Generic failure";
break;
case SmsManager.RESULT_ERROR_NO_SERVICE:
progressDialog.dismiss();
Toast.makeText(
myContext,
"No service. Check mobile network connection." + ""
+ "",
Toast.LENGTH_SHORT).show();
status = "No service";
break;
case SmsManager.RESULT_ERROR_NULL_PDU:
progressDialog.dismiss();
Toast.makeText(getApplicationContext(), "Null PDU",
Toast.LENGTH_SHORT).show();
status = "Null PDU";
break;
case SmsManager.RESULT_ERROR_RADIO_OFF:
progressDialog.dismiss();
Toast.makeText(getApplicationContext(), "Radio off",
Toast.LENGTH_SHORT).show();
status = "Radio off";
break;
}
}
}, new IntentFilter(sent));
SmsManager sms = SmsManager.getDefault();
sms.sendTextMessage(txt_mobileno.getText().toString(), null, code,
sentPI, null);
}
And I call the dialog from the Activity.RESULT_OK
public void dialog_confirm(final String SMSCode,Context context)
{
dialog = new Dialog(context);
dialog.getWindow().requestFeature(Window.FEATURE_NO_TITLE);
dialog.getWindow().setBackgroundDrawable(
new ColorDrawable(android.graphics.Color.TRANSPARENT));
dialog.setContentView(R.layout.dialog_confirm);
final EditText txt_code = (EditText) dialog.findViewById(R.id.txt_code);
Button btn_add = (Button) dialog.findViewById(R.id.btn_confirm);
Button btn_cancel = (Button) dialog.findViewById(R.id.btn_cancel);
btn_add.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
String code = txt_code.getText().toString();
if (code.equals(SMSCode)) {
match = true;
// save
if (Constants.ID != 0) {
updateRegistration();
} else {
saveRegistration();
}
dialog.dismiss();
} else {
DialogUtil.createErrorDialog(Registration.this, "Registration Error",
"SMS verification code does not match!").show();
}
}
});
btn_cancel.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
dialog.dismiss();
}
});
dialog.setCancelable(false);
dialog.show();
}
and error point on dialog.show
Here's the Screenshot.

The problem is probably that the context was destroyed by the time the dialog was supposed to be shown. This can be avoided like this:
if(!((Activity) context).isFinishing())
{
//show dialog
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With