0

I need to make an app that sends an SMS message after showing a progress bar in increments of 10. I have the action bar set up and I think I should use AsyncTask? The user is inputing number and message into the main activity, and that's where I have the SendSMS method set up, not sure how to make this work so that it forwards to AsyncTask and calls on that method there.

public class MainActivity extends AppCompatActivity {

private int MY_PERMISSIONS_REQUEST_SMS_RECEIVE = 10;
private static final String SMS_SENT = "SMS_SENT";
private static final String SMS_DELIVERED= "SMS_DELIVERED";
private EditText etPoruka;
private EditText etBroj;
private ProgressDialog progressDialog;
private Context context = null;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    initWidgets();
    ActivityCompat.requestPermissions(this,
            new String[]{Manifest.permission.RECEIVE_SMS},
            MY_PERMISSIONS_REQUEST_SMS_RECEIVE);
}

private void initWidgets() {
    etPoruka = findViewById(R.id.etPoruka);
    etBroj = findViewById(R.id.etBroj);
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.menu_main, menu);
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case R.id.action_send:
            MyAsyncTask<Void, Void, Void> updateTask = new MyAsyncTask<Void, Void, Void>(context);
            updateTask.execute();

            break;
        case R.id.action_sent:
            Toast.makeText(this, R.string.add_test, Toast.LENGTH_LONG).show();
             // BROADCAST RECEIVER ??
            break;
        case R.id.action_received:
            Toast.makeText(this, R.string.add_test, Toast.LENGTH_LONG).show();
            //BROADCAST RECEIVER ??
            //BOUND SERVICE
            break;
        case R.id.action_exit:
            final AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
            builder.setTitle("Close app");
            builder.setMessage("Are you sure?");
            builder.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialogInterface, int i) {

                finish();

            }
    });
    builder.setNegativeButton("No", new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialogInterface, int i) {

           dialogInterface.dismiss();
    }
});

AlertDialog dialog = builder.create();
    dialog.show();
}
    return true;

}
public void sendSMS() {
    try{
        SmsManager smgr = SmsManager.getDefault();
        smgr.sendTextMessage(etBroj.getText().toString(),null,etPoruka.getText().toString(),null,null);
        Toast.makeText(MainActivity.this, "SMS sent successfully", Toast.LENGTH_SHORT).show();
    }
    catch (Exception e){
        Toast.makeText(MainActivity.this, "Error", Toast.LENGTH_SHORT).show();
    }
}

}

ASYNCTASK

public class MyAsyncTask extends AsyncTask {

private final String DIALOG_MESSAGE = "Sending message";

private ProgressDialog mDialog = null;

private void setDialog(Context context) {
    this.mDialog = new ProgressDialog(context);
    this.mDialog.setMessage(DIALOG_MESSAGE);
    this.mDialog.setCancelable(false);
}

public MyAsyncTask(Context context) {
    this.setDialog(context);
}

@Override
protected void onPreExecute() {
    this.mDialog.show();
}

@Override
protected Result doInBackground(Params... arg0) {

    try {
        Thread.sleep(2000);
    } catch (InterruptedException e) {
        e.printStackTrace();
    }

    return null;
}

@Override
protected void onPostExecute(Result result) {

    if (this.mDialog.isShowing()) {
        this.mDialog.dismiss();
    }
} }
micatius
  • 11
  • 3

1 Answers1

0

You can create an Interface and implement in your MainActivity.

For More Details Please check these answers:

how do i send data back from onPostExecute in an AsyncTask?

How to pass data from an asynchronous task to an activity that called it?