Показать Google Play LeaderBoard из класса GameButton - PullRequest
0 голосов
/ 24 апреля 2020

Я уже несколько дней безуспешно пытаюсь показать таблицу лидеров Google Play для своей игры из своего класса игровых кнопок. Тем не менее, я могу показать таблицу лидеров из основной деятельности без проблем.

Вот код, который находится на моей MainActivity:

    public void showLeaderboard() {

    Games.getLeaderboardsClient(this, GoogleSignIn.getLastSignedInAccount(this))
            .getLeaderboardIntent(getString(R.string.leaderboard_id))
            .addOnSuccessListener(new OnSuccessListener<Intent>() {
                @Override
                public void onSuccess(Intent intent) {

                    startActivityForResult(intent,2000);
                }
            });
}

Однако, когда я пытаюсь вызвать этот код с моей кнопки, я получаю всевозможные сбои и ошибки. Вот мой класс кнопок:

package com.nexxiom.zombieassault.GameObjects.Buttons;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.Rect;
import android.util.Log;
import android.view.MotionEvent;
import static com.nexxiom.zombieassault.Scaling.DrawX;
import static com.nexxiom.zombieassault.Scaling.DrawY;

public class LeaderBoardButton {

    Context context;
    public Bitmap image;
    public Rect rect;
    public boolean isVisible;

    Paint p;

    public LeaderBoardButton(Context context,Bitmap image,int x,int y) {
        this.context = context;
        this.image = image;
        this.rect = new Rect(x - image.getWidth()/2,y - image.getHeight()/2,x - image.getWidth()/2+image.getWidth(),y - image.getHeight()/2+image.getHeight());
        this.isVisible = true;

        p = new Paint();
    }

    public void draw(Canvas canvas){
        canvas.drawBitmap(image, DrawX(rect.left), DrawY(rect.top), null);
    }

    public boolean onTouchEvent(MotionEvent e){

        float posX = e.getX();
        float posY = e.getY();

        switch (e.getActionMasked()) {

            case MotionEvent.ACTION_UP: {


                if (posX > DrawX(rect.left) && posX < DrawX(rect.right) && posY > DrawY(rect.top) && posY < DrawY(rect.bottom)) {

                    try{

                        //showLeaderboard();

                    }catch (Exception ex){
                        Log.d("LEADERBOARD",ex.getMessage());

                    }

                }


            }
            break;

        }
        return false;
    }




}

Вы заметите, что у меня есть строка showLeaderboard (), закомментированная в onTouchEvent (). Здесь я хочу запустить таблицу лидеров.

Вещи, которые я пробовал. Сделайте showLeaderBoard stati c, переместите код в класс кнопки, расширяя активность на кнопку и т. Д. c.

Моя основная деятельность выглядит следующим образом:

public class MainActivity extends AppCompatActivity{



    public static Context context;
    DisplayMetrics displayMetrics;
    static int DPI = 0;
    public static int SCREEN_WIDTH;
    public static int SCREEN_HEIGHT;



    @SuppressLint("SourceLockedOrientationActivity")
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        View decorView = getWindow().getDecorView();
        int uiOptions = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_FULLSCREEN | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY;
        decorView.setSystemUiVisibility(uiOptions);


        signInSilently();





        displayMetrics  = new DisplayMetrics();
        getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);
        SCREEN_HEIGHT = displayMetrics.heightPixels;
        SCREEN_WIDTH = displayMetrics.widthPixels;
        DPI = displayMetrics.densityDpi;


        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);



        setContentView(new GameView(this));



    }
    public void showLeaderboard() {

        Games.getLeaderboardsClient(this, GoogleSignIn.getLastSignedInAccount(this))
                .getLeaderboardIntent(getString(R.string.leaderboard_id))
                .addOnSuccessListener(new OnSuccessListener<Intent>() {
                    @Override
                    public void onSuccess(Intent intent) {

                        startActivityForResult(intent,2000);
                    }
                });
    }


    private void signInSilently() {
        GoogleSignInOptions signInOptions = GoogleSignInOptions.DEFAULT_GAMES_SIGN_IN;
        GoogleSignInAccount account = GoogleSignIn.getLastSignedInAccount(this);
        if (GoogleSignIn.hasPermissions(account, signInOptions.getScopeArray())) {
            // Already signed in.
            // The signed in account is stored in the 'account' variable.
            GoogleSignInAccount signedInAccount = account;

        } else {
            // Haven't been signed-in before. Try the silent sign-in first.
            GoogleSignInClient signInClient = GoogleSignIn.getClient(this, signInOptions);
            signInClient
                    .silentSignIn()
                    .addOnCompleteListener(
                            this,
                            new OnCompleteListener<GoogleSignInAccount>() {
                                @Override
                                public void onComplete(@NonNull Task<GoogleSignInAccount> task) {
                                    if (task.isSuccessful()) {
                                        // The signed in account is stored in the task's result.
                                        GoogleSignInAccount signedInAccount = task.getResult();

                                        //Log.d("SIGNIN","TRUE");
                                    } else {
                                        startSignInIntent();
                                    }
                                }
                            });
        }
    }


    private void startSignInIntent() {
        GoogleSignInClient signInClient = GoogleSignIn.getClient(this,
                GoogleSignInOptions.DEFAULT_GAMES_SIGN_IN);
        Intent intent = signInClient.getSignInIntent();
        startActivityForResult(intent, 1000);
    }
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (requestCode == 1000) {
            GoogleSignInResult result = Auth.GoogleSignInApi.getSignInResultFromIntent(data);
            if (result.isSuccess()) {
                // The signed in account is stored in the result.
                GoogleSignInAccount signedInAccount = result.getSignInAccount();

            } else {
                String message = result.getStatus().getStatusMessage();
                if (message == null || message.isEmpty()) {
                    message = "Sign In Error";

                }
                new AlertDialog.Builder(this).setMessage(message)
                        .setNeutralButton(android.R.string.ok, null).show();
            }
        }
    }




}

Как я могу запустить код showleaderboard для mainacctivity из моего класса кнопок?

...