Как предотвратить автоматическое открытие активности в android?

Я разрабатываю приложение, которое содержит IntentService для отправки запроса на сервер, когда приложение находится в фоновом режиме, и ответ от сервера начнет действие с помощью intent. Проблема в том, что он открывает действие автоматически без какого-либо взаимодействия с пользователем, когда приложение находится в фоновом режиме. Как избежать этого только открытой деятельности, когда приложение выходит на первый план.

Вот мой код IntentService:

public class OTPIntentService extends IntentService {
    /**
     * Creates an IntentService.  Invoked by your subclass's constructor.
     *
     * @param name Used to name the worker thread, important only for debugging.
     */
    public CRegistrationSessionManagement m_oSessionManagement;
    public String m_szMobileNumber, m_szEncryptedPassword;
    public String TAG = "OTPIntentService";

    public OTPIntentService() {
        super("OTPIntentService");
    }

    @Override
    protected void onHandleIntent(Intent intent) {
        final Context m_Context = getApplicationContext();// get activity context
        m_oSessionManagement = new CRegistrationSessionManagement(m_Context);// creating object of Registartion session
        // retreive user data from shared preferencce........
        HashMap<String, String> user = m_oSessionManagement.getRegistrationDetails();// getting String from Regisatrtion session
        m_szEncryptedPassword = user.get(CRegistrationSessionManagement.s_szKEY_PASSWORD).trim();// get password from registartion session
        m_szMobileNumber = user.get(CRegistrationSessionManagement.s_szKEY_MOBILENUMBER).trim();// get mobile number from registartion session

        try {
            String json;
            JSONObject jsonObject = new JSONObject();
            jsonObject.put("agentCode", m_szMobileNumber);
            jsonObject.put("pin", m_szEncryptedPassword);
            jsonObject.put("otpCode", COTPVerificationDataStorage.getInstance().getM_szOtp());

            json = jsonObject.toString();
            System.out.println("Request:-" + json);
            JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(Request.Method.POST, CServerAPI.m_szOtpverification, jsonObject, new Response.Listener<JSONObject>() {
                @Override
                public void onResponse(JSONObject response) {
                    System.out.println("Response:-" + response);
                    try {
                        if (response.getString("resultDesc").equalsIgnoreCase("Transaction Successful")) {

                        } else if (response.getString("resultDesc").equalsIgnoreCase("OTP MisMatch")) {
                            if (NetworkUtil.isAppIsInBackground(m_Context)) {

                            } else {
                                Intent i = new Intent(m_Context, COtpManualVerificationScreen.class);
                                i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                                startActivity(i);
                            }

                        } else if (response.getString("resultDesc").equalsIgnoreCase("otpCode Can Not Be Empty")) {
                            if (NetworkUtil.isAppIsInBackground(m_Context)) {

                            } else {
                                Intent i = new Intent(m_Context, COtpManualVerificationScreen.class);
                                i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                                startActivity(i);
                            }

                        }

                    } catch (JSONException e) {
                        e.printStackTrace();
                    }
                }
            }, new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {
                    System.out.println("Error:-" + error);
                }
            });
            RequestQueue requestQueue = Volley.newRequestQueue(m_Context);
            requestQueue.add(jsonObjectRequest);
        } catch (JSONException e) {
            e.printStackTrace();
        }
    }
}

1 ответ

  1. То Activityчто стартует Serviceследует создать BroadcastReceiverи прослушать ответ. Когда onReceive()в BroadcastReceiverвызывается, он может обновить пользовательский интерфейс. Если приложение находится в фоновом режиме, пользователь увидит обновленный пользовательский интерфейс, когда он выводит приложение на передний план. Если приложение уже находится на переднем плане при onReceive()вызове, пользователь сразу увидит обновления пользовательского интерфейса.

    В вашемService, чтобы передать данные обратноActivity, вы захотите отправить трансляцию Intentс помощью sendBroadcast()вместо использования startActivity().