Archivo de la categoría: Programacion Android

AlertDialog Android Studio Boton atrás.

Aquí os dejo una forma sencilla de hacer un AlertDialog al presiona

un Button con el evento Onclik.

1

 

@Override
public void onBackPressed() {
    AlertDialog.Builder myBulid = new AlertDialog.Builder(this);
    myBulid.setMessage("En verdad deseas salir de la APP");
    myBulid.setTitle("Mensaje");
    myBulid.setPositiveButton("Si", new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
            finish();;
        }
    });
    myBulid.setNegativeButton("No", new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
            dialog.cancel();
        }
    });
    AlertDialog dialog = myBulid.create();
    dialog.show();
}
Anuncios

Programación Android cuantos OnClick

Sabéis cuantas veces el user presiono el Button OnClik ?
Aquí os dejo una manera sencilla de saber cuantas veces el user
presiono el Button.
 onclick-de-boton-en-android
import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.view.Menu;
import android.view.View;
import android.widget.Button;
public class ZASApp2MainActivity extends ActionBarActivity {
    int clicks = 0; /*Declarado como variable "global" dentro de Activity
                     para ser usada en el metodo onClick esto evitara que
                     la variable se vuelva a cero cada vez que se da click
                     */
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_zasapp2_main);
        final Button boton1 = (Button)findViewById(R.id.button1);
        boton1.setText("No has pulsado el boton");
        boton1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
            clicks++;
            boton1.setText("Has pulsado el boton "+clicks+" veces");
            }
        });
    }
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.menu_zasapp2_main, menu);
        return true;
    }
}

Aplicación Android ” The Cloud “.

En esta Aplicación lo que e querido es poner todas las nubes virtuales en una sola Aplicación para mas comodidad.
En ella e puesto varias de las nubes virtuales mas utilizadas y  mas comunes .

Espero que os guste.

https://play.google.com/store/apps/details?id=com.thecloud.wuapeton.thecloud&hl=es

1                          2

 

Como quitar la ActionBar/ToolBar de mi aplicación Android

Aquí os dejo 3 opciones de como quitar la barra superior de nuestra Aplicación  Android .

OPCIÓN 1:

En esta opción nos dirigimos al archivo Manifest.xml de nuestro proyecto y utilizamos el caso que necesitemos. En cualquiera de los dos casos debemos añadir en nuestro código la siguiente linea:

 android:theme="@style/Theme.AppCompat.NoActionBar"
  • En caso de querer que en nuestra app no aparezca en ningún momento la ActionBar, es decir, eliminarla por completo de nuestra app, debemos introducir la linea anterior en la etiqueta de <application.../>, tal y como se muestra en el siguiente ejemplo:
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
  • En caso de querer eliminar la ActionBar solo de una Activity debemos introducir la linea dentro de la etiqueta <activity.../>, como se muestra en el siguiente ejemplo:
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    • En caso de querer eliminarla en varias Activities, se puede repetir tantas veces como se quiera el segundo caso.

OPCIÓN 2:

Esta opción es de forma programática utilizando la función hide(), pero existe una pequeña pega con la que estuve peleándome unos cuantos días. Por lo que en esta opción existen dos casos importantes:

  • Si estas creando una aplicación compatible solo con la ultima versión de Android, es decir, que en la declaración de la clase de tu MainActivity.java ponga extends Activity, deber utilizar la función getActionBar().hide();. Justo como en el ejemplo:

    public class MainActivity extends Activity {

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

    }

  • En caso contrario y el caso más común, en que en tu MainActivity.java ponga extends AppCompatActivity, deberás utilizar la función getSupportActionBar().hide();, como en el ejemplo:

    public class MainActivity extends AppCompatActivity {

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

    }

Hay que remarcar que esta función siempre se tiene que poner después de la linea de código setContentView().


OPCIÓN 3:

Como ultima opción más común para ocultar la ActionBar, también utilizamos una función de forma programática y además, como existe una gran fragmetación de las versiones Android, debemos utilizar el caso que más se adecue a nuestra app.

  • Justo como en la OPCIÓN 2, en caso de utilizar la ultima version en nuestra app, utilizamos la función requestWindowFeature(Window.FEATURE_NO_TITLE);:

    public class MainActivity extends Activity {

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

    }

  • Y en caso contrario, de utilizar la compatibilidad de versiones, utilizamos la función supportRequestWindowFeature(Window.FEATURE_NO_TITLE);

    public class MainActivity extends AppCompatActivity {

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

    }

Cabe destacar que esta linea SIEMPRE se escribirá por justo arriba de la linea de código setContentView().


OPCIÓN 4 (1 BIS): Una alternativa similar a la OPCIÓN 1 es hacer un “Theme” para nuestra aplicacion que herede desde los themes del SO. Esta opción nos deja abierta la posibilidad de personalizar mejor el diseño.

En el archivo styles.xml (res/values/styles.xml)

<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
</style>

Y en el manifest en la etiqueta application agregar

 android:theme="@style/AppTheme"

el cual quedaría algo como:

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

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
</application>

Cabe destacar que actualmente al crear un proyecto nuevo desde Android Studio el código generado es del estilo de esta última alternativa (salvo el theme desde el que se hereda).

Autor: http://es.stackoverflow.com/questions/8237/como-quitar-la-actionbar-toolbar-de-mi-aplicaci%C3%B3n-android

Aplicación Android “Reproductor Mp3, Mp4 “;

 

 

 

4

 

Hola , os dejo una nueva Aplicación Android que recién e subido .

Es una simple aplicación para reproducir música. La cual lo que e realizado es que desde la aplicación accedas a la música de tu SDCard , veréis 3 botones –>

  1. Examinar
  2. Play
  3. Stop

 

1             2

 

3

Son bastantes comunes , solo e querido aportar una Aplicación mas a mi cuenta de Google Play espero que os guste y me dejéis buena puntuación os lo agradezco.

Saludos

https://play.google.com/store/apps/details?id=com.emiliosedano.wuapeton.reproducto&hl=es

Nueva Aplicacion Android

https://play.google.com/store/apps/details?id=com.encimeras.wuapetom.encimeras

 

1             2

 

3            4

 

 

5

Nueva Aplicacion Android “Preguntados “

Aplicacion en el ambito cultural de Preguntas y Respuestas elige la Categoria y a Jugar.

https://play.google.com/store/apps/details?id=com.estudio.wuapetom.trivial_studio

 

1    1    3

2    3    6

5   1    1

 

 

Nueva Aplicacion ” Trivial “.

1                              2                               3

 

En esta Aplicacion es podido poner todos los conocimientos de Android que este año e adquirido ,

e podido hacer un Trivial con diferentes Activitis en Fragmentos , hilos , Base de Datos , Ficheros , etc , etc……….

En breve la subire a la APP STORE .

Controles Android:ListView Personalizado y Optimizado

En este tutorial vamos aprender como personalizar un ListView para que no muestre solamente una cadena de texto, sino que pueda mostrar dos cadenas de texto o en este caso, una imagen con dos cadenas de texto representando la información de un contacto.

Creamos un nuevo proyecto y en la Layout que nos crea por defecto arrastraremos dos botones llamados “Añadir Contacto” y “Listar Contacto”.

Una vez hecho esto pasamos a crear nuestra clase modelo llamada “Contacto”la cual constará de dos campos String (uno para el nombre y el otro para el número de teléfono) con sus respectivos Getters y Setters.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
public class Contacto {
    private String nombre;
    private String numero;
    public Contacto(String nombre, String numero) {
        this.nombre = nombre;
        this.numero = numero;
    }
    public String getNombre() {
        return nombre;
    }
    public String getNumero() {
        return numero;
    }
    public void setNombre(String nombre) {
        this.nombre = nombre;
    }
    public void setNumero(String numero) {
        this.numero = numero;
    }
}

Para tener los datos de los contactos accesible desde las operaciones “Añadir” y“Listar”, vamos a crear una clase llamado “ContactoAplicacion” que hereda de la clase Application.Esta clase ContactoAplicacion constará de unArrayList de Contactos y dos métodos: addContacto() ylistContactos().Podemos meter opcionalmente si queremos algunos datos de prueba en el constructor.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
public class ContactoAplicacion extends Application {
    private static ArrayList<Contacto> contactos;
    @Override
    public void onCreate() {
        super.onCreate();
        contactos = new ArrayList<Contacto>();
        contactos.add(new Contacto("Iván Díaz","734596871"));
        contactos.add(new Contacto("Pablo Ruiz","123456789"));
        contactos.add(new Contacto("Ales Ibarra","39281765"));
        contactos.add(new Contacto("Alberto Sánchez","154321789"));
    }
    public boolean addContacto(Contacto contacto)
    {
        try
        {
            contactos.add(contacto);
            return true;
        }
        catch(Exception e)
        {
            return false;
        }
    }
    public ArrayList<Contacto> listContactos()
    {
        return contactos;
    }
}

Esta clase ContactoAplicacion hay que declararla en el AndroidManifiestdentro de la etiqueta Aplication con el atributo android:name.El valor que contiene el atributo android:name tiene que contener el nombre de la clase que hemos creado que hereda de Aplication, es decir,  ContactoAplicacioncon un punto al principio del nombre.

1
2
3
4
5
<application
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme"
    android:name=".ContactoAplicacion" >

Hasta este punto, solo hemos creado una clase modelo llamada “Contacto” que contiene el nombre/numero del contacto y una clase “ContactoAplicacion” que hereda de Aplication donde persisten los datos que vamos guardando en un ArrayList de Contactos.

Crearemos dos actividades nuevas, una para añadir y la otra para listar contactos, en mi caso los layouts de esas actividades se llamarán  “layout_add_contacto” y “layout_list_contactos” quedando algo parecido a esto aunque esto es a gusto de cada uno.Si decir que la vista del listado deberá de contener el ListView.

Vista de Añadir Contactos.

Vista de Listar Contactos.

Como lo que andamos buscando es la personalización de un ListView, vamos a crear un nuevo layout con los campos que queremos que salgan por cada fila delListView.En mi caso voy a crear un Layout que contenga un ImageView y dosTextView.Mi layout se llamará “list_item_contacto“.

Ahora crearemos una clase nueva llamada “ViewHolder” que solo constará de los campos que queramos coger de la vista anterior (list_item_contacto).En mi caso voy a coger solo los dos TextView puesto que no voy a cambiar la imagen.

1
2
3
4
5
public class ViewHolder {
    TextView nombre;
    TextView numero;
}

Tenemos que crear nuestro propio adaptador para que sepa como maneja los distintos controles que queremos añadir en el ListView.Para ello creamos una clase llamada “AdaptadorContacto” que herede de ArrayAdapter.Esta clase va a contener dos campos que vamos a utilizar mucho, una va a ser el contexto y el otro va a ser un ArrayList de Contactos.En el constructor de esta nueva clase vamos a inicializar esos dos campos y vamos a llamar al constructor padre del ArrayAdapter.Si recordáis la estructura era “adaptador=new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1,datos);” donde el segundo parámetro era la vista por defecto que nos daba Android.En este caso esa vista la vamos a modificar por la vista creada por nosotros, en mi caso se llamaba “list_item_contacto”.

Para el tercer parámetro necesitamos los datos, si recordáis por el principio del tutorial creamos una clase llamada “ContactoAplicacion” que heredaba deAplication.Esta clase tenía un método ListContactos() que devolvía el ArrayList.Para obtener los datos tenemos que llamar al métodogetApplicationContext() que nos devuelve la aplicación de nuestroContexto y seguidamente llamamos al método ListContactos().

Por lo tanto el constructor de nuestra clase “AdaptadorContacto” queda de la siguiente manera:

1
2
3
4
5
6
7
8
9
10
11
public class AdaptadorContacto extends ArrayAdapter<Contacto> {
    private Context contexto;
    private ArrayList<Contacto> datos;
    public AdaptadorContacto(Context contexto)
    {
        super(contexto, R.layout.list_item_contacto,((ContactoAplicacion)contexto.getApplicationContext()).listContactos());
        this.contexto=contexto;
        this.datos=((ContactoAplicacion) contexto.getApplicationContext()).listContactos();
    }
}

Ahora tenemos que implementar el método getView() del ArrayAdapter y aqui es donde va a entrar la optimización de los ListView.Los ListViewmuestran X filas dependiendo de las pantallas de los terminales y por defecto los controles de selección generan tantas filas como elementos tengan.La optimización que vamos aplicar va a ser que elemento que no se vaya a ver su layout la ocupe el elemento nuevo que va a mostrarse, un ejemplo sería si el elemento “1” va a ocultarse debido a un Scroll y va a entrar el elemento “6”, el funcionamiento sería que la fila del elemento “1” pasaría a estar obsoletoy el elemento “6” pasa a rellenar ese layout obsoleto evitando así crear muchas filas.

Una vez explicado esto, el método getView() se lanza cada vez que tiene que tiene que mostrar un elemento nuevo en el ListView.Inicializaremos un objetoView que representará el elemento nuevo que se va a mostrar.Si el elemento esNull crearemos la fila pero si no es Null utilizaremos esa fila para mostrar el elemento.Para crear la estructura nueva del ListView la inflaremos a partir del objeto inflater llamando al objeto getLayoutInflater() de la claseLayoutInflater.

En ese momento tendríamos en nuestro objeto View todos los camposTextView lo unico que hacemos es en nuestro objeto ViewHolder almacenar cada campo y finalmente añadimos los valores con los método setText() y devolvemos el objeto item.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
@Override
    public View getView(int position, View convertView, ViewGroup parent) {
        View item=convertView;
        ViewHolder holder;
        if(item==null)
        {
            LayoutInflater inflater = ((Activity)contexto).getLayoutInflater();
            item=inflater.inflate(R.layout.list_item_contacto, null);
            holder=new ViewHolder();
            holder.nombre=(TextView)item.findViewById(R.id.lblNombre);
            holder.numero=(TextView)item.findViewById(R.id.lblTelefono);
            item.setTag(holder);
        }
        else
            holder=(ViewHolder)item.getTag();
        holder.nombre.setText(datos.get(position).getNombre());
        holder.numero.setText(datos.get(position).getNumero());
        return item;
    }

En este punto ya hemos terminado la construcción de nuestro ListViewpersonalizado, ya solo quedaría añadir las llamadas a las distintas actividades y asignar el adaptador al ListView.

Listar Contacto.

1
2
3
lv=(ListView) findViewById(R.id.lvContactos);
AdaptadorContacto adaptador=new AdaptadorContacto(this);
lv.setAdapter(adaptador);

Guardar Contacto.

1
2
3
4
5
6
7
8
9
10
btGuardar=(Button) findViewById(R.id.btGuardar);
       btGuardar.setOnClickListener(new OnClickListener() {
           @Override
           public void onClick(View v) {
               Contacto c = new Contacto(tbNombre.getText().toString(), tbTelefono.getText().toString());
               ContactoAplicacion contacto = new ContactoAplicacion();
               contacto.addContacto(c);
               finish();
           }
       });

El resultado de la personalización del ListView quedaría algo parecido a esto.

 

 

Descargar código fuente aquí.

Componentes de Android

Componentes de una aplicación Android

 

1

Las aplicaciones Android se construyen mediante bloques esenciales de componentes, cada uno de los cuales existe como una entidad propia y desempeña un papel específico; cada elemento es una pieza única que ayuda a definir el comportamiento general de la aplicación. Es importante mencionar que algunos de estos elementos son el punto de entrada para que los usuarios interactúen con la aplicación y en muchos casos veremos que unos elementos dependen de otros.

Hay cuatro tipos de componentes en una aplicación Android. Cada uno de ellos tiene un propósito y un ciclo de vida distinto que define cómo se crea y se destruye el componente.

 

Activities (actividades). Es el bloque encargado de construir la interfaz de usuario. Puedes pensar en una actividad como el análogo de una ventana en una aplicación de escritorio. En las actividades recae la responsabilidad de presentar los elementos visuales y reaccionar a las acciones del usuario.

Si bien podemos pensar en actividades que no posean una interfaz de usuario, regularmente el código en estos casos se empaqueta en forma de content providers(proveedores de contenido) y services (servicios) que detallaremos en un momento.

Toda actividad se inicia como respuesta a un Intent.

 

Intents (intenciones). Son los mensajes del sistema que se encuentran corriendo en el interior del dispositivo. Se encargan de notificar a las aplicaciones de varios eventos: cambios de estado en el hardware (ej. cuando se inserta unaSD al teléfono), notificaciones de datos entrantes (ej. cuando llega un SMS) y eventos en las aplicaciones (ej. cuando una actividad es lanzada desde el menú principal).

Así como podemos crear actividades que respondan a las intenciones, podemos crear también intenciones que lancen actividades o usarlas para detonar eventos ante algunas situaciones específicas (ej. que el teléfono nos notifique por medio de un mensaje cuando nuestra localización esté a 10 mts del punto de destino). Es importante mencionar que el sistema es el que elige entre las actividades disponibles en el teléfono y dará respuesta a la intención con la actividad más adecuada.

 

Content providers (proveedores de contenido). Este elemento ofrece un conjunto de datos almacenados en el dispositivo para que se puedan accesar y compartir por varias aplicaciones. Nosotros podemos guardar datos en archivos del sistema, en una base de datos en SQLite, en la web o en cualquier otro lugar de almacenamiento persistente a la que la aplicación pueda tener acceso. A través del proveedor de contenido, otras aplicaciones pueden consultar o incluso modificar los datos (solamente si el proveedor de contenidos de esa aplicación lo permite).

El modelo de desarrollo en Android nos invita a los desarrolladores a pensar siempre en hacer los datos de nuestras aplicaciones disponibles para otras aplicaciones. De manera que cuando creamos un proveedor de contenido, podemos tener un control completo de nuestros datos y definir la forma en que éstos serán accesados.

Un ejemplo sencillo de esto es el proveedor de contenido que tiene Android para gestionar la información de contactos (agenda) del teléfono. Cualquier aplicación con los permisos adecuados puede realizar una consulta a través de un proveedor de contenido comoContactsContract.Data para leer y escribir información sobre una persona en particular.

 

Services (servicios). Las actividades, las intenciones y los proveedores de contenido explicados arriba son de corta duración y pueden ser detenidos en cualquier momento. Por el contrario, los servicios están diseñados para seguir corriendo, y si es necesario, de manera independiente de cualquier actividad. El ejemplo más simple para aterrizar este concepto es el del reproductor de música, que es un servicio que puede mantenerse corriendo mientras mandamos un SMS o realizamos alguna otra función en nuestro teléfono.

 

Dependiendo de la fuente consultada o el autor, podrán encontrar también un elemento llamado Broadcast receivers (receptores de radiodifusión). Este componente responde a las notificaciones de difusión de todo el sistema como por ejemplo que la pantalla se ha apagado, que la batería del teléfono está por terminarse o que una fotografía ha sido tomada. Las aplicaciones también pueden lanzar este tipo de notificaciones, un ejemplo de ello es el aviso de que alguna información ha terminado de descargarse en el dispositivo y se encuentran disponibles para su utilización.

Aunque los broadcaster receivers no muestran una interfaz de usuario, pueden crear notificaciones en la barra de estado del teléfono para avisarle al usuario cuando un evento de este tipo se genera. Podemos pensar en estos elementos como el medio por el cual otros componentes pueden ser iniciados en respuesta a algún evento. Cabe mencionar que cada una de las emisiones de los broadcaster receivers se representa como una intención.

Un aspecto único y útil del diseño del sistema operativo Android es que cualquier aplicación puede hacer uso de otro componente de otra aplicación.  Supongamos que la aplicación requiere que el usuario tome una fotografía con la cámara del teléfono; es probable que exista otra aplicación que haga exactamente eso, por lo que resultará más fácil reutilizar esa función que programar una específica en nuestra aplicación. Para ello no es necesario incluir o vincular el código de la aplicación de la cámara, simplemente hará falta iniciar la actividad que se encargue de capturar la foto. Una vez hecho, la foto estará disponible para usarla en la aplicación “principal”. Para el usuario parecerá que la cámara de su teléfono es una parte de la aplicación.

Debido a que el sistema Android ejecuta cada una de las aplicaciones en un proceso separado con permisos de archivos que pueden restringir el acceso a otras aplicaciones, las aplicaciones no pueden activar de forma directa un componente de otra aplicación. El único que puede hacer esto es el sistema operativo en sí. Por lo tanto, para activar un elemento de otra aplicación, debemos pasarle un mensaje al sistema dónde se especifique qué elemento es el que necesitamos correr. De esta manera el sistema activará el componente y podremos manipularlo según sea nuestra necesidad.

Todos los elementos expuestos en este post son objetos y su comportamiento está definido en su correspondiente clase base convirtiendo a cada elemento en una subclase del elemento original. Esto lo hacemos por medio de la herencia, una característica básica de Java y de los lenguajes orientados a objetos, y que nos evitará tener que volver a implementar aspectos comunes en todos los objetos del mismo tipo, y poder al mismo tiempo, personalizar su comportamiento tanto como lo necesite nuestra aplicación por medio de la sobre escritura de los métodos de la clase padre.

Espero que este post te haya sido de utilidad.