Java tutorial
package bunzosteele.heroesemblem.android; import android.app.Activity; import android.app.AlertDialog; import android.app.Dialog; import android.content.Context; import android.content.Intent; import android.content.IntentSender; import android.net.ConnectivityManager; import android.net.NetworkInfo; import android.os.Bundle; import android.util.Log; import android.view.View; import android.view.ViewGroup; import android.widget.RelativeLayout; import android.widget.Toast; import bunzosteele.heroesemblem.AdsController; import bunzosteele.heroesemblem.GameServicesController; import bunzosteele.heroesemblem.HeroesEmblem; import com.badlogic.gdx.backends.android.AndroidApplication; import com.badlogic.gdx.backends.android.AndroidApplicationConfiguration; import com.google.android.gms.ads.AdRequest; import com.google.android.gms.ads.AdSize; import com.google.android.gms.ads.AdView; import com.google.android.gms.analytics.GoogleAnalytics; import com.google.android.gms.analytics.HitBuilders; import com.google.android.gms.analytics.Tracker; import com.google.android.gms.common.ConnectionResult; import com.google.android.gms.common.GooglePlayServicesUtil; import com.google.android.gms.common.api.GoogleApiClient; import com.google.android.gms.games.Games; import com.google.android.gms.games.GamesActivityResultCodes; import com.google.android.gms.plus.Plus; import com.purplebrain.adbuddiz.sdk.AdBuddiz; public class AndroidLauncher extends AndroidApplication implements AdsController, GameServicesController, GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener { private static final String PROPERTY_ID = "UA-69183424-2"; private static final String LEADERBOARD_ID = "CgkIi_ntxuUZEAIQAQ"; Tracker analytics; AdView bannerAd; GoogleApiClient apiClient; boolean isSubmitClick = false; boolean isViewClick = false; boolean isSubmitting = false; boolean isViewing = false; boolean isResolvingConnectionFailure; int scoreToSubmit = -1; HeroesEmblem game; private static final int RC_UNUSED = 5001; private static final int RC_SIGN_IN = 9001; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); AndroidApplicationConfiguration config = new AndroidApplicationConfiguration(); this.game = new HeroesEmblem(this, this); View gameView = initializeForView(this.game, config); setupAds(); RelativeLayout layout = new RelativeLayout(this); layout.addView(gameView, ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT); setContentView(layout); GoogleAnalytics googleAnalytics = GoogleAnalytics.getInstance(this); analytics = googleAnalytics.newTracker(PROPERTY_ID); analytics.enableAdvertisingIdCollection(true); apiClient = new GoogleApiClient.Builder(this).addConnectionCallbacks(this) .addOnConnectionFailedListener(this).addApi(Plus.API).addScope(Plus.SCOPE_PLUS_LOGIN) .addApi(Games.API).addScope(Games.SCOPE_GAMES).build(); apiClient.connect(); isResolvingConnectionFailure = false; } @Override public void RecordAnalyticsEvent(String category, String action, String label, long value) { this.analytics.send(new HitBuilders.EventBuilder().setCategory(category).setAction(action).setLabel(label) .setValue(value).build()); } @Override public void SubmitHighScore(int score) { isSubmitClick = true; isSubmitting = true; scoreToSubmit = score; if (!apiClient.isConnected()) { apiClient.connect(); } else { SubmitScore(); } } @Override public void ViewLeaderboard() { isViewClick = true; isViewing = true; if (!apiClient.isConnected()) { apiClient.connect(); } else { ShowLeaderboard(); } } @Override public void DisconnectServices() { apiClient.disconnect(); } @Override public void onDestroy() { super.onDestroy(); this.finish(); android.os.Process.killProcess(android.os.Process.myPid()); } @Override public void onSaveInstanceState(Bundle savedInstanceState) { this.game.SaveData(); super.onSaveInstanceState(savedInstanceState); } @Override public void showInterstitialAd() { if (AdBuddiz.isReadyToShowAd(this)) { AdBuddiz.showAd(this); } } @Override public boolean isWifiConnected() { ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo ni = cm.getNetworkInfo(ConnectivityManager.TYPE_WIFI); return (ni != null && ni.isConnected()); } private void setupAds() { AdBuddiz.setPublisherKey("b5d3138e-2c1c-4110-9712-996a47f18c30"); AdBuddiz.cacheAds(this); } @Override public void onConnected(Bundle bundle) { Log.d("Leaderboards", "onConnected(): connected"); if (scoreToSubmit > 0 && isSubmitting) { SubmitScore(); } else if (isViewing) { ShowLeaderboard(); } } private void SubmitScore() { Log.d("Leaderboards", "onConnected(): submitting score"); Games.Leaderboards.submitScore(apiClient, LEADERBOARD_ID, scoreToSubmit); scoreToSubmit = -1; startActivityForResult(Games.Leaderboards.getLeaderboardIntent(apiClient, LEADERBOARD_ID), RC_UNUSED); isSubmitting = false; } private void ShowLeaderboard() { Log.d("Leaderboards", "onConnected(): viewing leaderboards"); startActivityForResult(Games.Leaderboards.getLeaderboardIntent(apiClient, LEADERBOARD_ID), RC_UNUSED); isViewing = false; } @Override public void onConnectionSuspended(int i) { Log.d("Leaderboards", "onConnectionSuspended(): connection suspended"); apiClient.connect(); } @Override public void onConnectionFailed(ConnectionResult connectionResult) { Log.d("Leaderboards", "onConnectionFailed(): attempting to resolve"); if (isResolvingConnectionFailure) { Log.d("Leaderboards", "onConnectionFailed(): already resolving"); return; } if (isSubmitClick || isViewClick) { isSubmitClick = false; isViewClick = false; isResolvingConnectionFailure = true; if (!resolveConnectionFailure(this, apiClient, connectionResult, RC_SIGN_IN, "Sign In Other Error")) { isResolvingConnectionFailure = false; Context context = getApplicationContext(); CharSequence text = "Failed to connect."; int duration = Toast.LENGTH_SHORT; Toast.makeText(context, text, duration).show(); } } } @Override protected void onActivityResult(int requestCode, int resultCode, Intent intent) { super.onActivityResult(requestCode, resultCode, intent); if (requestCode == RC_SIGN_IN) { isSubmitClick = false; isViewClick = false; isResolvingConnectionFailure = false; if (resultCode == RESULT_OK) { apiClient.connect(); } else { showActivityResultError(this, requestCode, resultCode, "Unknown Error Occured"); } } } private static boolean resolveConnectionFailure(Activity activity, GoogleApiClient client, ConnectionResult result, int requestCode, String fallbackErrorMessage) { if (result.hasResolution()) { Log.d("Leaderboards", "resolveConnectionFailure(): has resolution"); try { result.startResolutionForResult(activity, requestCode); Log.d("Leaderboards", "resolveConnectionFailure(): reolution started"); return 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. client.connect(); return false; } } else { // not resolvable... so show an error message int errorCode = result.getErrorCode(); Dialog dialog = GooglePlayServicesUtil.getErrorDialog(errorCode, activity, requestCode); if (dialog != null) { dialog.show(); } else { // no built-in dialog: show the fallback error message showAlert(activity, fallbackErrorMessage); } return false; } } private static void showActivityResultError(Activity activity, int requestCode, int actResp, String errorDescription) { if (activity == null) { Log.e("Leaderboards", "*** No Activity. Can't show failure dialog!"); return; } Dialog errorDialog; switch (actResp) { case GamesActivityResultCodes.RESULT_APP_MISCONFIGURED: errorDialog = makeSimpleDialog(activity, "App misconfigured."); break; case GamesActivityResultCodes.RESULT_SIGN_IN_FAILED: errorDialog = makeSimpleDialog(activity, "Sign-in failed."); break; case GamesActivityResultCodes.RESULT_LICENSE_FAILED: errorDialog = makeSimpleDialog(activity, "License Failed."); break; default: // No meaningful Activity response code, so generate default Google // Play services dialog final int errorCode = GooglePlayServicesUtil.isGooglePlayServicesAvailable(activity); errorDialog = GooglePlayServicesUtil.getErrorDialog(errorCode, activity, requestCode, null); if (errorDialog == null) { // get fallback dialog Log.e("BaseGamesUtils", "No standard error dialog available. Making fallback dialog."); errorDialog = makeSimpleDialog(activity, errorDescription); } } errorDialog.show(); } private static void showAlert(Activity activity, String message) { (new AlertDialog.Builder(activity)).setMessage(message).setNeutralButton(android.R.string.ok, null).create() .show(); } private static Dialog makeSimpleDialog(Activity activity, String text) { return (new AlertDialog.Builder(activity)).setMessage(text).setNeutralButton(android.R.string.ok, null) .create(); } }