防止每次显示选择器对话框获取用户帐户
问题描述:
我需要检查我的应用程序中的用户帐户,我需要检查它不止一次的应用程序,我用this answer和工作正常,但问题是每次我想要得到帐户选择器对话框出现“选择一个帐户”,它不是很好,我很欣赏任何解决方案!防止每次显示选择器对话框获取用户帐户
答
您使用的帐户选择器,所以你不应该指望没有出现该对话框
答
使用共享首选项存储检查值,然后检查它是否存在然后dnt显示是否不显示。
设定值偏好:
// MY_PREFS_NAME - a static String variable like:
//public static final String MY_PREFS_NAME = "MyPrefsFile";
SharedPreferences.Editor editor = getSharedPreferences(MY_PREFS_NAME, MODE_PRIVATE).edit();
editor.putString("name", "user1");
editor.putInt("idName", 1);
editor.commit();
检索数据从偏好:
SharedPreferences prefs = getSharedPreferences(MY_PREFS_NAME, MODE_PRIVATE);
String restoredText = prefs.getString("text", null);
if (restoredText != null) {
String name = prefs.getString("name", "No name defined");//"No name defined" is the default value.
int idName = prefs.getInt("idName", 0); //0 is the default value.
}
//Call this function in you OnCreate Method.!
private void signIn() {
Intent signInIntent = Auth.GoogleSignInApi.getSignInIntent(mGoogleApiClient);
startActivityForResult(signInIntent, RC_SIGN_IN);
}
private void handleSignInResult(GoogleSignInResult result) {
Log.d(TAG, "handleSignInResult:" + result.isSuccess());
if (result.isSuccess()) {
// Signed in successfully, show authenticated UI.
GoogleSignInAccount acct = result.getSignInAccount();
Log.e(TAG, "display name: " + acct.getDisplayName());
personName = acct.getDisplayName();
email = acct.getEmail();
if(acct.getPhotoUrl()!= null) {
personPhotoUrl = acct.getPhotoUrl();
}
else
{
personPhotoUrl=Uri.parse("android.resource://com.compscitutorials.basigarcia.navigationdrawervideotutorial/drawable/add_profile_image");;
Log.d(TAG, "handleSignInResult: Photo Url is empty");
}
Log.e(TAG, "Name: " + personName + ", email: " + email
+ ", Image: " + personPhotoUrl.getPath().toString());
// txtName.setText(personName);
// txtEmail.setText(email);
// Glide.with(getApplicationContext()).load(personPhotoUrl)
// .thumbnail(0.5f)
// .crossFade()
// .diskCacheStrategy(DiskCacheStrategy.ALL)
// .into(imgProfilePic);
updateUI(true);
} else {
// Signed out, show unauthenticated UI.
updateUI(false);
}
}
现在您的当前用户与以前相比!
private void updateUI(boolean isSignedIn) {
if (isSignedIn) {
if(!currentName.equals(name))
{
//Next, launch the account chooser intent:
Intent intent = AccountPicker.newChooseAccountIntent(null, null,
new String[]{GoogleAuthUtil.GOOGLE_ACCOUNT_TYPE},
false, null, null, null, null);
try {
startActivityForResult(intent, REQUEST_CODE_EMAIL);
} catch (ActivityNotFoundException e) {
// This device may not have Google Play Services installed.
// TODO: do something else
}
}
} else {
// Display Toast SignUp Failed
Toast.makeText(this, "SignUp Error", Toast.LENGTH_SHORT).show();
}
}
//最后,覆盖onActivityResult获得帐户类型和帐户名称:
@ @Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
// Result returned from launching the Intent from GoogleSignInApi.getSignInIntent(...);
if (requestCode == RC_SIGN_IN) {
GoogleSignInResult result = Auth.GoogleSignInApi.getSignInResultFromIntent(data);
handleSignInResult(result);
}
}
我需要控制如果保存的用户(上次选中的用户)与运行应用程序的用户是同一用户,那就是为什么我需要每次都检查一次,但不要每次都选择 – sasan
,然后将您当前的用户与之前检查过的用户进行比较。如果相同,则显示是否显示。 –
这就是问题所在!当我想要获得当前用户时出现选择器。我需要的是如何在获取用户时不显示? – sasan