Entradas

¿Qué es Jetpack Compose?

Jetpack Compose es la biblioteca de IU de Android más reciente que ha tomado la plataforma de desarrollo móvil de Android por sorpresa. Con Jetpack Compose, los desarrolladores pueden construir aplicaciones de alta calidad y sofisticadas que son más fáciles de mantener y escalar. La introducción de Jetpack Compose representa un cambio significativo en la forma en que se crea la interfaz de usuario de una aplicación de Android. En lugar de trabajar con una jerarquía de vistas de Android, Jetpack Compose utiliza un enfoque de programación declarativa para definir la IU de una aplicación. Esto significa que los desarrolladores pueden escribir código que describe cómo debe verse la interfaz de usuario de una aplicación, en lugar de manipular directamente los objetos de vista. Jetpack Compose también viene con una serie de herramientas que facilitan el diseño y la personalización de la interfaz de usuario de una aplicación. Desde una amplia variedad de widgets personalizados hasta la capaci...

Verificar Google Play Services

Imagen
Para que nuestra aplicación pueda ejecutarse si necesitamos Google Play Services, tenemos que hacer la verificación previa. Esto lo podemos lograr fácilmente agregando las siguientes líneas de código en nuestra actividad de lanzamiento o Splash Screen si es que la tenemos sino, en la primera actividad de nuestra aplicación. Creamos el método checkPlayServices()  con  el código errorDialog es una variable global de la actividad. Dialog errorDialog; private boolean checkPlayServices () { GoogleApiAvailability googleApiAvailability = GoogleApiAvailability.getInstance(); int resultCode = googleApiAvailability.isGooglePlayServicesAvailable(this); if (resultCode != ConnectionResult.SUCCESS) { if (googleApiAvailability.isUserResolvableError(resultCode)) { if (errorDialog == null) { errorDialog = googleApiAvailability.getErrorDialog(this, resultCode, 2404); errorDialog.setCancelable(false); } if (!errorDi...

editText.getText().toString(); #buildbetterapps

Saludos a todos. En la mayoría de tutoriales , la misma documentación de Android te enseñan a obtener el String de un  EditText de la siguiente manera. String phoneNumber = mTextInputEditTextPhoneNumber .getText().toString(); Perfecto, eso no tiene ningún error.  El punto está en que en ocasiones se vuelve muy fastidioso y si tenemos muchos EditText on TextInputEditText como en mi caso obtenerlos todos buuuuuff cansa.  Recordando DataBinding en Apache Flex me dije: ok, si podemos agregar un TextChangeListener para que asignar la variable con getText().toString(), luego hice esto. mTextInputEditTextPhoneNumber .addTextChangedListener( new TextWatcher() { @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { } @Override public void onTextChanged(CharSequence s, int start, int before, int count) { } @Override public void afterTextChanged(Editable s) { phoneNumber = s.toStri...

Solicitar permisos en Android en tiempo de ejecución más fácilmente

Feliz año a todos. Hace tiempo que quería compartir con ustedes un forma más sencilla para solicitar permisos en tiempo de ejecución y con menos código o al menos, para no repetir tanto los métodos de solicitud de permisos en todos lados. En este enlace  pueden descargar el fragmento que hace la magia. Extiende tu fragment de RequestPermissionFragment, implementa los métodos en tu Fragmento, lo que tienes que hacer en tu Fragmento concreto es solicitar el(los) permiso(s) y luego  verificar el permiso que quieras con ActivityCompat.checkSelfPermission, algo así: /** * Request fine location permission */ private void requestFineLocationPermission ()  { requestPermissions( new String[]{Manifest.permission. ACCESS_FINE_LOCATION , Manifest.permission. ACCESS_COARSE_LOCATION } , REQUEST_CODE_ACCESS_FINE_LOCATION ) ; } /** * Set settings of google map UI */ private void setGoogleMapUISettings () { if (ActivityCompat. checkSelfPermission (getContext() ,...

Hacer la barra de status transparente en Android.

Imagen
Había estado luchando una semana para logra que mi actividad principal tuviera el statusBar transparente, y luego cuando el bottom sheet se expandiera cambiara de color. Probé de todo, poniendo en el tema las banderas de drawSystemBackground, translucentStatusBar, etc., no lograba lo que quería hasta que encontré este reminder de JimRobs en github if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP){ // Get Window final Window window = getWindow(); // Set Fullscreen window.getDecorView().setSystemUiVisibility( View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN ); // Set status bar color // ! Can also be set in style resource (/res/values-v21/styles.xml) // @android:color/transparent window.setStatusBarColor(Color.TRANSPARENT); } Aquí la r eferencia a su reminder , Este código lo agregué en el método onActivityCreated de mi fragmento.  Quedando como resultado algo así, solo que no pue...

Trabajando con Bluetooth Low Energy (BLE) en Android

Actualmente estoy desarrollando un app que requiere la comunicación con dispositivos bluetooth low energy. Todo parecía muy sencillo, pero la verdad es que hay que escribir mucho código para hacer que funcione servicios, broadcast receivers, binding a servicios, entre otros. Mientras voy desarrollando tengo en mi gradle el minSDK de mi teléfono (Nexus 6p - SDK 24) esto con el simple hecho de compilar mas rápido.  La aplicación se espera que trabaje desde Android 4.3 SDK18 que fue cuando se introdujo BLE en Android. Todo iba muy bien hasta que cambié el gradle a minSDK 18.. encontré que todo mi código estaba hecho para SDK21 donde hay métodos nuevos para escanear BLE devices. Para ser mas concreto cambian los callBacks a partir del SDK 21. Lo resolví de la siguiente manera Primero nos creamos dos métodos: scanLeDevice21 y scanLeDevice18. /** * Scan for BLE devices with Android API 21 and up * * @param enable Enabled scanning */ @RequiresApi(21) ...

Android Nougat 7.0 desde hoy!

Imagen
Si señores, se vino la nueva versión. A partir de hoy empieza a el despliegue de Android Nougat 7.0. Para los que tenemos dispositivos Nexus, ya sea Nexus 6, 6P, 5X, Pixel C, en cualquier momento del día aparecerá la notificación para descargar la actualización. Esta versión, será más personal, con controles rápidos de configuración, soporte para varios entornos locales por ejemplo si hablamos varios idiomas, los resultados de las búsquedas se mostraran en los idiomas que tengamos en configurados. El soporte multi ventana, es cierto que Samsung y otros fabricantes lo tenían, pero ahora es nativo. Más batería, más immersive y más seguro. A la espera por que se instale.  Saludos. Para más información https://android.googleblog.com/2016/08/android-70-nougat-more-powerful-os-made.html

Parcelable en Español

Imagen
Parcelable Interfaz para clases cuya instancias pueden ser escritas y restauradas de un Par cel . Parcel Paquete, grupo o montón. Contenedor para un mensaje (data y referencias de objeto) que puede ser enviado a través de IBinder.  Bien ¿y que hacemos con eso? Cuando pasamos parámetros a un Intent, o un fragmento o actividad dentro de un Bundle podemos pasar todo un objeto, ¿cómo?  implementando Parcelable en nuestra clase.  Anteriormente utilizaba Serializable, pero es recomendable utilizar Parcelable  en vez de Serializable sencillamente porque es mucho más rápido. Se pueden leer este artículo de Philippe Breaul Ingeniero de Software en Google  Parcelable vs Serializable  para más  detalle sobre las diferencias de ambos. Supongamos que vamos a enviar parámetros a un IntentService para un Login por ejemplo, LoginRequest loginRequest = new LoginRequest(this, mEmailView.getText().toString(), ...