Hola vergasianos hoy veremos un tema interesante, de como actualizar una ejecución en tiempo real. Verán la vez pasada vimos como obtener el nivel de la batería de nuestro móvil, pero cada vez que deseemos que se actualice necesitaremos ejecutar de nuevo dicha aplicación. Que dolor de “$%&%&/ seria estar haciendo eso. Bueno tenemos una solución y tres formas de mostrarlas.
Obtener el nivel de batería y actualizar en tiempo real android studio
Contenidos
Explicación rápida de lo que haremos, para este ejercicio usaremos un objeto de acción llamado Intents, este nos permitirá solicitar el llamado del nivel de la batería y aparte también usaremos un Intenfilter que nos permitirá mostrar de diferente formas el nivel de la batería, como se muestra la imagen en un simple textview , en un progresbar o una imagen.
Cosas que deberías saber sobre este ejercicio.
Intent
UnaIntent
es un objeto de acción que puedes usar para solicitar una acción de otro componente de la aplicación.Aunque las intents facilitan la comunicación entre los componentes de muchas maneras, existen tres casos de uso fundamentales
- Comenzar una actividad.
- Iniciar un servicio.
- Entregar un mensaje.
IntentFilter
Un IntentFilter puede coincidir con acciones, categorías y datos (ya sea a través de su tipo, esquema y ruta) en un Intento. También incluye un valor de “prioridad” que se utiliza para pedir múltiples filtros coincidentes.
FUENTES: Intent IntentFilter
Ahora empezaremos con la parte gráfica donde veremos como se muestra en la imagen que esta arriba, solo utilizaremos:
- 1 TextView
- 1 ProgressBar
- 1 ImageView
Y en drawable debe ir tres imágenes que estarán al final con el código a descargar. “Nos servira para mostrar 3 estados cargando, full, desconectado.”
A continuación te dejo el código de la parte gráfica:
activity_main
<fragment xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/map" android:layout_width="match_parent" android:layout_height="match_parent" class="com.androfast.server.appserviciobateria.BateriaFragment"/>
bateria
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <ProgressBar android:id="@+id/barLevel" style="?android:attr/progressBarStyleHorizontal" android:layout_width="match_parent" android:layout_height="wrap_content"/> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal"> <TextView android:id="@+id/txtLevel" android:layout_width="0px" android:layout_height="wrap_content" android:layout_weight="1" android:textSize="36sp"/> <ImageView android:id="@+id/imgLevel" android:layout_width="0px" android:layout_height="wrap_content" android:layout_weight="1"/> </LinearLayout> </LinearLayout>
Ahora nos vamos a la parte del código en nuestro MainActivity:
import android.os.Bundle; import android.support.v4.app.FragmentActivity; public class MainActivity extends FragmentActivity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } }
Ahora nuestra clase BateriaFragment:
BateriaFragment
import android.app.Fragment; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.os.BatteryManager; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; import android.widget.ProgressBar; import android.widget.TextView; public class BateriaFragment extends Fragment { private ProgressBar bar=null; private ImageView imagen =null; private TextView textView=null; @Override public View onCreateView(LayoutInflater inflater, ViewGroup parent, Bundle savedInstanceState) { View resultado=inflater.inflate(R.layout.bateria, parent, false); bar=(ProgressBar)resultado.findViewById(R.id.barLevel); imagen =(ImageView)resultado.findViewById(R.id.imgLevel); textView =(TextView)resultado.findViewById(R.id.txtLevel); return(resultado); } @Override public void onStart() { super.onStart(); IntentFilter f=new IntentFilter(Intent.ACTION_BATTERY_CHANGED); getActivity().registerReceiver(onBattery, f); } @Override public void onStop() { getActivity().unregisterReceiver(onBattery); super.onStop(); } BroadcastReceiver onBattery=new BroadcastReceiver() { public void onReceive(Context context, Intent intent) { int pct= 100 * intent.getIntExtra(BatteryManager.EXTRA_LEVEL, 1) / intent.getIntExtra(BatteryManager.EXTRA_SCALE, 1); bar.setProgress(pct); textView.setText(String.valueOf(pct)); switch (intent.getIntExtra(BatteryManager.EXTRA_STATUS, -1)) { case BatteryManager.BATTERY_STATUS_CHARGING: imagen.setImageResource(R.drawable.cargando); break; case BatteryManager.BATTERY_STATUS_FULL: int plugged= intent.getIntExtra(BatteryManager.EXTRA_PLUGGED, -1); if (plugged == BatteryManager.BATTERY_PLUGGED_AC || plugged == BatteryManager.BATTERY_PLUGGED_USB) { imagen.setImageResource(R.drawable.full); } else { imagen.setImageResource(R.drawable.desconectado); } break; default: imagen.setImageResource(R.drawable.desconectado); break; } } }; }
Con eso hemos terminado, así que les voy dejar a continuación el enlace de descarga, pero recuerda. Copiar no es lo mismo que comparar.
Descargar: mostrar el nivel de batería en un textview de forma automatica
Password: www.androfast.com
Hola soy Alex Céspedes fundador de ANDROFAST, programo algunas cosas por diversión, me gusta aprender cosas nuevas y estoy pendiente de todo lo que tenga que ver con tecnología. Este blog lo cree para todas las personas que tengan dificultades en la programación, para ser sincero nunca fui bueno y reprobé algunos cursos de programación, pero mis ganas de aprender pudieron más. SI YO PUEDO TU PUEDES ANIMO!