简体   繁体   中英

How to close 1 Activity after the Launch of other from Android Service Class

I have created a service which launch Activity after receiving SMS from certain numbers.

There are 2 Activities Success and Failure .

Both Activities opens successfully only 1 time, On second iteration, when i send SMS again, it does not effect Activity Screen.

It remains open the current Activity screen and does not change it based on the condition.

I searched this on net and found various solution, but nothing seems working here, I tried to change flags, but it only allows 1 flag from service class, and if i choose other Flags it gives me following error message.

StartActivity from outsite an activity context requires the FLAG_ACTIVITY_NEW_TASK flag

This is the service class i have written. Kindly check this and guide me what i am doing wrong here.

Thanks

public class IncomingSms extends BroadcastReceiver {

    final SmsManager sms = SmsManager.getDefault();
    int duration = Toast.LENGTH_LONG;

    @Override
    public void onReceive(Context context, Intent intent) {
        final Bundle bundle = intent.getExtras();

        try {

            if (bundle != null) {

                final Object[] pdusObj = (Object[]) bundle.get("pdus");

                for (int i = 0; i < pdusObj.length; i++) {

                    SmsMessage currentMessage = SmsMessage.createFromPdu((byte[]) pdusObj[i]);
                    String phoneNumber = currentMessage.getDisplayOriginatingAddress();

                    String senderNum = phoneNumber;
                    String message = currentMessage.getDisplayMessageBody();

                    if(senderNum.equals("345"))
                    {   
                        Intent successScreen= new Intent(context, SuccessActivity.class);
                        successScreen.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                        context.startActivity(successScreen);

                    }   
                    else if(senderNum.equals("3450") || senderNum.equals("3451") || senderNum.equals("3452")){

                        Intent alertActivity = new Intent(context, FailureActivity.class);
                        alertActivity.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                        context.startActivity(alertActivity);
                  }

Try to replace your code with this code:

 if(senderNum.equals("345"))
                    {   
                        Intent successScreen= new Intent(context, SuccessActivity.class);
                        successScreen.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                        successScreen.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
successScreen.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)
                        context.startActivity(successScreen);

                    }   
                    else if(senderNum.equals("3450") || senderNum.equals("3451") || senderNum.equals("3452")){

                        Intent alertActivity = new Intent(context, FailureActivity.class);
                        alertActivity.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
  successScreen.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
successScreen.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)
                        context.startActivity(alertActivity);
                  }

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM