Android: Cómo ocultar el círculo de progreso en Facebook login
Estoy utilizando este método para realizar un inicio de sesión de Facebook sin utilizar el botón fb Autenticación de Facebook sin botón de inicio de sesión
Está funcionando bien, pero una barra de progreso con fondo negro se muestra durante el inicio de sesión fb, supongo que de la actividad com.facebook.LoginActivity
- Facebook api versión usada en facebook android sdk
- API de gráficos de Android Facebook
- ¿Se puede usar la misma ID de aplicación de facebook para la aplicación para Android y iPhone?
- Ejecución de múltiples instancias de la misma aplicación en kitkat android
- Cómo ejecutar graph-api Facebook Android SDK
¿Cómo puedo evitar que se muestre esa actividad ?, solo quiero mostrar mi propio progreso desde mi actividad de la aplicación durante el inicio de sesión en com.facebook.LoginActivity
- Facebook (OAuthException - # 100) Se ha intentado acceder al campo nonexisting (first_name) en el tipo de nodo (AnonymousUser)
- Uso del API de logro de Facebook en Android
- Nombre del paquete y clase Nombre de la aplicación de Facebook
- Facebook Android SDK Sesión openForPublish no crear una nueva sesión
- Encuentra los amigos de Facebook del usuario que también usan mi aplicación de Android?
- Iniciar sesión en facebook un botón para abrir una nueva actividad
- Iniciar sesión en facebook desde mi aplicación funciona en el emulador pero no en el dispositivo
- No se puede obtener la ubicación y el correo electrónico mediante la API de Facebook
Tuve el mismo problema con Facebook sdk 4.x. Cuando hago clic en el botón de inicio de sesión de Facebook, la actividad de Facebook aparece translúcida pero muestra una barra de progreso. Por suerte podemos desactivar esta barra de progreso en el tema. Así que la Actividad de Facebook se declara como
<activity android:name="com.facebook.FacebookActivity" android:configChanges="keyboard|keyboardHidden|screenLayout|screenSize|orientation" android:label="@string/app_name" android:theme="@android:style/Theme.Translucent.NoTitleBar" />
Todo lo que tenemos que hacer es crear un estilo que hereda de Theme.Translucent.NoTitleBar
y oculta la barra de progreso:
<style name="FullyTranslucent" parent="android:Theme.Translucent.NoTitleBar"> <item name="android:progressBarStyle">@style/InvisibleProgress</item> </style> <style name="InvisibleProgress"> <item name="android:visibility">gone</item> </style>
Ahora ponga el tema de la actividad a nuestro nuevo tema:
<activity android:name="com.facebook.FacebookActivity" android:configChanges="keyboard|keyboardHidden|screenLayout|screenSize|orientation" android:label="@string/app_name" android:theme="@style/FullyTranslucent" />
Voila! El ProgressBar antes de inicio de sesión se ha ido.
Para mejorar la excelente respuesta de @ VM4, modifiqué su enfoque para que funcione correctamente con SDK versión 4.12.0
En primer lugar, agregué lo siguiente a AndroidManifest.xml
<activity xmlns:tools="http://schemas.android.com/tools" android:name="com.facebook.FacebookActivity" android:configChanges="keyboard|keyboardHidden|screenLayout|screenSize|orientation" android:label="@string/app_name" android:theme="@style/Translucent" tools:replace="android:theme"/>
En Android Studio 2.2, es probable que Manifest Merging produzca un error al quejarse de que el android:theme
no se puede sobreescribir ya que ya existe. Esto se puede resolver usando las tools:replace="android:theme"
en la etiqueta <activity>
.
/res/values/styles.xml
un estilo personalizado dentro de /res/values/styles.xml
<style name="Translucent" parent="Translucent.Base"/> <style name="Translucent.Base" parent="android:Theme.Translucent.NoTitleBar"> <item name="android:progressBarStyle">@style/InvisibleProgress</item> </style>
Esto eliminó correctamente el horrible diálogo de progreso de Facebook.
Sin embargo, en los dispositivos 5.0 (API 21) + esto tuvo el efecto secundario de colorear la parte superior de la barra de sistema más negro para el momento en que la actividad de FacebookActivity
estaba activa.
Para corregir esto, agregué un estilo en res/values-v21/styles.xml
<style name="Translucent" parent="Translucent.Base"> <item name="windowActionBar">false</item> <item name="windowNoTitle">true</item> <item name="android:windowDrawsSystemBarBackgrounds">true</item> <item name="android:statusBarColor">@android:color/transparent</item> </style>
Esto hizo que el tema fuera completamente transparente y eliminó el diálogo de progreso.
Por último, una cosa a tener en cuenta con las soluciones que recomiendan usar @android:style/Theme.NoDisplay
es que esto no funcionará en Android Marshmallow 6.0 (API 23) + y probablemente debería evitarse en el futuro.
<activity android:name="com.facebook.FacebookActivity" android:configChanges="keyboard|keyboardHidden|screenLayout|screenSize|orientation" android:label="@string/app_name" android:theme="@style/FullyTranslucent" tools:replace="android:theme"/>` <style name="FullyTranslucent" parent="android:Theme.Translucent.NoTitleBar"> <item name="android:progressBarStyle">@style/InvisibleProgress</item> </style> <style name="InvisibleProgress"> <item name="android:visibility">gone</item> </style>
Simple solución sólo muestra la barra de progreso en registercallback
Ver mi código
fb_login.registerCallback(callbackManager, new FacebookCallback<LoginResult>() { @Override public void onSuccess(LoginResult loginResult) { progressBar.setVisibility(View.VISIBLE); // App code GraphRequest request = GraphRequest.newMeRequest( loginResult.getAccessToken(), new GraphRequest.GraphJSONObjectCallback() { @Override public void onCompleted( JSONObject object, GraphResponse response) { // Application code Log.v("Profile --------- ", response.toString()); progressBar.setVisibility(View.GONE); try { if (object!=null){ F_ID = object.getString("id"); if (object.has("first_name")) Name = object.getString("name"); Log.d(TAG, "onCompleted: Name - "+object.getString("name")); if (object.has("last_name")) LastName = object.optString("last_name"); Log.d(TAG, "onCompleted: LastName - "+object.optString("last_name")); if (object.has("email")) Email = object.optString("email"); if (object.has("birthday")) DOB = object.optString("birthday"); ProfilePic = "https://graph.facebook.com/" + F_ID + "/picture?type=large"; Toast.makeText(getApplicationContext(), "Login Successful!", Toast.LENGTH_LONG).show(); Intent intent = new Intent(getApplicationContext(), MainActivity.class); intent.putExtra("Name", object.getString("name")); intent.putExtra("Email", Email); intent.putExtra("DOB", DOB); intent.putExtra("ID", F_ID); intent.putExtra("ImgURL", ProfilePic); Log.d(TAG, "onCompleted: Email = "+Email+" Name = "+Name+" FID = "+F_ID); //sharedpreference is used to store the email, password and the useername SharedPreferenceManager.setDefaults("email", Email, SigninActivity.this); SharedPreferenceManager.setDefaults("facebook_id", F_ID, SigninActivity.this); SharedPreferenceManager.setDefaults("profile_pic", "https://graph.facebook.com/" + F_ID + "/picture?type=large", SigninActivity.this); if (object.has("name")) SharedPreferenceManager.setDefaults("username", Name, SigninActivity.this); Log.d(TAG, "onCompleted: Store shared data"); startActivity(intent); }else Log.d(TAG, "onCompleted: object is null "+object); } catch (JSONException e) { e.printStackTrace(); } } }); Bundle parameters = new Bundle(); parameters.putString("fields", "id,name,email,gender, birthday"); request.setParameters(parameters); request.executeAsync(); System.out.println("Facebook Login Successful!"); System.out.println("Logged in user Details : "); System.out.println("--------------------------"); System.out.println("User ID : " + loginResult.getAccessToken().getUserId()); System.out.println("Authentication Token : " + loginResult.getAccessToken().getToken()); } @Override public void onCancel() { Toast.makeText(getApplicationContext(), "Login cancelled by user!", Toast.LENGTH_LONG).show(); System.out.println("Facebook Login Cancel!!"); } @Override public void onError(FacebookException e) { Toast.makeText(getApplicationContext(), "Something went wrong!!", Toast.LENGTH_LONG).show(); System.out.println("Facebook Login failed!! because of " + e.getCause().toString()); } });
- ¿Cómo obtener el tamaño total de RAM de un dispositivo?
- Android frente a frente de cámara tomando fotos invertidas