Bienvenidos sean a este post, hoy les traigo una aplicacion basica diseñada por mi para hacer las proximas pruebas como son testear la aplicacion, crear un certificado, agregarle publicidad y por ultimo subirla al play store, nuestra app sera utilizada como barra de nivel para ver si esta correctamente alineado o no, para ello abriremos Android Studio y crearemos la siguiente app:

Anuncios
  • Application NameNivel
  • Domain Companyexample.org
  • API SDK Minimum14
  • Add an ActivityEmpty Activity
  • Activity NameMainActivity
  • Layout Nameactivity_main

En este caso primero crearemos una app basica, en Domain Company utilicen un dominio propio para poder publicarlo en la play store sino pueden usar ese dominio para probarlo, nuestro primer paso sera modificar el archivo activity_main.xml con el siguiente codigo:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <TextView
        android:id="@+id/texto"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:gravity="center"
        android:text="0"
        android:textSize="100dp" />

</LinearLayout>

En este caso tenemos un simple layout con un elemento de tipo TextView donde lo utilizaremos para mostrar un texto pero eso lo veremos mas adelante, nuestra siguiente modificacion sera en la clase MainActivity donde cambiaremos el codigo por el siguiente:

package org.example.nivel;

import androidx.appcompat.app.AppCompatActivity;

import android.content.Context;
import android.content.Intent;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.os.Bundle;
import android.view.MenuItem;
import android.view.View;
import android.widget.TextView;

import java.math.BigDecimal;
import java.util.List;
import java.util.Vector;

public class MainActivity extends AppCompatActivity implements SensorEventListener {

    private List<Sensor> listaSensores;
    private Vector<Float> sensores[];
    private TextView mTexto;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        mTexto = (TextView) findViewById(R.id.texto);
        SensorManager sm = (SensorManager) getSystemService(
                Context.SENSOR_SERVICE);
        listaSensores = sm.getSensorList(Sensor.TYPE_ACCELEROMETER);
        for (Sensor sensor : listaSensores) {
            sm.registerListener(this, sensor,
                    SensorManager.SENSOR_DELAY_NORMAL);
        }
    }

    public void lanzarAcercaDe(View view){
        Intent i = new Intent(this, AcercaDe.class);
        startActivity(i);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu){
        getMenuInflater().inflate(R.menu.menu_main,menu);
        return true;
    }

    public boolean onOptionsItemSelected(MenuItem item){
        int id = item.getItemId();
        if (id == R.id.actividad_1){
            lanzarAcercaDe(null);
            return true;
        }
        return super.onOptionsItemSelected(item);
    }

    @Override
    public void onAccuracyChanged(Sensor sensor, int accuracy) {
    }

    @Override
    public void onSensorChanged(SensorEvent evento) {
        float f = 0;
        int n = 2;
        for (Sensor sensor : listaSensores) {
            if (evento.sensor == sensor) {
                for (int i = 0; i < evento.values.length; i++) {
                    f=evento.values[1];
                    BigDecimal bd=new BigDecimal(f);
                    bd = bd.setScale(n,BigDecimal.ROUND_HALF_UP);
                    mTexto.setText(bd.toString());
                }
            }
        }
    }
}
Anuncios

En este caso primero le diremos que extendera a AppCompatActivity y luego implementara a SensorEventListener para poder utilizar a los sensores, primero crearemos un objeto de tipo List para poder hacer una lista de sensores llamada listaSensores, luego crearemos un objeto de tipo Vector llamada sensores y por ultimo un objeto de tipo TextView llamado mTexto, nuestro primer metodo sera onCreate() el cual no solamente mostrara al layout activity_main sino que creara el vinculo entre el elemento TextView y nuestro codigo por medio de findViewById(), luego un objeto de tipo SensorManager llamado sm donde le asignaremos el sensor que usaremos (SENSOR_SERVICE), luego le asignaremos a listaSensores por medio de sm el sensor que realmente usaremos (TYPE_ACELEROMETER), por ultimo por medio de un for avanzado escucharemos a los sensores y asignaremos un delay para el mismo.

Nuestro siguiente metodo sera lanzarAcercaDe() en el cual por medio de actividades, les recomiendo este post, lanzaremos una nueva actividad para mostrar el mensaje de Acerca De, en todo caso es bien simple, creamos una intencion donde la asociaremos a la clase que mostraremos y por ultimo lo ejecutamos como una actividad pero de esto hablaremos mas adelante.

Nuestro siguiente metodo sera el encargado de crear un menu de opciones, en realidad un boton bien simple para implementar la actividad antes descripta, utiliza un comando para crear un menu por medio de un layout que haremos mas adelante, por ultimo devuelve true pasemos a nuestro siguiente metodo.

Nuestro siguiente metodo sera el encargado de monitorear si las opciones creadas anteriormente fueron seleccionadas, en este caso por medio de un condicional chequeara si coincide con Actividad_1 y llamara al metodo lanzarAcercaDe() por ultimo devolvera el item seleccionado, nuestros ultimos dos metodos seran para poder implementar a los sensores.

El siguiente metodo (onAccuracyChanged) esta solamente para poder implementar la interfaz pero como nosotros no lo utilizaremos lo redefinimos de forma vacia, nuestro siguiente metodo (onSensorChanged) sera el encargado de monitorear los sensores que creamos anteriormente, en este caso usaremos un bucle for para monitorear los ejes de este sensor y utilizaremos un objeto de tipo BigDecimal llamado bd para obtener un menor valor devuelto por nuestro sensor asignado a f, esto tambien sera gracias a setScale() el cual se encargara de decir por medio de n cuantos digitos mostraremos y como lo redondearemos (ROUND_HALF_UP) y por ultimo pasara ese valor a mTexto que es el vinculo entre el codigo Java y nuestro layout.

Pasemos a ver como crear nuestra barra de acciones, para ello debemos hacer click con el boton derecho sobre el recurso res y seleccionar New -> Android Resource File, en el cuadro que aparece, completen el File Name como menu_main, Resource Type como Menu y el resto lo dejan como queda seleccionado, presionen Ok para crear nuestro layout de menu, una vez creado reemplacen el codigo generado por el siguiente

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto" >
    <item android:id="@+id/actividad_1"
        android:title="Acerca De"
        android:icon="@android:drawable/ic_dialog_info"
        android:orderInCategory="5"
        app:showAsAction="always" />
</menu>

Este codigo simplemente creara un icono en nuestra barra de accion y nos permitira tener acceso al siguiente layout encargado de mostrar los datos de la aplicacion, les recomiendo este post donde lo vemos con mas detalle a todo esto.

Nuestro siguiente paso sera crear el layout y el codigo Java para mostrar el mensaje de Acerca De, para ello primero haremos click con el boton derecho sobre el recurso res y seleccionen New->Android Resource File, donde deberan completar el campo File Name con acercade, modificar Resource Type con Layout, en Root Element usen LinearLayout, el resto debera quedar como aparece, pulsen Ok para crear el nuevo layout, una vez generado reemplacen el codigo generado por el siguiente:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="@string/texto01"
        android:textAlignment="center"/>
    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="@string/texto02"
        android:textAlignment="center"/>
</LinearLayout>

Este es un simple layout donde tendremos dos elementos TextView pero con la particularidad que los textos los traeremos por medio de strings.xml como veremos luego, nuestro siguiente paso sera crear una nueva clase Java, para lo cual haran click con el boton derecho sobre el contenedor de clases Java y seleccionaran New->Java class, completen el campo Name con el valor de AcercaDe, el resto quedara como aparece y pulsen Ok para crear la nueva clase, una vez creada reemplacen el codigo generado por el siguiente:

package org.example.nivel;

import android.app.Activity;
import android.os.Bundle;

public class AcercaDe extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);
        setContentView(R.layout.acercade);
    }
}

Esta clase Java solo se encarga de mostrar el contenido del layout antes generado, nuestro siguiente paso sera la modificacion del archivo strings.xml donde modificaremos el codigo existente por el siguiente:

<resources>
    <string name="app_name">Nivel</string>
    <string name="app_about">Nivel / Acerca De...</string>
    <string name="texto01">Esta aplicacion es de caracter instructiva
        porque la hice para explicar como crear un certificado,
        registrar, agregar publicidad y subir una app al PlayStore
        pero esta app igualmente es operativa y cumple su cometido.</string>
    <string name="texto02">Si desean aprender a programar para Android,
        les recomiendo visitar https://tinchicus.com/category/android/
        para aprender desde cero.</string>
    <string name="texto03"></string>
</resources>
Anuncios

En este caso agregaremos tres nuevos recursos, uno para el titulo de nuestra nueva actividad, app_about, y dos para el texto de dicha actividad (texto01 y texto02), el texto es solo sugerencia y puede ser modificado solamente sirve como referencia para mostrarlo, pasemos a modificar el archivo AndroidManifest.xml con el siguiente codigo:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="org.example.nivel">

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".Nivel"
            android:screenOrientation="landscape">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity android:name=".AcercaDe"
            android:label="@string/app_about"
            android:theme="@android:style/Theme.DeviceDefault.Dialog"/>
    </application>

</manifest>

En este caso vamos a tener nuestra aplicacion dentro de la etiqueta application con los datos basicos pero vamos a crear dos actividades, la primera sera para nuestra actividad principal, es decir la clase Nivel, la particularidad mas notable es que agregaremos la propiedad screenOrientation la cual se encargara de que nuestra vista sea de tipo apaisada (landscape) unicamente, nuestra siguiente actividad sera para AcercaDe, la cual establecerea el titulo (app_about) y establecera el tema que usara para el mismo, nuestro ultimo seria crear un icono para nuestra app, a lo cual les recomiendo este post donde comento todos y cada uno de los pasos necesarios para crear y asignarlos al proyecto.

Con todas estas modificaciones podremos probar nuestra app, grabemos, compilemos y ejecutemos como se ve en el siguiente video

En este video podran ver como le asigne otro icono, primero les muestro como funciona nuestra actividad, en este simulador utilizo una opcion llamada Virtual Sensors donde podemos ver como se modifica el valor en base a si lo giramos para un lado y para el otro.

Anuncios

En resumen, hoy hemos creado una aplicacion operativa, la cual nos servira para nuestros proximos posts donde lo utilizaremos para ver todos los pasos basicos para registrar, subir y como acomodar publicidades en la misma, espero les haya sido util sigueme en Twitter o Facebook para recibir una notificacion cada vez que subo un nuevo post en este blog, nos vemos en el proximo post.

Tambien podes donar

Es para mantenimiento del sitio, gracias!

$1.00