登录成功后如何打开新活动 - android app

时间:2014-04-04 13:54:30

标签: android facebook

我的朋友和我正在尝试通过Facebook登录。我们从Facebook开发者页面获取代码: https://developers.facebook.com/docs/android/login-with-facebook

问题是如何在授权成功后立即调用另一个活动并删除注销按钮。我们一直在阅读其他帖子,但没有解决方案可以帮助我们。

3 个答案:

答案 0 :(得分:4)

我将展示这个解决方案,因为将来也许有人像我一样在同样的问题上挣扎。

为了删除注销/登录按钮并在单击后退按钮或完全关闭活动时阻止它们出现(但用户仍然因为其凭据已保存而仍然登录)。

要解决此问题,您必须调用finish()函数并关闭LoginActivity。

例如,将LoginActivity视为我的应用程序的启动器。它扩展了Activity,因此它有onCreate()onActivityResult()

public class LoginActivity extends HelpBaseActivity {
   private LoginButton loginButton;
   private CallbackManager callbackManager;
   private AccessToken accessToken;
   private AccessTokenTracker accessTokenTracker;

   //Intent Actions
   private static final String HOME_ACTIVITIES = "com.example.mydomain.myappname.HOME_ACTIVITY";
   // Request Code
   private static final int HOME_ACTIVITIES_REQUEST_CODE = 10;

   @Override
   public void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      FacebookSdk.sdkInitialize(this);
      setContentView(R.layout.activity_login);
      loginButton = (LoginButton) findViewById(R.id.login_button);
      callbackManager = CallbackManager.Factory.create();
      // Callback registration
      loginButton.registerCallback(callbackManager, new   FacebookCallback<LoginResult>() {
          @Override
          public void onSuccess(LoginResult loginResult) {
              Log.d("LOGIN_SUCCESS", "Success");
              loginButton.setVisibility(View.INVISIBLE); //<- IMPORTANT
              Intent intent = new Intent(HOME_ACTIVITIES);
              startActivity(intent);
              finish();//<- IMPORTANT
          }
          @Override
          public void onCancel() {
              Log.d("LOGIN_CANCEL", "Cancel");
          }

          @Override
          public void onError(FacebookException exception) {
              Log.d("LOGIN_ERROR", "Error");
          }
      });

      accessTokenTracker = new AccessTokenTracker() {
          @Override
          protected void onCurrentAccessTokenChanged(
                AccessToken oldAccessToken,
                AccessToken currentAccessToken) {
            // Set the access token using
            // currentAccessToken when it's loaded or set.
          }
      };
      // If the access token is available already assign it.
      accessToken = AccessToken.getCurrentAccessToken();
      // If already logged in show the home view
      if (accessToken != null) {//<- IMPORTANT
          Intent intent = new Intent(HOME_ACTIVITIES);
          startActivity(intent);
          finish();//<- IMPORTANT
      }
  }

  @Override
  public void onActivityResult(int requestCode, int resultCode, Intent data){
      super.onActivityResult(requestCode, resultCode, data);
      callbackManager.onActivityResult(requestCode, resultCode, data);
  }

}

如果您想控制“HomeActivity”,则可以使用startActivityForResult()(而不是startActivity())将活动称为:

Intent intent = new Intent(HOME_ACTIVITIES);
startActivityForResult(intent, HOME_ACTIVITIES_REQUEST_CODE);

然后在onActivityResult()上进行检查:

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    callbackManager.onActivityResult(requestCode, resultCode, data);
      if (requestCode == HOME_ACTIVITIES_REQUEST_CODE) {
          finish();
      }
}

我是Android编程的新手,所以我相信可能有许多其他解决方案比这更好,但我发现直到现在才提供给我的互联网有用,所以我想展示那个为我工作。

答案 1 :(得分:3)

你实现了这个吗?

private void onSessionStateChange(Session session, SessionState state, Exception exception) {
    if (state.isOpened()) {
        Log.i(TAG, "Logged in...");
    } else if (state.isClosed()) {
        Log.i(TAG, "Logged out...");
    }
}

如果是,您可以轻松猜出每次用户登录时都会执行if(state.isOpened())块中的代码。所以,添加以下行:

startActivity(new Intent(MainActicity.this, NewActivity.class));

编辑:

如果用户已登录,则

facebook.isSessionValid()返回true,否则返回false。这种方法似乎已被弃用,但应继续使用。 Source

所以,在onCreate()方法中添加:

if (facebook.isSessionValid())
   startActivity(new Intent(MainActicity.this, NewActivity.class));

答案 2 :(得分:0)

您还可以在提供的onSuccess方法中启动新活动      @覆盖     protected void onCreate(Bundle savedInstanceState){         super.onCreate(savedInstanceState);         FacebookSdk.sdkInitialize(getApplicationContext());         AppEventsLogger.activateApp(本);         的setContentView(R.layout.activity_main);

    callbackManager = CallbackManager.Factory.create();

    LoginManager.getInstance().registerCallback(callbackManager,
            new FacebookCallback<LoginResult>() {
                @Override
                public void onSuccess(LoginResult loginResult) {
                    // App code
                }

                @Override
                public void onCancel() {
                    // App code
                }

                @Override
                public void onError(FacebookException exception) {
                    // App code
                }
            });
相关问题