目前我正在为我的Android应用程序登录系统。
我在自定义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!!");
}
现在,这会将数据发送回signIn活动,我会检查非空意图
@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");
}
});
}
和我的Dispatch / Launcher活动
@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 - >广播接收者发送和接收短信 - >在非常有效的OTP之后向signInActivity发送信息 - >用户转到MainActivity页面。在任何时候我都不希望用户能够回击按钮并转到上一个活动。我尝试过使用Intent标志和finish()。 BroadCastReceiver将意图发送到SignInActivity而不是MainActivity,因为我想显示动画/ TOAST,这就是为什么我有一个代码检查非null Intent的原因。但我能够回到非常令人沮丧的活动。有人可以帮帮我吗?
答案 0 :(得分: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
返回Intent对象,因此您甚至可以将调用链接在一起:
mainIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK).addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
第二次,您是否尝试将这些标记应用于您在SignInActivity的onCreate
方法中发送的意图?