Экран мигает, когда пользователь переходит к другому виду деятельности и возвращается в MainActivity.class - PullRequest
2 голосов
/ 21 октября 2019

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

  mDriveServiceHelper = new DriveServiceHelper(getGoogleDriveService(getApplicationContext(), alreadyloggedAccount, "appname"));


 public static Drive getGoogleDriveService(Context context, GoogleSignInAccount account, String appName) {
        GoogleAccountCredential credential =
                GoogleAccountCredential.usingOAuth2(
                        context, Collections.singleton(DriveScopes.DRIVE_FILE));
        credential.setSelectedAccount(account.getAccount());
        com.google.api.services.drive.Drive googleDriveService =
                new com.google.api.services.drive.Drive.Builder(
                        AndroidHttp.newCompatibleTransport(),
                        new GsonFactory(),
                        credential)
                        .setApplicationName(appName)
                        .build();
        return googleDriveService;
    }

В моем случае каждый раз, когда мне нужно вызвать нижеметоды, тогда только это работает.

, когда я вызываю requestSignIn () , а затем startActivityForResult(googleSignInClient.getSignInIntent(), REQUEST_CODE_SIGN_IN). тогда только в том случае, если у пользователя нет разрешения, появляется всплывающее окно доступа к диску и в следующий раз, когда пользователь входит в приложение, которое не открывает всплывающее окно доступа к диску (что ожидается). но приложение пытается что-то открыть (какая-то активность или всплывающее окно на гугл-диске). Я думаю, и поскольку у пользователя есть разрешение, оно не показывает всплывающее окно, но экран мигает один раз, когда мы переходим к другой активности и возвращаемся на mainactivity.class. ,(этот код диска google написан в основной деятельности)

 private void requestSignIn() {

        Log.d(TAG, "Requesting sign-in");
        GoogleSignInOptions signInOptions =
                new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
                        .requestScopes(new Scope(DriveScopes.DRIVE_FILE))
                        .requestEmail()
                        .build();

        googleSignInClient = GoogleSignIn.getClient(this, signInOptions);


    }

    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent resultData) {

        switch (requestCode) {
            case REQUEST_CODE_SIGN_IN:
                if (resultCode == Activity.RESULT_OK && resultData != null) {
                    handleSignInResult(resultData);
                }
                break;


        }

        super.onActivityResult(requestCode, resultCode, resultData);
    }

    String TAG = ":::: Backup User Data ::::::::::";
    private void handleSignInResult(Intent result) {
        GoogleSignIn.getSignedInAccountFromIntent(result)
                .addOnSuccessListener(googleAccount -> {
                    //System.out.println(">>>>>>>>>>>> handleSignInResult inside Mainactivity>>>>>>>>>>>>>>>. ");
                    Log.d(TAG, "Signed in as " + googleAccount.getEmail());

                    // Use the authenticated account to sign in to the Drive service.
                    GoogleAccountCredential credential =
                            GoogleAccountCredential.usingOAuth2(
                                    this, Collections.singleton(DriveScopes.DRIVE_FILE));
                    credential.setSelectedAccount(googleAccount.getAccount());
                    Drive googleDriveService =
                            new Drive.Builder(
                                    AndroidHttp.newCompatibleTransport(),
                                    new GsonFactory(),
                                    credential)
                                    .setApplicationName("Drive API Migration")
                                    .build();

                    // The DriveServiceHelper encapsulates all REST API and SAF functionality.
                    // Its instantiation is required before handling any onClick actions.
                    mDriveServiceHelper = new DriveServiceHelper(googleDriveService);
                })
                .addOnFailureListener(exception -> Log.e(TAG, "Unable to sign in.", exception));
    }

Я не хочу, чтобы черная линия проходила с моего экрана каждый раз, когда я перехожу на другой экран и возвращаюсь в MainActivity.class. (я думаю, что черный цвет исчезает с экрана, потому что всякий раз, когда я захожу в класс MainActivity.class, мой код снова проверяет доступ к диску Google и пытается показать всплывающее окно, но, когда у пользователя есть разрешение, всплывающее окно исчезает)

можетпожалуйста, помогите мне в вышеуказанном вопросе.

1 Ответ

0 голосов
/ 03 ноября 2019

Изучая исходный код связанных классов, я считаю, что эта функция GoogleSignIn.getLastSignedInAccount должна быть полезной. Вызовите requestSignIn () в первый раз. Если он вошел в систему раньше, используйте функцию ниже вместо requestSignIn (). Это позволяет избежать startActivityForResult () и мигания.

private void handleSignInWithoutActivity() { //a little modification from handleSignInResult()
    GoogleSignInAccount googleAccount = GoogleSignIn.getLastSignedInAccount(getApplicationContext());

    if(googleAccount!=null){
                Log.d(TAG, "Signed in as " + googleAccount.getEmail());

                // Use the authenticated account to sign in to the Drive service.
                GoogleAccountCredential credential =
                        GoogleAccountCredential.usingOAuth2(
                                this, Collections.singleton(DriveScopes.DRIVE_FILE));
                credential.setSelectedAccount(googleAccount.getAccount());
                Drive googleDriveService =
                        new Drive.Builder(
                                AndroidHttp.newCompatibleTransport(),
                                new GsonFactory(),
                                credential)
                                .setApplicationName(getString(R.string.app_name))
                                .build();

                // The DriveServiceHelper encapsulates all REST API and SAF functionality.
                // Its instantiation is required before handling any onClick actions.
                mDriveServiceHelper = new DriveServiceHelper(googleDriveService);
    }else {
        //impossibly because it's signed in before. Error handle if it happens.
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...