android 登录回调处理

转载地址:http://www.jianshu.com/p/f25395047402


一般涉及到用户登录注册的应用都有这样的需求:
在执行某一项需要登录之后才能操作的任务之前先检查当前用户有没有在应用里登录过,如果没有需要跳转到登录页面进行登录或者注册,在登录成功之后返回来接着执行之前的操作。
问题是,需要检查用户是否登录的触发点很多,为了避免在每个触发点进行重复的工作,可以写这样一个工具类:

  1. 第一步:定义工具类,注意,此类继承自Activity,需要设置主题为NoDisplay(见第二步)

    public class LoginUtil extends Activity {
     static LoginCallback mCallback;
    
     public interface LoginCallback {
         void onLogin();
     }
    @Override
    protected void onCreate(Bundle savedInstanceState) {   
         super.onCreate(savedInstanceState);      
         NavigateUtil.navigateForResult(this, LoginActivity.class, 22);
    }
     public static void checkLogin(Context context, LoginCallback callback) {
         //此处检查当前的登录状态
         boolean login = AccountManager.get().isVerify();
         if (login) {
             callback.onLogin();
         } else {
             mCallback = callback;
             context.startActivityForResult(context, LoginActivity.class, 22);
         }
     }
    
     @Override
     protected void onActivityResult(int requestCode, int resultCode, Intent data) {
         finish();
         if (resultCode == RESULT_OK) {
             mCallback.onLogin();
         }
         mCallback = null;
     }
    }
  2. 第二步:AndroidManifest.xml里需要配置此activity主题:
    <activity
                 android:name=".util.LoginUtil"
                 android:theme="@android:style/Theme.NoDisplay"/>
    <activity
    注意:此种方式只适用于v23版本的sdk之前,SDK23版本以后此主题会报错.

    An activity without a UI must call finish() before onResume() completes
    参见https://commonsware.com/blog/2015/11/02/psa-android-6p0-theme.nodisplay-regression.html
    解决办法:
    创建主题

    <style name="NoDisplay" parent="android:Theme.NoDisplay"></style>

    所以需要在values-v23文件夹下面新建一个适配主题:

    <style name="NoDisplay" parent="android:Theme.Translucent.NoTitleBar"></style>

    然后修改AndroidManifest.xml里activity的主题为

    <activity
                 android:name=".util.LoginUtil"
                 android:theme="@style/NoDisplay"/>
    <activity
  3. 第三步:在你的处理登录的Activity里登录成功之后调用:

        setResult(Activity.RESULT_OK);
        finish();
  4. 这样,如果需要登录操作的地方直接调用:

    LoginUtil.checkLogin(context,new LoginCallback(){
          public void onLogin(){
            //TODO 此处写之前的操作代码
          }
    });



  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值