-2

我知道这个问题已经被问过很多次了,但请听我说完。我有 MainActivity,它是一个 LoginActivity,它使用 Facebook 登录和来自 Facebook 的 AccountKit 登录并开始下一个活动,它是一个 ContactsActivity。当我在 ContactsActivity 并按返回按钮时,它会将我带到 MainActivity 但我想在用户成功登录时关闭应用程序,如果用户再次打开应用程序,它应该直接打开 ContactsActivity,因为用户之前已成功登录。

问题是当我在 Contacts Activity 中按下返回按钮时,它会将我带到 LoginActivity,我已经在 startActivity(intent)之后尝试完成(),它会关闭我的应用程序,并且在成功登录后不会将我带到 ContactsActivity。如果我再次打开我的应用程序然后它将我直接带到 ContactsActivity。我什至尝试了 onBackPressed,我在其中写了完成,但它不起作用。在 Android Manifest 中,我也在 MainActivity 标签中写了 android:noHistory="true" 但它不起作用。请帮忙

活动主

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context="pritish.sawant.com.simplychat.MainActivity">

    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/loginwithphonenumber"
        android:text="@string/loginwithphoneno"
        style="@style/Base.Widget.AppCompat.Button.Borderless"
        android:textColor="@android:color/white"
        android:background="@drawable/login_button_selector"
        android:textSize="16sp"
        android:layout_centerInParent="true"
        android:textAlignment="center"
        android:layout_marginLeft="16dp"
        android:layout_marginRight="16dp"
        android:layout_marginBottom="8dp"
        />

    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/email_login_button"
        android:text="@string/loginwithemail"
        android:layout_below="@+id/loginwithphonenumber"
        style="@style/Base.Widget.AppCompat.Button.Borderless"
        android:textColor="@android:color/white"
        android:background="@drawable/login_button_selector"
        android:textSize="16sp"
        android:textAlignment="center"
        android:layout_marginLeft="16dp"
        android:layout_marginRight="16dp"
        android:layout_marginBottom="8dp"

        />

    <com.facebook.login.widget.LoginButton
        android:id="@+id/facebook_login_button"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@+id/email_login_button"
        android:textSize="16sp"
        android:textAllCaps="true"
        android:layout_marginLeft="16dp"
        android:layout_marginRight="16dp"
        android:layout_marginBottom="16dp"
        android:paddingTop="14dp"
        android:paddingBottom="14dp"
        android:paddingLeft="16dp"
        android:paddingRight="16dp"

        />





</RelativeLayout>

主要活动

public class MainActivity extends AppCompatActivity {

    public static int APP_REQUEST_CODE=1;
    private LoginButton facebookloginButton;
    private Button emailloginbutton,phonenologinbutton;
    private CallbackManager callbackManager;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        facebookloginButton=(LoginButton)findViewById(R.id.facebook_login_button);
        emailloginbutton=(Button)findViewById(R.id.email_login_button);
        phonenologinbutton=(Button)findViewById(R.id.loginwithphonenumber);

        callbackManager=CallbackManager.Factory.create();
        facebookloginButton.registerCallback(callbackManager, new FacebookCallback<LoginResult>() {
            @Override
            public void onSuccess(LoginResult loginResult) {
                launchContactsActivity();

            }

            @Override
            public void onCancel() {

            }

            @Override
            public void onError(FacebookException error) {
                Toast.makeText(getApplicationContext(), R.string.loginfailed,Toast.LENGTH_LONG).show();
            }
        });


        AccessToken accessToken= AccountKit.getCurrentAccessToken();
        com.facebook.AccessToken loginToken= com.facebook.AccessToken.getCurrentAccessToken();
        if(accessToken!=null || loginToken!=null){
            launchContactsActivity();
        }


        emailloginbutton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                onLogin(LoginType.EMAIL);

            }
        });

        phonenologinbutton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                onLogin(LoginType.PHONE);

            }
        });

    }

    private void launchContactsActivity(){
        Intent intent=new Intent(getApplicationContext(),ContactsActivity.class);
        startActivity(intent);
        finish();
    }


    private void onLogin(final LoginType loginType) {
        // create intent for the Account Kit activity
        final Intent intent = new Intent(this, AccountKitActivity.class);

        // configure login type and response type
        AccountKitConfiguration.AccountKitConfigurationBuilder configurationBuilder =
                new AccountKitConfiguration.AccountKitConfigurationBuilder(
                        loginType,
                        AccountKitActivity.ResponseType.TOKEN
                );
        final AccountKitConfiguration configuration = configurationBuilder.build();

        // launch the Account Kit activity
        intent.putExtra(AccountKitActivity.ACCOUNT_KIT_ACTIVITY_CONFIGURATION, configuration);
        startActivityForResult(intent, APP_REQUEST_CODE);
        finish();
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        callbackManager.onActivityResult(requestCode,resultCode,data);
        if(requestCode==APP_REQUEST_CODE){
            AccountKitLoginResult accountKitLoginResult=data.getParcelableExtra(AccountKitLoginResult.RESULT_KEY);
            if(accountKitLoginResult.getError()!=null){
                String toastMessage = accountKitLoginResult.getError().getErrorType().getMessage();
                Toast.makeText(this, toastMessage, Toast.LENGTH_LONG).show();
            } else if (accountKitLoginResult.getAccessToken() != null) {
                launchContactsActivity();
            }
        }
    }


}
4

1 回答 1

0

在正常情况下,您不应该关闭应用程序 - 用户将通过按 home 或通过按返回来关闭您的活动将其移回。

但是您可以使用以下提示:

1)如果后堆栈中不需要它们,则在启动新活动后关闭旧活动:

startActivity(newActivityIntent);
finish();

覆盖 onBackPressed 和应用程序将关闭

2)如果您需要http://developer.android.com/reference/android/app/Activity.html#moveTaskToBack(boolean),您可以将任务移到后面(而不是关闭)

于 2017-08-13T15:17:12.987 回答