最近在做APP的通知模块时,产品要求点击通知后
- 在用户登录的情况下直接进入到通知消息的详情页,
- 没有登录的情况下先进行登录,然后在跳转到消息的详情页
但是登录页面可能包含了N多个步骤,所以最好的方式是当用户没有登录的情况下使用startActivityForResult进行登录请求,把登录功能当做一个模块,
因为登录支持很多方式登录,用户在登录页面可能使用账密登录或者点击其他登录选项使用其他方式登录,
我们只需要关注LogInActivity就行了,
如果使用其他登录方式进行登录,当登录成功后跳转到LogInActivity
我们可以给跳转intent设置flag
intent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP|Intent.FLAG_ACTIVITY_CLEAR_TOP);
只有这两种启动标志组合使用,才会调用LogInActivity的onNewIntent方法。
而如果单独使用
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
的话,会将LoginActivity提到栈顶并销毁其他Activity,但是并不会回调onNewIntent方法。
这样的话我们就相当于使用singleTask的方式启动了LogInActivity
这样中间登录步骤的页面就可以全部销毁了。
然后在LogInActivity的onNewIntent()方法中setResult(Activity.Result_OK)来告诉强求页登录成功了,
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
setResult(RESULT_OK);
finish();
}
没有登录的情况下复写onBackPressed()方法就行了,因为不论使用何种登录方式,只要进行到一半返回,最终没有完成登录返回的话一定会调用onBackPressed方法。因为只用成功才会自动finish LoginActivity
@Override
public void onBackPressed() {
super.onBackPressed();
setResult(RESULT_CANCELED);
}
其他功能也类似,比如认证相关的功能。
2:
A页面跳转到B页面(中间可能经过别的页面,一个功能模块,任务完成后需回到A页面,A页面刷新)再跳转到A页面。
可以在B页面执行
Intent intent = new Intent(this,AActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP|Intent.FLAG_ACTIVITY_SINGLE_TOP);
startActivity(intent);`
回到A页面会回调A页面的onNewIntent方法
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
}
可以在这个方法里执行响应的逻辑,数据也可以通过Intent返回到A页面
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。