Android 启动登录活动的正确方法 我有一个应用程序,有时可能需要在执行过程中登录,而我在思考如何绕过控制。对于身份验证,有很多不同的事情要做,所以我有一个名为Authenticator的实用程序类来处理所有这些

Android 启动登录活动的正确方法 我有一个应用程序,有时可能需要在执行过程中登录,而我在思考如何绕过控制。对于身份验证,有很多不同的事情要做,所以我有一个名为Authenticator的实用程序类来处理所有这些,android,android-intent,Android,Android Intent,简而言之,我希望应用程序中的所有活动都能够调用Authenticator.login()等方法来显示登录屏幕,并让Authenticator处理所有事情 以下是我到目前为止对登录方法的想法: public boolean login(Activity context) { Intent intent = new Intent(context, Login.class); context.startActivityForResult(intent, LOGIN_ACTIVITY)

简而言之,我希望应用程序中的所有活动都能够调用Authenticator.login()等方法来显示登录屏幕,并让Authenticator处理所有事情

以下是我到目前为止对登录方法的想法:

public boolean login(Activity context)
{ 
    Intent intent = new Intent(context, Login.class);
    context.startActivityForResult(intent, LOGIN_ACTIVITY);
    return false;
}
不过,我遇到的问题是如何从登录中获取结果。我想知道在我将控制权传递回名为login()的活动之前,他们是否按下了取消按钮或密码不正确


存在onActivityResult()方法,但该方法在类活动中,而验证器不是活动。有没有办法从普通java类内部为结果启动活动?

在您的示例中,作为
上下文
传入的
活动将在登录完成时获得回调。我不认为有办法让回调发生在非活动类中


一个选项是创建一个基本的
活动
AuthenticatedActivity
,您的所有活动都从中扩展。这是一个有点繁重的解决方案,但它允许您在一个地方处理所有授权工作。

虽然这不是一个优雅的解决方案,但我最后做了以下几点:

为了不将登录屏幕与使用验证器的活动耦合,我没有启动结果的活动(登录屏幕),而是使用登录屏幕的onFinish()方法调用验证器中的方法来传回结果

要求验证器登录的任何活动现在也使用一种方法实现一个接口:

public void onLoginComplete(boolean successful);
然后,身份验证器使用此方法答复调用活动


虽然这不是解决问题的最简单方法,但我的程序中的活动现在与登录屏幕分离,并且只与验证器交互

您能否进一步澄清,您要求用户输入用户名和密码的屏幕是一个活动?是的,登录屏幕是一个活动。应用程序中需要用户登录的其他活动要求验证者处理这些问题。Authenticator然后打开登录活动(如果尚未登录)。如果登录屏幕是一个活动,则可以设置从Authenticator类获得的结果,并将其发送回调用活动。并在您的呼叫活动中执行相应的操作。此链接说明如何将结果从当前活动传递到上一个活动。希望这有帮助。我会这样做,但是LoginScreen的结果不会通过onActivityResult()发送回身份验证程序,因为它不是活动,所以它没有该方法或侦听器。要了解我最终做了什么,请参阅下面的答案。