Мой пользователь вошел в систему, но когда я вызываю ниже строки кода, если пользователь вошел в систему, я получаю ошибку разрешения разрешения.
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 и пытается показать всплывающее окно, но, когда у пользователя есть разрешение, всплывающее окно исчезает)
можетпожалуйста, помогите мне в вышеуказанном вопросе.