“Llamar esto desde su hilo principal puede conducir a un punto muerto y / o ANRs mientras obtiene accesToken” de GoogleAuthUtil (integración de Google Plus en Android)

En mi aplicación de Android, estoy tratando de obtener AccessToken de GoogleAuthUtil de la siguiente manera:

accessToken = GoogleAuthUtil.getToken (this, mPlusClient.getAccountName (), “oauth2:” + SCOPES);

Pero en esta línea estoy obteniendo el error de la siguiente manera:

E / GoogleAuthUtil (4696): Llamar esto desde su hilo principal puede llevar a un punto muerto y / o ANR E / GoogleAuthUtil (4696): java.lang.IllegalStateException: al invocar esto desde su hilo principal puede llevar a un punto muerto E / GoogleAuthUtil (4696) : en com.google.android.gms.auth.GoogleAuthUtil.b (Fuente desconocida) E / GoogleAuthUtil (4696): en com.google.android.gms.auth.GoogleAuthUtil.getToken (Fuente desconocida) E / GoogleAuthUtil (4696) : en com.google.android.gms.auth.GoogleAuthUtil.getToken (Fuente desconocida)

Cualquier solución de este problema? Cualquier ayuda será apreciada.

Pruébalo con una AsyncTask como esta:

AsyncTask task = new AsyncTask() { @Override protected String doInBackground(Void... params) { String token = null; try { token = GoogleAuthUtil.getToken( MainActivity.this, mGoogleApiClient.getAccountName(), "oauth2:" + SCOPES); } catch (IOException transientEx) { // Network or server error, try later Log.e(TAG, transientEx.toString()); } catch (UserRecoverableAuthException e) { // Recover (with e.getIntent()) Log.e(TAG, e.toString()); Intent recover = e.getIntent(); startActivityForResult(recover, REQUEST_CODE_TOKEN_AUTH); } catch (GoogleAuthException authEx) { // The call is not ever expected to succeed // assuming you have already verified that // Google Play services is installed. Log.e(TAG, authEx.toString()); } return token; } @Override protected void onPostExecute(String token) { Log.i(TAG, "Access token retrieved:" + token); } }; task.execute(); 

SCOPES es una lista separada por espacios de cadenas de scope de OAuth 2.0. Por ejemplo, SCOPES podría definirse como:

 public static final String SCOPES = "https://www.googleapis.com/auth/plus.login " + "https://www.googleapis.com/auth/drive.file"; 

Estos representan los permisos que su aplicación está solicitando al usuario. Los ámbitos solicitados en este ejemplo están documentados aquí:

Use un hilo separado para su código de internet. El error indica que se está ejecutando un proceso más lento en la aplicación y aquí está Internet. Por lo tanto, use un hilo separado o tarea Async.

Mira este enlace NetworkOnMainThreadException

Espero que te ayude.

E / GoogleAuthUtil (4696): java.lang.IllegalStateException: al invocar esto desde su hilo principal puede conducir a un punto muerto

Parece que tienes que hacer eso en un hilo separado, ¿lo has intentado?

Aquí puede encontrar información sobre hilos en Android.

  Thread CrearEventoHilo = new Thread(){ public void run(){ //do something that retrun "Calling this from your main thread can lead to deadlock" } }; CrearEventoHilo.start(); 

CrearEventoHilo.interrupt ();

 public class Foo { MyThread mTh; void cantBeBothered() { mTh = new MyThread( /*...*/ ); mTh.run(); mTh.start(); } void imFinishedNowWaitingForThread() { mTh.join(); } void imOutKillingOffPendingThread() { mTh.interrupt(); } // ..... private class MyThread extends Thread { // ...; MyThread( /*...*/) { // this... = ...; } public void run() { doSomething( /*this...*/ ); } } }