Nenhuma intenção de UserRecoverableAuthIOException usando o Drive SDK para Android

Eu implementei o Google Drive em meu aplicativo Android e funciona muito bem, mas estou tentando descobrir uma maneira de executar um upload / download em um thread de fundo para que eu possa deixar uma atividade e fazer outra coisa no meu aplicativo . O problema é que a unidade precisa da referência de atividade em caso de exceções, como UserRecoverableAuthIOException .

Aqui está a questão que não consigo entender. Aqui está um código try / catch:

 try { //...drive api stuff here } catch (UserRecoverableAuthIOException e) { possibleException = e; try { e.getIntent(); } catch ( NullPointerException e2 ) { //this is the crazy part // e.getIntent() should not throw a nullpointer e2.printStackTrace(); possibleException = e2; } onActivityRestartWhat = RESTART_IMPORT; // just a note i do handle this exception properly in another section of a code when there is an intent. } catch (FileNotFoundException e) { possibleException = e; e.printStackTrace(); } catch (IOException e) { possibleException = e; e.printStackTrace(); } 

O que eu não consigo entender é por que o UserRecoverableAuthIOException está lançando um soro do NullPointerException eu tento acessar o getIntent .

Mais informações

Eu pego UserRecoverableAuthIOException quando mais autenticação é necessária e solicito através do método startActivityForResult . Além disso, essa exceção é lançada somente se eu desistir da atividade iniciada, também conhecida como destruir a atividade. Basicamente, eu tenho um processo que faz o upload / download de arquivos da unidade em um thread e se eu não deixar a atividade até a conclusão funcionar, se eu destruir a atividade através do botão voltar, eu recebo essa exceção.

Rastreamento de pilha

 07-10 14:45:32.903: W/System.err(1450): java.lang.NullPointerException 07-10 14:45:32.913: W/System.err(1450): at android.content.Intent. (Intent.java:3529) 07-10 14:45:32.913: W/System.err(1450): at com.google.android.gms.auth.UserRecoverableAuthException.getIntent(Unknown Source) 07-10 14:45:32.913: W/System.err(1450): at com.google.api.client.googleapis.extensions.android.gms.auth.UserRecoverableAuthIOException.getIntent(UserRecoverableAuthIOException.java:62) 07-10 14:45:32.913: W/System.err(1450): at my.app.DriveHelper$2.run(DriveHelper.java:211) 

Meu desejo

Eu quero executar downloads / uploads (via google drive) em um segmento de fundo. Como o sdk requer startActivityForResult e outros methods que podem exigir uma referência a uma Activity ou Context que dificulte isso, mas deve funcionar assim que o aplicativo receber as permissions sdk que exigem essas referências. Espero que isso faça sentido.

Abaixo estão as etapas que você pode seguir para lidar UserRecoverableAuthIOException exceção UserRecoverableAuthIOException corretamente e você pode até mesmo evitar essa exceção quando voltar pressionado.

Em alguns casos, se você está recebendo esse erro, significa que a atividade é destruída, portanto, você não deve depender da atividade

  • Você precisa criar um novo object com.google.api.services.tasks.Tasks do Context of Service não de qualquer Activity diretamente como mostrado em ‘tasks-android-sample’

Quando você começa Exception

  1. Você precisa mostrar uma notificação com PendingIntent do Service

  2. PendingIntent deve conter a referência a uma atividade, por exemplo, HomeActivity

  3. A atividade deve lidar com a intenção extra e deve fazer as coisas necessárias, como mostrar a checkbox de diálogo Selecionar conta

você pode passar pelo exemplo de código aqui (GoogleTasksService)

O que você pode fazer, neste caso, não use várias atividades.

Ao mudar para vistas, você pode realizar sua tarefa.