这是我第一次在这里发帖,因为我之前从未有过这样的需要,因为我所遇到的每一个问题都已经回答了!
问题是我尝试使用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();
}
}
}
}
非常感谢!!
答案 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();
}
}