Obtener el nivel de batería y actualizar en tiempo real android studio

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

 

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  
Una Intent 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.

Descargarmostrar el nivel de batería en un textview de forma automatica

Password: www.androfast.com

0

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!

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

WhatsApp chat