【发布时间】:2014-08-09 16:27:44
【问题描述】:
多年来,我一直使用 SO 来帮助我解决编程上的挫败感,这感觉就像我第一次遇到一个我一个人独有的问题(或者至少没有其他人问过这个问题)。无论如何,这是我的问题,我将非常感谢任何人可以提供的任何帮助。 :)
过去 24 小时左右,我一直在尝试在我现有的 Android 应用中实施 Google 游戏服务。我按照 Google 提供的说明在开发者控制台中设置应用程序、使用签名证书密钥、将其链接到商店中的应用程序、将应用程序 ID 放入我的 Eclipse 项目中的位置等等。我按照推荐从 BaseGameActivity 类派生,我的项目编译良好,没有错误。我还使用 FacebookSDK 和 AdMob/Google 广告(使用新的 Google 服务库)。我想不出任何我没有做过的事情可以解释我的错误 - 如下......
当我的应用打开并尝试登录时,它会弹出并正常要求权限/授权,但一旦我授予这些权限,它就会显示“登录失败。请检查您的网络连接并重试。”。在过去的 24 小时内,每次都会发生这种情况,因为我一直在这里和那里尝试一些小调整,希望能有所作为。正如错误消息所暗示的那样,我 100 % 确定我的网络连接没有问题。
附:它似乎确实在一个随机时间连接/登录,并且我收到了欢迎消息,但是当它进入我的应用程序中的下一个活动时,它似乎已经再次退出并返回了错误消息。我还从 Google+ 方面进行了检查,我可以看到我确实在哪里授予了我的应用权限(这意味着我确实成功登录并正确授权)所以我无法理解我在游戏本身。
我知道这很长,但我想尽可能详尽地解释我的解释 - 谁能告诉我如何处理这个问题? :(
import java.util.Iterator;
import java.util.List;
import java.util.Timer;
import android.app.ActionBar.LayoutParams;
import android.app.ActivityManager;
import android.app.ActivityManager.RunningAppProcessInfo;
import android.content.Context;
import android.content.Intent;
import android.content.res.Resources;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Point;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.os.Handler;
import android.view.Display;
import android.view.Gravity;
import android.view.Menu;
import android.view.MotionEvent;
import android.view.View;
import android.view.animation.RotateAnimation;
import android.widget.FrameLayout;
import android.widget.Gallery;
import android.widget.ImageView;
import com.flurry.android.FlurryAgent;
import com.google.android.gms.ads.AdRequest;
import com.google.android.gms.ads.AdSize;
import com.google.android.gms.ads.AdView;
import com.google.example.games.basegameutils.BaseGameActivity;
//import android.view.Gravity;
//import com.google.ads.AdRequest;
//import com.google.ads.AdSize;
//import com.google.ads.AdView;
public class MainActivity extends BaseGameActivity {
private FrameLayout myLayout;
private FrameLayout.LayoutParams params;
private MainMenuView myView;
private RotateAnimation buttonRotate, buttonReverseRotate;
private ImageView start, achievements, highscores;
protected AdView adView;
boolean musicStopped = false;
//private AdView adView;
String name = "startSt";
int width, height;
Intent i;
public void onSignInFailed () {
}
public void onSignInSucceeded () {
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//setContentView(R.layout.activity_level_select);
i = new Intent(this, BackgroundMusicService.class);
startService(i);
Display display = getWindowManager().getDefaultDisplay();
Point size = new Point();
adView = new AdView(this);
adView.setAdSize(AdSize.SMART_BANNER);
adView.setAdUnitId("fasf78678fhk");
//adView.setAdSize(AdSize.BANNER);
//adView.setAdUnitId(AD_UNIT_ID);
if (android.os.Build.VERSION.SDK_INT >= 13) {
display.getSize(size);
width = size.x;
height = size.y;
}
else {
width = display.getWidth();
height = display.getHeight();
}
start = new ImageView(this);
//animview.setAdjustViewBounds(true); // set the ImageView bounds to match the Drawable's dimensions
start.setLayoutParams(new Gallery.LayoutParams(LayoutParams.WRAP_CONTENT,
LayoutParams.WRAP_CONTENT));
params = new FrameLayout.LayoutParams((int)(width * 0.40), (int)(height * ((double)60/534)));
params.setMargins((int)(width * 0.30), (int) (height * ((double)280/534)), (int)(width * 0.70), (int)(height * ((double)340/534)));
//(int)(width * 0.20), (int)(height * 0.01), (int)(width * 0.80), (int)(height * 0.14)
params.gravity = Gravity.TOP;
start.setLayoutParams(params);
start.setBackgroundResource(R.drawable.startbtn);
//
achievements = new ImageView(this);
//animview.setAdjustViewBounds(true); // set the ImageView bounds to match the Drawable's dimensions
achievements.setLayoutParams(new Gallery.LayoutParams(LayoutParams.WRAP_CONTENT,
LayoutParams.WRAP_CONTENT));
params = new FrameLayout.LayoutParams((int)(width * 0.40), (int)(height * ((double)53/534)));
params.setMargins((int)(width * 0.30), (int) (height * ((double)353/534)), (int)(width * 0.70), (int)(height * ((double)408/534)));
//(int)(width * 0.20), (int)(height * 0.01), (int)(width * 0.80), (int)(height * 0.14)
params.gravity = Gravity.TOP;
achievements.setLayoutParams(params);
achievements.setBackgroundResource(R.drawable.achievementsbtn);
//
highscores = new ImageView(this);
//animview.setAdjustViewBounds(true); // set the ImageView bounds to match the Drawable's dimensions
highscores.setLayoutParams(new Gallery.LayoutParams(LayoutParams.WRAP_CONTENT,
LayoutParams.WRAP_CONTENT));
params = new FrameLayout.LayoutParams((int)(width * 0.40), (int)(height * ((double)56/534)));
params.setMargins((int)(width * 0.30), (int) (height * ((double)422/534)), (int)(width * 0.70), (int)(height * ((double)478/534)));
//(int)(width * 0.20), (int)(height * 0.01), (int)(width * 0.80), (int)(height * 0.14)
params.gravity = Gravity.TOP;
highscores.setLayoutParams(params);
highscores.setBackgroundResource(R.drawable.highscoresbtn);
//adView = new AdView(this, AdSize.BANNER, "a152709973dcd0d");
//LinearLayout.LayoutParams LP = (LinearLayout.LayoutParams) adView.getLayoutParams();
//LP.gravity=Gravity.BOTTOM;
//adView.setLayoutParams(LP);
musicStopped = false;
buttonRotate = new RotateAnimation(-4f, 4f, (float) (0.2 * width), (float) (height * ((double)28/534)));
buttonRotate.setDuration(1000);
buttonRotate.setRepeatMode(RotateAnimation.REVERSE);
buttonRotate.setRepeatCount(1000);
buttonRotate.setFillEnabled(true);
buttonRotate.setFillAfter(true);
//
buttonReverseRotate = new RotateAnimation(4f, -4f, (float) (0.2 * width), (float) (height * ((double)28/534)));
buttonReverseRotate.setDuration(1000);
buttonReverseRotate.setRepeatMode(RotateAnimation.REVERSE);
buttonReverseRotate.setRepeatCount(1000);
buttonReverseRotate.setFillEnabled(true);
buttonReverseRotate.setFillAfter(true);
buttonReverseRotate.setStartOffset(0);
//adView.setX(0f);
//adView.setY((float) (height * 0.8));csd
myView = new MainMenuView (this, i, width, height);
myLayout = new FrameLayout(this);
setContentView(myLayout);
myLayout.addView(myView);
myLayout.addView(start);
myLayout.addView(highscores);
myLayout.addView(achievements);
FrameLayout.LayoutParams lp = new FrameLayout.LayoutParams(FrameLayout.LayoutParams.WRAP_CONTENT, FrameLayout.LayoutParams.WRAP_CONTENT);
lp = new FrameLayout.LayoutParams((int)(width), (int)(height * 0.09));
lp.setMargins((int)(width * 0.0), (int)(height * 0.00), (int)(width * 1), (int)(height * 0.09));
lp.gravity = Gravity.TOP;
adView.setLayoutParams(lp);
myLayout.addView(adView);
adView.loadAd(new AdRequest.Builder().build());
adView.setVisibility(View.INVISIBLE);
start.setVisibility(View.GONE);
achievements.setVisibility(View.GONE);
highscores.setVisibility(View.GONE);
//FACEBOOK
//adView.loadAd(new AdRequest());
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
name = "activity result runs";
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.level_select, menu);
return true;
}
public String getName() {
return name;
}
public void onBackPressed () {
stopService(i);
super.onBackPressed();
}
public void showButtons () {
//start.setVisibility(View.VISIBLE);
//achievements.setVisibility(View.VISIBLE);
//highscores.setVisibility(View.VISIBLE);
}
//public void onUserLeaveHint () {
//stopService(i);
//super.onUserLeaveHint();
//}
private boolean isAppForeground() {
ActivityManager mActivityManager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
List<RunningAppProcessInfo> l = mActivityManager
.getRunningAppProcesses();
Iterator<RunningAppProcessInfo> i = l.iterator();
while (i.hasNext()) {
RunningAppProcessInfo info = i.next();
if (info.uid == getApplicationInfo().uid && info.importance == RunningAppProcessInfo.IMPORTANCE_FOREGROUND)
{
return true;
}
}
return false;
}
@SuppressWarnings("deprecation")
public void onResume () {
super.onResume();
//name = "StartSt2";
start.startAnimation(buttonRotate);
highscores.startAnimation(buttonRotate);
achievements.startAnimation(buttonReverseRotate);
}
public void onStop () {
super.onStop();
FlurryAgent.onEndSession(this);
if (!isAppForeground()) {
stopService(i);
musicStopped = true;
}
}
public void onStart () {
super.onStart();
FlurryAgent.onStartSession(this, "KFKHK45345JHDADF");
//stopService(i);
//startService(i);
}
public void onRestart () {
super.onRestart();
if (musicStopped) {
//stopService(i);
startService(i);
musicStopped = false;
}
}
public void startMusicService () {
startService(i);
}
public void stopMusicService () {
stopService(i);
}
}
【问题讨论】:
-
很抱歉。我没有包含任何内容的唯一原因是因为我实际上只是从 BaseGameActivity 派生了我现有的 MainActivity 类,并实现了 onSignInSucceeded 和 onSignInFailed 函数,其中没有任何内容。所以除了我的游戏代码的其余部分外,没有太多要展示的东西——要弄清楚如何将它粘贴到这里。 1000行左右...
-
您用于登录的帐户是否在您的控制台中列为服务测试帐户?
标签: java android service google-play-services google-play-games