2016-05-24 6 views
0

Ich entwickle eine App, die einen IntentService enthält, um eine Anfrage an einen Server zu senden, wenn sich die App im Hintergrund befindet und die Antwort vom Server die Aktivität mit einer Absicht startet. Problem ist, dass es die Aktivität automatisch ohne Benutzerinteraktion öffnet, wenn sich die App im Hintergrund befindet. Wie man diese nur offene Aktivität vermeidet, wenn die App im Vordergrund steht.Wie verhindert man, dass die Aktivität automatisch in Android geöffnet wird?

Hier ist mein IntentService Code:

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(); 
     } 
    } 
} 
+0

aber Sie benötigen mindestens eine 'Activity' zum Starten der App –

+0

siehe Ich habe MainActivity und OtpVerification Aktivität ... von OtpVerification Aktivität Ich sende Intent-Dienst und danach schließe ich die App die Intent-Service-Anfrage an Server senden und von Antwort es automatisch öffnen Aktivität, die erwähnt, wenn App im Hintergrund ist. – rahul

+0

Sie können so etwas tun Halten Sie den Benutzer auf dem OTP-Bildschirm und führen Sie eine 'AsyncTask' aus, die den Status des OTP holt. Checke die Antwort ein, wenn wahr, springe zum nächsten 'Activity' sonst noch etwas. –

Antwort

0

Die Activity, dass die Service beginnt sollte eine BroadcastReceiver erstellen und für die Antwort hören. Wenn onReceive() in BroadcastReceiver aufgerufen wird, kann es die Benutzeroberfläche aktualisieren. Wenn sich die App im Hintergrund befindet, sieht der Benutzer die aktualisierte Benutzeroberfläche, wenn er die App in den Vordergrund bringt. Wenn die App bereits im Vordergrund ist, wenn onReceive() aufgerufen wird, wird der Benutzer die UI-Updates sofort sehen.

In Ihrem Service, die Daten an die Activity wieder passieren, werden Sie Intent mit sendBroadcast() statt startActivity() der Verwendung einer Sendung zu schicken.

Verwandte Themen