Android Studioを使ってアプリを作っています。クイズ形式のアプリでGoogle Play ゲーム サービスAPI のリーダーボードと実績を使って
ユーザー対象のスコア管理ができるような設定にしたいのですが実機でテストをするとエラーになります。
行ったこととしては
・Googleアカウントからコンソールに入って
Google Play ゲームの登録およびIDは取得してStringで登録してあります。
・Gradleの登録も行っています。
エラーログを見るとSIGN_IN_MODE_OPTIONALが既に使われていると出ていますが1回しか
使っていないと思うのですが・・・。
ネットで検索すると同じような質問している方が英語でみえますが回答はSIGN_IN_MODE_OPTIONALが
複数回使われているからだよと書いてあるだけで問題解決になっていません。
分かる方もしくはヒントになりそうなことありましたら教えて下さい。既に5日ほど調べています。
環境 os mac
開発環境 Android studio 3.0.1
private GoogleApiClient mGoogleApiClient; private boolean mIntentInProgress; private static final int REQUEST_CODE = 1; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_quize); //GoogleApiClient初期設定 mGoogleApiClient = new GoogleApiClient.Builder(this) .addConnectionCallbacks(this) .addOnConnectionFailedListener(this) .addApi(Games.API) .addScope(Games.SCOPE_GAMES) .build(); @Override protected void onStart(){ super.onStart(); //画面が表示される度に接続する mGoogleApiClient.connect(); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data){ super.onActivityResult(requestCode, resultCode, data); if (requestCode == REQUEST_CODE){ mIntentInProgress = false; if (resultCode != RESULT_OK){ return; } if (!mGoogleApiClient.isConnected()){ mGoogleApiClient.reconnect(); } } } //nextボタンを押した時の挙動 public void goNext(View v){ if (quizeNum < quizeList.size()-1){ // if (quizeNum < 5-1){ if (resultNum){ quizeList = new ArrayList<>(); quizeNum++; hazureList = new ArrayList<>(); quizeGet(); judgDisplay(2); numberDisplay(); buttonEnabled(true,true,true,false); buttonDisplay(); descriDisplay(); v.invalidate(); }else { resultDisplay(); if (mGoogleApiClient.isConnected()){ Games.Leaderboards.submitScore(mGoogleApiClient, String.valueOf(R.string.leaderboard_id), quizeNum); switch (quizeNum){ case 50: Games.Achievements.unlock(mGoogleApiClient, String.valueOf(R.string.achievements_id50)); break; case 1800: Games.Achievements.unlock(mGoogleApiClient, String.valueOf(R.string.achievements_id1800)); break; } }else { ★ここがエラーです(287) mGoogleApiClient.connect(GoogleApiClient.SIGN_IN_MODE_OPTIONAL); } startActivityForResult(Games.Achievements.getAchievementsIntent(mGoogleApiClient),REQUEST_CODE); startActivityForResult( Games.Leaderboards.getLeaderboardIntent(mGoogleApiClient, getString(R.string.leaderboard_id)), REQUEST_CODE); } }else { //ここに最期のメッセージを入れる lastDialog(); SlideManager.saveInt(getApplicationContext(),"highscore", quizeNum + 1); } } @Override public void onConnected(@Nullable Bundle bundle) { //Player情報取得 Player player = Games.Players.getCurrentPlayer(mGoogleApiClient); String displayName = "???"; if (player != null){ displayName = player.getDisplayName(); } Toast.makeText(getApplicationContext(),String.format("%s でログインしています", displayName), Toast.LENGTH_SHORT).show(); } @Override public void onConnectionSuspended(int i) { mGoogleApiClient.connect(); } @Override public void onConnectionFailed(@NonNull ConnectionResult connectionResult) { int errorCode = connectionResult.getErrorCode(); if (errorCode == ConnectionResult.SIGN_IN_REQUIRED && !mIntentInProgress && connectionResult.hasResolution()){ try { mIntentInProgress = true; connectionResult.startResolutionForResult(this, 100); }catch (IntentSender.SendIntentException e){ mIntentInProgress = false; mGoogleApiClient.connect(); } } } }
エラーログは下記の通りです。
java.lang.IllegalStateException: Cannot use sign-in mode: SIGN_IN_MODE_OPTIONAL. Mode was already set to SIGN_IN_MODE_REQUIRED at com.google.android.gms.internal.zzaal.zzcx(Unknown Source) at com.google.android.gms.internal.zzaal.connect(Unknown Source) at com.mobreve.nanpasowordapp.QuizeActivity.goNext(QuizeActivity.java:287) at com.mobreve.nanpasowordapp.QuizeActivity.onClick(QuizeActivity.java:463) at android.view.View.performClick(View.java:4781) at android.view.View$PerformClick.run(View.java:19874) at android.os.Handler.handleCallback(Handler.java:739) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:135) at android.app.ActivityThread.main(ActivityThread.java:5290) at java.lang.reflect.Method.invoke(Native Method) at java.lang.reflect.Method.invoke(Method.java:372) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:911) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:706)
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/04/24 00:27