Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/231.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
android应用程序关闭后,如何保持google plus会话打开?_Android_Sign_Google Api Client - Fatal编程技术网

android应用程序关闭后,如何保持google plus会话打开?

android应用程序关闭后,如何保持google plus会话打开?,android,sign,google-api-client,Android,Sign,Google Api Client,这是我第一次在这里发帖,因为我以前从未有过这样的需要,因为我的每一个问题都已经得到了回答 问题是,我正试图用google plus登录我的android应用程序,但如果我关闭我的应用程序。。我不知道如何查看用户是否已登录。。有没有办法检查一下 例如: -您在我的应用程序中登录,然后转到main活动,而不是登录活动。 -然后你不注销,你只需关闭我的应用。。也许半个小时。。 -在那之后。。您再次打开我的应用程序,而不是再次转到主活动。。您再次进入登录活动 有没有办法知道您是否已经登录 这是我的登录类

这是我第一次在这里发帖,因为我以前从未有过这样的需要,因为我的每一个问题都已经得到了回答

问题是,我正试图用google plus登录我的android应用程序,但如果我关闭我的应用程序。。我不知道如何查看用户是否已登录。。有没有办法检查一下

例如: -您在我的应用程序中登录,然后转到main活动,而不是登录活动。 -然后你不注销,你只需关闭我的应用。。也许半个小时。。 -在那之后。。您再次打开我的应用程序,而不是再次转到主活动。。您再次进入登录活动

有没有办法知道您是否已经登录

这是我的登录类:

import android.content.Intent;
import android.content.IntentSender;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

import com.google.android.gms.common.ConnectionResult;
import com.google.android.gms.common.SignInButton;
import com.google.android.gms.common.api.GoogleApiClient;
import com.google.android.gms.common.api.Scope;
import com.google.android.gms.plus.Plus;

public final class LoginGPlusFragment extends Fragment implements
        View.OnClickListener,
        GoogleApiClient.ConnectionCallbacks,
        GoogleApiClient.OnConnectionFailedListener
{
    /* Request code used to invoke sign in user interactions. */
    private static final int RC_SIGN_IN = 0;

    /**
     * True if we are in the process of resolving a ConnectionResult
     */
    private boolean mIntentInProgress;

    /**
     * True if the sign-in button was clicked.  When true, we know to resolve all
     * issues preventing sign-in without waiting.
     */
    private boolean mSignInClicked;

    static GoogleApiClient mGoogleApiClient;
    SignInButton btnLogin;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
    {
        return inflater.inflate(R.layout.fragment_gplus_login, container, false);
    }

    @Override
    public void onViewCreated(View view, Bundle savedInstanceState)
    {
        Log.d("DEBUG","onViewCreated LoginGPlusFragment");
        super.onViewCreated(view, savedInstanceState);
        if(mGoogleApiClient == null || !mGoogleApiClient.isConnected())
            mGoogleApiClient = new GoogleApiClient.Builder(getActivity())
                    .addConnectionCallbacks(this)
                    .addOnConnectionFailedListener(this)
                    .addApi(Plus.API)
                    .addScope(new Scope("profile"))
                    .build();
        else
            Log.d("DEBUG","onViewCreated you're already connected");
        btnLogin = (SignInButton)view.findViewById(R.id.sign_in_button);
        btnLogin.setOnClickListener(this);
    }

    @Override
    public void onConnectionFailed(ConnectionResult result)
    {
        Log.d("DEBUG","onConnectionFailed LoginGPlusFragment");
        if (!mIntentInProgress)
        {
            if (mSignInClicked && result.hasResolution())
            {
                // The user has already clicked 'sign-in' so we attempt to resolve all
                // errors until the user is signed in, or they cancel.
                try
                {
                    result.startResolutionForResult(getActivity(), RC_SIGN_IN);
                    mIntentInProgress = true;
                } catch (IntentSender.SendIntentException e) {
                    // The intent was canceled before it was sent.  Return to the default
                    // state and attempt to connect to get an updated ConnectionResult.
                    mIntentInProgress = false;
                    mGoogleApiClient.connect();
                }
            }
        }
    }

    @Override
    public void onClick(View view)
    {
        if (view.getId() == R.id.sign_in_button && !mGoogleApiClient.isConnecting())
        {
            mSignInClicked = true;
            mGoogleApiClient.connect();
        }
    }

    @Override
    public void onResume()
    {
        super.onResume();
        Log.d("DEBUG","onResume LoginGPlusFragment");
        if(mGoogleApiClient!=null && mGoogleApiClient.isConnected())
            launchChatActivity();
        else
            Log.d("DEBUG","onResume you are disconnected");
    }

    @Override
    public void onConnected(Bundle bundle)
    {
        Log.d("DEBUG","onConnected LoginGPlusFragment");
        mSignInClicked = false;
        launchChatActivity();
    }


    private void launchChatActivity()
    {
        String accountName = Plus.AccountApi.getAccountName(mGoogleApiClient);
        Log.d("DEBUG", "Connected with google. You are "+accountName);
        btnLogin.setVisibility(View.INVISIBLE);
        Intent i = new Intent(getActivity(), ChatActivity.class);
        startActivity(i);
        getActivity().finish();
    }

    @Override
    public void onConnectionSuspended(int i)
    {
        Log.d("DEBUG","onConnectionSuspended LoginGPlusFragment");
        mGoogleApiClient.connect();
    }

    @Override
    public void onActivityResult(int requestCode, int responseCode, Intent data)
    {
        super.onActivityResult(requestCode, responseCode, data);
        Log.d("DEBUG","onActivityResult LoginGPlusFragment");

        if (requestCode == RC_SIGN_IN)
        {
            if (responseCode != getActivity().RESULT_OK)
            {
                mSignInClicked = false;
            }

            mIntentInProgress = false;

            if (!mGoogleApiClient.isConnected())
            {
                mGoogleApiClient.reconnect();
            }
        }
    }
}

非常感谢

好的,我自己回答

由于我仍然不知道是否有自动执行的方法,我现在通过在onConnected方法中保存一个共享首选项来执行此操作:

@Override
public void onConnected(Bundle bundle)
{
    SharedPreferences sharedPref = getActivity().getSharedPreferences("login", Context.MODE_PRIVATE);
    SharedPreferences.Editor editor = sharedPref.edit();
    editor.putBoolean("signed_in_with_google", true);
    editor.commit();
    Log.d("DEBUG","onConnected LoginGPlusFragment");
    mSignInClicked = false;
    launchChatActivity();
}
我在断开连接的方法中删除了它 //谷歌注销

if(LoginGPlusFragment.mGoogleApiClient.isConnected())
       LoginGPlusFragment.mGoogleApiClient.disconnect();

SharedPreferences sharedPref = getSharedPreferences("login", Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPref.edit();
editor.putBoolean("signed_in_with_google", false);
editor.commit();
returnToLoginScreen();
然后,我在onCreateView中检查我的首选项是否为true:

@Override
public void onViewCreated(View view, Bundle savedInstanceState)
{
    Log.d("DEBUG","onViewCreated LoginGPlusFragment");
    super.onViewCreated(view, savedInstanceState);
    mGoogleApiClient = new GoogleApiClient.Builder(getActivity())
            .addConnectionCallbacks(this)
            .addOnConnectionFailedListener(this)
            .addApi(Plus.API)
            .addScope(new Scope("profile"))
            .build();
    SharedPreferences pref = getActivity().getSharedPreferences("login", Context.MODE_PRIVATE);
    boolean signed = pref.getBoolean("signed_in_with_google", false);

    btnLogin = (SignInButton) view.findViewById(R.id.sign_in_button);
    btnLogin.setOnClickListener(this);

    if(signed)
    {
        Log.d("DEBUG","You were previously signed in with google.");
        connect();
    }
}