@Override **//depricated**
    public void onActivityResult(int requestCode, int resultCode, @Nullable @org.jetbrains.annotations.Nullable Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
         if (resultCode == Activity.RESULT_OK) {
            if (requestCode == REQUEST_OAUTH_REQUEST_CODE) {
                insertAndVerifySession();
            }
        }
    }

GoogleSignIn.requestPermissions(
                fragment,
                REQUEST_OAUTH_REQUEST_CODE,
                GoogleSignIn.getLastSignedInAccount(context),
                fitnessOptions);

Какая альтернатива onActivityResult для GoogleSignIn во фрагменте?

2
user16388371 6 Июл 2021 в 08:19

4 ответа

Лучший ответ

Как сказано в здесь , вы можете узнать о намерении войти, позвонив getSignInIntent

ActivityResultLauncher<Intent> exampleActivityResult= registerForActivityResult(
new ActivityResultContracts.StartActivityForResult(),
new ActivityResultCallback<ActivityResult>() {
    @Override
    public void onActivityResult(ActivityResult result) {
        if (result.getResultCode() == Activity.RESULT_OK) {
            Task<GoogleSignInAccount> task = GoogleSignIn.getSignedInAccountFromIntent(result.getData());
handleSignInResult(task);
        }
    }
});



//call
   exampleActivityResult.launch(mGoogleSignInClient.getSignInIntent());
1
Naveen Avidi 6 Июл 2021 в 06:06

Появился новый подход, познакомьтесь с ActivityResultContracts класс из AndroidX. ЗДЕСЬ у вас есть некоторые объяснения и руководство

0
snachmsm 6 Июл 2021 в 05:45

После того, как результат активности устарел, мы используем someActivityResultLauncher.launch

В Java:

 Intent intent = new Intent(this, Example.class);
 someActivityResultLauncher.launch(intent);

В Котлине:

val intent = Intent(this, Example::class.java)
resultLauncher.launch(intent)

Для получения результатов мы используем registerForActivityResult

В Java:

 ActivityResultLauncher<Intent> exampleActivityResult= registerForActivityResult(
        new ActivityResultContracts.StartActivityForResult(),
        new ActivityResultCallback<ActivityResult>() {
            @Override
            public void onActivityResult(ActivityResult result) {
                    // There are no request codes in this method 
                if (result.getResultCode() == Activity.RESULT_OK) {
                    Intent data = result.getData();
                }
            }
        });

В Котлине:

var exampleActivityResult= registerForActivityResult(StartActivityForResult()) { result ->
if (result.resultCode == Activity.RESULT_OK) {
    // There are no request codes in this method 
    val data: Intent? = result.data
    }


}
0
Shaheer Ghouri 6 Июл 2021 в 05:57

Один из способов - зарегистрировать ActivityResultContracts, аналогичный код я использовал в своем проекте:

 //declare ActivityResultLauncher<Intent> 
 ActivityResultLauncher<Intent> ResultLauncher;

Внутри onAttach или onCreate выполните задание

ResultLauncher = registerForActivityResult(
                new ActivityResultContracts.StartActivityForResult(),
                result -> {
                    if (result.getResultCode() == Activity.RESULT_OK) {
                 ...//do stuff on result here
                      /* 
                  There are no request codes
                              You can put request code in extra and Unpack it as your string/int e.t.c
                      Intent data = result.getData();
                       assert data != null;
                        String req_code = data.getStringExtra("reqCode");
                             if(req_code.equal(REQUEST_OAUTH_REQUEST_CODE){
                                     ...do stuff
                                           }
                         */
                    }
                });

Для запуска активности просто используйте .launch (намерение)

Intent intent = new Intent(getContext(), SomeClass.class);
 ResultLauncher.launch(intent);

Также вы можете проверить этот ответ на аналогичный вопрос и о том, как обрабатывать это на Kotlin / Java
Надеюсь, это поможет

0
GremlinShX 6 Июл 2021 в 06:21