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
UnaIntentes 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!