Android应用程序关闭后如何保持我的google plus会话打开?

时间:2015-04-17 10:49:12

标签: android sign google-api-client

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

问题是我尝试使用google plus登录我的Android应用程序,但如果我关闭了我的应用程序..我不知道如何查看该用户是否已登录..是还有办法检查吗?

例如: - 您登录我的应用程序,然后转到MainActivity而不是登录活动。 - 然后你没有注销,你只需关闭我的应用程序......也许半小时.. - 之后..你再次打开我的应用程序,然后再次转到MainActivity ..你再次登录活动..

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

这是我的登录类:

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();
            }
        }
    }
}

非常感谢!!

1 个答案:

答案 0 :(得分:3)

好的,我会自己回答。

由于我仍然不知道是否有办法自动执行此操作,我现在通过在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();
}

我在断开连接方法中将其删除      // Google退出

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:

@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();
    }
}