gpt4 book ai didi

android - 应用程序未在 MainActivity 上登录,但在下一个 Activity 中登录。使用 BaseGameUtils 实现 Google Play 服务登录

转载 作者:行者123 更新时间:2023-11-30 02:13:11 24 4
gpt4 key购买 nike

我正在尝试使用 BaseGameUtils 为我的游戏实现 Google 登录。

项目结构如下:

public class LoginActivity extends BaseGameActivity implements... {}
public class MainActivity extends LoginActivity {}
public class NormalActivity extends LoginActivity {}

在应用程序的过程中,MainActivity 启动NormalActivity

理想情况下,我希望游戏在 MainActivity 中自动登录,或通过单击登录按钮登录。

但对于 < 21 的 API 级别,我观察到从 MainActivity 登录失败并抛出“未知错误”。

但是,当我从 MainActivity 打开 NormalActivity 失败后,出现登录弹出窗口并且在 NormalActivity 中登录成功>.

附加信息:

在我的调查过程中,我发现在我的设备上使用 API<21 我在控制台中收到以下错误:

E/dalvikvm: Could not find class 'android.app.AppOpsManager', referenced from method com.google.android.gms.common.GooglePlayServiceUtil.zza

API 21 不会出现这个错误。此外,我发现 API 19 中添加了 AppOpsManager

所以,我怀疑这是问题的根本原因,但我无法弄清楚如何解决这个问题。

我一直在寻找解决方案,但没有成功尝试发布在以下线程中的答案:

Google game services sign in issue (fails first attempt, successful second)

Google Play Game Services: strange sign in behavior

登录 Activity .java

public class LoginActivity extends BaseGameActivity implements
GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener,
ResultCallback<People.LoadPeopleResult>{

private static final int RC_SIGN_IN = 9001;

public GoogleApiClient mGoogleApiClient;

private boolean mResolvingConnectionFailure = false;

private boolean mAutoStartSignInFlow = true;

private boolean mSignInClicked = false;

String TAG = "LoginActivity: ";

protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
Log.v(TAG, "onCreate()");
mGoogleApiClient = buildGoogleApiClient();
}

@Override
protected void onStart()
{
super.onStart();
mGoogleApiClient.connect();
}

@Override
protected void onStop()
{
super.onStop();

Log.d(TAG, "onStop(): disconnecting");
if (mGoogleApiClient.isConnected()) {
mGoogleApiClient.disconnect();
}

}

public GoogleApiClient buildGoogleApiClient() {

GoogleApiClient.Builder builder = new GoogleApiClient.Builder(this)
.addConnectionCallbacks(this)
.addOnConnectionFailedListener(this)
.addApi(Games.API).addScope(Games.SCOPE_GAMES);
return builder.build();
}

@Override
public void onConnected(Bundle connectionHint) {
Log.i(TAG, "onConnected");
}

@Override
public void onConnectionFailed(ConnectionResult connectionResult) {
if (mResolvingConnectionFailure) {
return;
}

if (mSignInClicked || mAutoStartSignInFlow) {
mAutoStartSignInFlow = false;
mSignInClicked = false;
mResolvingConnectionFailure = true;

if (!BaseGameUtils.resolveConnectionFailure(this,
mGoogleApiClient, connectionResult,
RC_SIGN_IN, getResources().getString(R.string.signin_other_error)))
{
mResolvingConnectionFailure = false;
}
}
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == RC_SIGN_IN) {
mSignInClicked = false;
mResolvingConnectionFailure = false;
if (resultCode == RESULT_OK) {
mGoogleApiClient.connect();
} else {
BaseGameUtils.showActivityResultError(this,
requestCode, resultCode, R.string.signin_failure);
}
}
}


@Override
public void onConnectionSuspended(int cause) {
mGoogleApiClient.connect();
}

@Override
public void onResult(People.LoadPeopleResult loadPeopleResult) {

}

public boolean isSignedIn() {
return (mGoogleApiClient != null && mGoogleApiClient.isConnected());
}


@Override
public void onSignInFailed() {

}

@Override
public void onSignInSucceeded() {

}}

最佳答案

我找到了这种行为的原因。

因为 MainActivityNormalActivity 都是 LoginActivity 的派生,我不认为基本实现有问题这些类(class)。

MainActivityNormalActivity 之间的唯一区别是,在 AndroidManifest.xml 中,MainActivity 位于 android:launchMode: "singleInstance"

删除 launchMode 参数解决了问题。

希望这可以帮助其他陷入类似问题的人。

关于android - 应用程序未在 MainActivity 上登录,但在下一个 Activity 中登录。使用 BaseGameUtils 实现 Google Play 服务登录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29828034/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com