Android 游戏服务不会提交分数
我在尝试向我的游戏服务领导委员会提交分数时遇到了一个问题。从我的Main活动中,用户成功登录,然后从我的GameScreen活动中,我尝试提交分数,但失败:(…我的问题是连接是否持续,或者在提交之前是否必须重新连接用户 主要活动Android 游戏服务不会提交分数,android,google-play-services,leaderboard,Android,Google Play Services,Leaderboard,我在尝试向我的游戏服务领导委员会提交分数时遇到了一个问题。从我的Main活动中,用户成功登录,然后从我的GameScreen活动中,我尝试提交分数,但失败:(…我的问题是连接是否持续,或者在提交之前是否必须重新连接用户 主要活动 public class MainActivity extends BaseGameActivity implements View.OnClickListener, GoogleApiClient.ConnectionCallbacks, GoogleApi
public class MainActivity extends BaseGameActivity implements View.OnClickListener, GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener {
Button siButton;
private GoogleApiClient mGoogleApiClient;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mGoogleApiClient = new GoogleApiClient.Builder(this)
.addConnectionCallbacks(this)
.addOnConnectionFailedListener(this)
.addApi(Plus.API).addScope(Plus.SCOPE_PLUS_LOGIN)
.addApi(Games.API).addScope(Games.SCOPE_GAMES)
.build();
siButton = (Button) findViewById(R.id.sign_out_button);
siButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (view.getId() == R.id.sign_in_button) {
beginUserInitiatedSignIn();
} else if (view.getId() == R.id.sign_out_button) {
signOut();
findViewById(R.id.sign_in_button).setVisibility(View.VISIBLE);
findViewById(R.id.sign_out_button).setVisibility(View.GONE);
}
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
public void onSignInSucceeded() {
findViewById(R.id.sign_in_button).setVisibility(View.GONE);
findViewById(R.id.sign_out_button).setVisibility(View.VISIBLE);
}
@Override
public void onSignInFailed() {
findViewById(R.id.sign_in_button).setVisibility(View.VISIBLE);
findViewById(R.id.sign_out_button).setVisibility(View.GONE);
}
@Override
public void onClick(View v) {
}
@Override
public void onConnected(Bundle bundle) {
}
@Override
public void onConnectionSuspended(int i) {
}
@Override
public void onConnectionFailed(ConnectionResult connectionResult) {
}
}
游戏屏幕
public class GameScreen extends BaseGameActivity implements GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener {
private int c;
private GoogleApiClient mGoogleApiClient;
TextView counter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.game_screen);
setRequestedClients(BaseGameActivity.CLIENT_GAMES | BaseGameActivity.CLIENT_APPSTATE);
mGoogleApiClient = new GoogleApiClient.Builder(this)
.addConnectionCallbacks(this)
.addOnConnectionFailedListener(this)
.addApi(Plus.API).addScope(Plus.SCOPE_PLUS_LOGIN)
.addApi(Games.API).addScope(Games.SCOPE_GAMES)
.build();
private void progressSetup() {
Thread timerThread = new
Thread() {
@Override
public void run() {
try {
while (mbActive && (waited < TIMER_RUNTIME)) {
sleep(THREAD_SLEEP);
if (mbActive) {
waited += 100;
updateProgress(waited);
if (waited > 9999) {
mbActive = false;
gameOver();
}
}
}
} catch (InterruptedException e) {
Log.d("fail", "failure" + e);
}
}
};
startTread = false;
timerThread.start();
}
private void updateProgress(final int timePassed) {
if (null != mProgressBar) {
progress = mProgressBar.getMax() * timePassed / TIMER_RUNTIME;
mProgressBar.setProgress(progress);
}
}
//game over
private void gameOver() {
runOnUiThread(new Runnable() {
@Override
public void run() {
upDateScore();
}
});
}
private void upDateScore(){
if (mGoogleApiClient.isConnected()) {
Games.Leaderboards.submitScore(mGoogleApiClient, getString(R.string.app_id), c);
Log.d("connectted.....................................................");
} else {
Log.d("not connectted.....................................................");
}
}
@Override
public void onBackPressed() {
Intent home = new Intent(GameScreen.this, MainActivity.class);
home.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
startActivity(home);
}
@Override
public void onConnected(Bundle bundle) {
}
@Override
public void onConnectionSuspended(int i) {
}
@Override
public void onConnectionFailed(ConnectionResult connectionResult) {
}
@Override
public void onSignInFailed() {
}
@Override
public void onSignInSucceeded() {
}
公共类GameScreen扩展BaseGameActivity实现GoogleAppClient.ConnectionCallbacks、GoogleAppClient.OnConnectionFailedListener{
私人INTC;
私人GoogleapClient MGoogleapClient;
文本视图计数器;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.game_屏幕);
SetRequestedClient(BaseGameActivity.CLIENT_GAMES | BaseGameActivity.CLIENT_APPSTATE);
mgoogleapclient=新的Googleapclient.Builder(此)
.addConnectionCallbacks(此)
.addOnConnectionFailedListener(此)
.addApi(Plus.API).addScope(Plus.SCOPE\u Plus\u登录)
.addApi(Games.API).addScope(Games.SCOPE\u Games)
.build();
私有void progressSetup(){
线程时间读取=new
线程(){
@凌驾
公开募捐{
试一试{
while(mbActive&&(waited9999){
mbActive=false;
gameOver();
}
}
}
}捕捉(中断异常e){
日志d(“失败”、“失败”+e);
}
}
};
startTread=false;
timerThread.start();
}
私有void updateProgress(最终整数时间通过){
if(null!=mProgressBar){
progress=mProgressBar.getMax()*timePassed/TIMER\u运行时;
mProgressBar.setProgress(进度);
}
}
//游戏结束
私有的void gameOver(){
runOnUiThread(新的Runnable(){
@凌驾
public void run(){
upDateScore();
}
});
}
私有void upDateScore(){
if(mgoogleapClient.isConnected()){
游戏。排行榜。提交核心(mgoogleapclient,getString(R.string.app_id),c);
日志d(“连接的”);
}否则{
日志d(“未连接”);
}
}
@凌驾
public void onBackPressed(){
意图主页=新意图(GameScreen.this,MainActivity.class);
home.addFlags(Intent.FLAG\u ACTIVITY\u NO\u动画);
星触觉(家);
}
@凌驾
未连接的公共空间(捆绑包){
}
@凌驾
公共空间连接暂停(int i){
}
@凌驾
公共无效onConnectionFailed(ConnectionResult ConnectionResult){
}
@凌驾
公共无效已签名失败(){
}
@凌驾
public void onSignancedAccessed(){
}
}只需在method Games.Leadboards.submitScore(MGoogleAppClient,getString(R.string.app\u id))中用排行榜id替换getString(R.string.app\u id)
排行榜id如下所示:“CgkI0tXt-q0HEA****”Ivan Syabro是正确的。您必须使用排行榜id,请参阅 在开发者控制台的游戏服务部分,您可以使用提供的按钮轻松地将排行榜和成就ID导出为xml文件 一般来说,将游戏服务与多个活动一起使用可能会导致额外的等待时间,因为每个活动在开始时都会单独登录。因此,据我所知,最好使用带有片段的实现,请参见此著名示例