Entradas

¿Qué es Jetpack Compose?

Imagen
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

Cómo pasar parámetros a un JobService

En mi post anterior expliqué como crear un JobSerivce, este job service recibe parámetros; Para pasar parámetros al JobService usamos la clase PersistableBundle  de la siguiente manera. private void requestAlertsToDelete( int [] alerts) { Alerts alertsRequest = Alerts. getAlertsRequest ( SessionManager. getAuth (getActivity()), new int []{}, alerts); PersistableBundle bundle = new PersistableBundle(); bundle.putString(Constants. INSTANCE .getREQUEST_PARAMS(), alertsRequest.toJSON()); JobScheduler jobScheduler = (JobScheduler) getActivity() .getSystemService(Context. JOB_SCHEDULER_SERVICE ); JobInfo jobInfo = new JobInfo.Builder( 0 , new ComponentName(getActivity(), AlertJobService. class )) .setExtras(bundle) .setRequiredNetworkType(JobInfo. NETWORK_TYPE_ANY ) .build(); if (jobScheduler != null ) { jobScheduler.schedule(jobInfo); } Esta clase acepta tipos básicos, enter

Reemplazando Intent Services por Job Services

Imagen
Android Oreo sería el mejor de todas las versiones de Android hasta ahora. La verdad la verdad, no lo comparto. Las notificaciones de aplicaciones en segundo plano son molestas e inútiles, los mensajes en apps de mensajes como WhatsApp llegan con retraso, y así por el estilo sin embargo, este post no es para hablar del sistema operativo como tal. Con los cambios hechos los Googlers te sugieren usar  JobScheduler para ejecutar tareas en segundo plano ,  lo resalto por eso, para ejecutar así en background, si la app esta en foreground seguimos usando intent services o los mecanismos de siempre. JobScheduler  fue introducido en Lollipop (API 21) pero ahora es cuando me he dado la tarea de aprender sobre JS al ver los ANR en Android Oreo de mi app. La primera estrellada, JobService trabaja en el Main Thread (UI Thread) no leí esa parte y pensaba que funcionaba como un IntentService  luego de meter código de networking en onStartJob me apareció el stack trace de networking en el U

Android 2017

Imagen
Saludos de nuevo.  Ya hace un tiempo que no escribía, he tenido bastante trabajo y como siempre he estado leyendo y aprendiendo muchas cosas sobre Android.  Pedro Varela Google I/O 2017 Sundar Pichai Google I/O 2017 Este año tuve la oportunidad de ser seleccionado y asistir a Google IO 2017, fue una experiencia única, estar rodeado por tanta gente con tus mismos intereses, conocer lo nuevo de Android antes que muchas otras personas es fascinante, ver a todos los Googlers hablar con ellos y hacerles preguntas no tiene precio.  En fin,  a lo que vengo con este post - y no es notica nueva - Kotlin es un lenguaje de programación oficial para Android, por lo que de ahora en adelante estaré publicando tutoriales escritos en kotlin, así como una introducción al mismo.

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 (!errorDialog.isSh

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.toString(); } });

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() , Manifest.perm

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 puedo m