2015-09-12 36 views
0

目前我在登錄系統的工作爲我的Android應用。使用結束()和意圖FLAGS

我已經實現了一個自定義的BroadcastReceiver一個OTP驗證過程。一旦otp被驗證,如下所示從BroadCastReceiver發送意圖。

Intent c=new Intent(context.getApplicationContext(), SignInActivity.class); 
    if (msgs[0].getOriginatingAddress().equals("+919920678579")) { 
     c.putExtra("code", "verified"); 
     c.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
     context.startActivity(c); 
    } else { 
     Log.d("message ", "error, not verified!!"); 
    } 

現在這種將數據發送回簽到活動,我查了非空的意圖

@Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_sign_in); 
     btn=(Button)findViewById(R.id.btn); 
     Intent i=getIntent(); 
     if (i.getStringExtra("code")!=null){ 
      if (i.getStringExtra("code").equals("verified")) { 
       Toast.makeText(SignInActivity.this, "verified!", Toast.LENGTH_LONG).show(); 
       //SHOW SOME UI CHANGES 
       Intent intent=new Intent(SignInActivity.this, MainActivity.class); 
        startActivity(intent); 
        finish(); 
       } 
      } 

     btn.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 


     SmsManager smsManager = SmsManager.getDefault(); 
     String phoneNumber = "+919920678579"; 
     byte[] smsBody = "+919920678579".getBytes(); 
     // DO NOT CHANGE THIS. IDK WHY ITS NOT WORKING IF REFERENCED FROM INT AND TYPE CAST TO SHORT!! 
     short port = 6734; 
     smsManager.sendDataMessage(phoneNumber, null, port, smsBody, null, null); 
     Log.d("sms ", "sent"); 
      } 
     }); 

    } 

和我的調度/發射活動

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    if (ParseUser.getCurrentUser() != null) { 
     //TODO: check validity of finish(). Supposed to remove this from backstack 
     // Start an intent for the logged in activity 
     Log.d("User logged in as ", ParseUser.getCurrentUser().getUsername()); 
     Intent mainIntent=(new Intent(this, MainActivity.class)); 
     mainIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK); 
     mainIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
     startActivity(mainIntent); 
     finish(); 
    } else { 
     // Start and intent for the logged out activity 
     Log.d("User ", "sent to signUp"); 
     Intent signIntent=(new Intent(this, SignInActivity.class)); 
     signIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK); 
     signIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
     startActivity(signIntent); 
     finish(); 
    } 
} 

流量是用戶點擊應用程序 - >調度活動(假設第一次用戶) - > SignInActivity - > Sms由broadcastreceiver發送和接收 - >在發送OTP後將信息發送到signInActivity - >用戶轉到Main活動頁面。在任何時候,我都希望用戶能夠按下按鈕並轉到上一個活動。我嘗試過使用Intent標誌並完成()。 BroadCastReceiver發送意圖到SignInActivity而不是MainActivity因爲我想顯示一個動畫/ TOAST,這就是爲什麼我有一個代碼檢查非null的意圖。但是我不能回到那些非常令人沮喪的活動上。有人可以幫我嗎?

回答

0

第一個,我相信你是凌駕你使用setFlags設置的旗幟。要設置多個標誌,你可以使用addFlags,或者一次設置所有的標誌:

一次設置的所有標誌:

mainIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK); 

或者:

mainIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK); 
mainIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 

出於同樣的效果。需要注意的是addFlags返回意圖對象,所以你甚至可以鏈共同呼籲:

mainIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK).addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 

,你嘗試應用這些標誌來你在SignInActivity的onCreate方法發送的意圖是什麼?

+0

大聲笑。那是我的一個非常非常愚蠢的錯誤。非常感謝。我是否需要同時使用BOTH finish()和flags?或者使用一個就足夠了 –

+0

如果使用正確,你不需要顯式的finish()調用。 – unbekant