Archive for Android

Enviar una peticion http POST desde Android a aplicación web (php)

La comunicación desde aplicaciones en dispositivos mobiles con servidores en la internet, es prácticamente una necesidad, siendo cada vez mas común encontrar este comportamiento en aplicaciones, es necesario comprender como se realiza esta comunicación. Basicamente lo que haremos es enviar una petición POST, muy similar a subir una forma con el metodo post desde un documento HTML a una aplicación en PHP, solamente que lo haremos desde Android, y siendo Android un sistema que utiliza Java, lo haremos utilizando ciertas librerías que nos permiten realizar esta comunicación desde Java.

Codigo de actividad en android que implementa la clase httpHandler

Ejemplo de aplicación sencilla que implemente una comunicación con una aplicación en PHP.

Codigo de clase en Java a implementar en Android para enviar peticiones a servidor web:

En esta clase lo que hacemos es implementar la comunicación, aqui estas todo lo que se necesita para enviar la petición a PHP junto con información.

import java.util.ArrayList;
import java.util.List;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;

import org.apache.http.util.EntityUtils;

public class httpHandler {

  public String post(String posturl){

	  try {

		  HttpClient httpclient = new DefaultHttpClient();
/*Creamos el objeto de HttpClient que nos permitira conectarnos mediante peticiones http*/
		  HttpPost httppost = new HttpPost(posturl);
/*El objeto HttpPost permite que enviemos una peticion de tipo POST a una URL especificada*/
		  //AÑADIR PARAMETROS
		  List<NameValuePair> params = new ArrayList<NameValuePair>();
		  params.add(new BasicNameValuePair("data","Variable 1"));
		  params.add(new BasicNameValuePair("info","Otro mensaje"));
		/*Una vez añadidos los parametros actualizamos la entidad de httppost, esto quiere decir en pocas palabras anexamos los parametros al objeto para que al enviarse al servidor envien los datos que hemos añadido*/
  httppost.setEntity(new UrlEncodedFormEntity(params));

                  /*Finalmente ejecutamos enviando la info al server*/
		  HttpResponse resp = httpclient.execute(httppost);
		  HttpEntity ent = resp.getEntity();/*y obtenemos una respuesta*/

		  String text = EntityUtils.toString(ent);

		  return text;

	  }
	  catch(Exception e) { return "error";}

	}

}

 

Actividad en Android

En este codigo basicamente tenemos una actividad principal donde usamos una clase httpHandler para enviar una petición al servidor web.

public class MainActivity extends Activity {

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

        httpHandler handler = new httpHandler();
        String txt = handler.post("http://192.168.0.19/app_android/app.php");

        TextView t = (TextView)findViewById(R.id.text1);
        t.setText(txt);
    }

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

 

Codigo en PHP:

EL codigo en PHP es lo mas sencillo, unicamente lo que hace es capturar información y regresarla, esta se captura como la “respuesta” desde Android.

<?php

	$dato = $_POST['data'];
	$info = $_POST['info'];
	echo $dato."\n".$info;
?>

 

Si deseas ver el proceso completo de como se creo este software te invito a ver los siguientes video tutoriales, donde implementamos este codigo.

Video tutorial para conectar Android con una aplicación en PHP

parte 1:

parte 2:

parte 3:

Tutorial android 9: leer datos desde el acelerometro(Sensor event listener))

Leer datos del acelerometro:

El acelerometro en android es solo uno de diferentes sensores que podemos encontrar en nuestros dispositivos. 
Este se compone de 3 ejes, X , Y y Z los cuales cada uno genera una entrada que se mide en gravedad.

A continuaciòn este codigo registra  entradas del acelerometro y lo muestra en pantalla.

Codigo en actividad principal:

 

package com.practivaA2;

import java.util.List;

import android.app.Activity;
import android.content.pm.ActivityInfo;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.os.Bundle;
import android.widget.TextView;

public class PracticaAcelerometro2Activity extends Activity implements SensorEventListener{
    /** Called when the activity is first created. */
	TextView x,y,z;
	private  Sensor mAccelerometer;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        x = (TextView)findViewById(R.id.xID);
        y = (TextView)findViewById(R.id.yID);
        z = (TextView)findViewById(R.id.zID);
        this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
    }

    protected void onResume()
    {
    	 super.onResume();
         SensorManager sm = (SensorManager) getSystemService(SENSOR_SERVICE);
         List<Sensor> sensors = sm.getSensorList(Sensor.TYPE_ACCELEROMETER);
         if (sensors.size() > 0) //dispositivo android tiene acelerometro
         {
             sm.registerListener(this, sensors.get(0), SensorManager.SENSOR_DELAY_GAME);
         }
    }
    protected void onPause()
    {
    	SensorManager mSensorManager=(SensorManager) getSystemService(SENSOR_SERVICE);
    	mSensorManager.unregisterListener(this, mAccelerometer);
    	super.onPause();
    }
    protected void onStop()
    {
    	SensorManager mSensorManager=(SensorManager) getSystemService(SENSOR_SERVICE);
    	mSensorManager.unregisterListener(this, mAccelerometer);
    	super.onStop();
    }
	

	@Override
	public void onSensorChanged(SensorEvent event) {
		this.x.setText("X = "+event.values[SensorManager.DATA_X]);
		this.y.setText("Y = "+event.values[SensorManager.DATA_Y]);
		this.z.setText("Z = "+event.values[SensorManager.DATA_Z]);
	}

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

Codigo en main.xml (Layout)

 

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <TextView
        android:id="@+id/xID"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="@string/hello" />

    <TextView
        android:id="@+id/yID"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="TextView" />

    <TextView
        android:id="@+id/zID"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="TextView" />

</LinearLayout>

 

 

Tutorial android 7: Eventos, OnClickListener para implementar un escuchador de eventos en un Boton

Tutorial Android: eventos con OnClickListener implementado en un boton

Los eventos los encontramos en muchos lenguajes de programación, para ello en Android tenemos disponibles un gran numero distinto de eventos que podemos tener, desde el touch o clicks, hasta eventos generados por movimientos en un accelerometro, termometro u otros sensores de los dispositivos Android.

En el siguiente video podras encontrar como poder implementar uno de los eventos mas simples, el OnClickListener, para escuchar eventos de clicks realizados sobre un boton.

Videotutorial:

Codigo de apoyo:

package com.practicaOnclick;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.TextView;

public class PracticaOnClickListenerActivity extends Activity implements OnClickListener{
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        View boton = findViewById(R.id.botonID); 
        boton.setOnClickListener(this);
    }

	@Override
	public void onClick(View v) {
		if(v.getId()==findViewById(R.id.botonID).getId())
		{
			TextView texto = (TextView)findViewById(R.id.textoID);
			texto.setText("Hola que tal, haz oprimido el boton");
		}
		
	}
}

XML del archivo main.xml(Layout)

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <TextView
        android:id="@+id/textoID"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="@string/hello" />

    <Button
        android:id="@+id/botonID"
        android:layout_width="164dp"
        android:layout_height="wrap_content"
        android:text="Button" />

</LinearLayout>

Tutorial android 6: Actividades/Pantallas para la interfaz de una aplicacion Android

Actividades en android

Realmente para los usuarios comunes las actividades se perciben como las “pantallas” de una aplicación Mobil, ya sea para Android o cualquier otra plataforma.

Para nosotros crear actividades o diferentes pantallas que el usuario vera en la interfaz de nuestra aplicación debemos realizar ciertos pasos.

 

  1. Lo primero que tenemos que hacer es declarar nuestra actividad en el archivo Manifest.xml , si no se declara aquí la aplicación obtendra un error al momento de intentar abrir dicha activdad que no fue declarada aqui.
  2. Debemos crear una Clase que extienda a la superclase Activity, de manera que así se especificara como Actividad, y en el constructor de la misma se especificara el origen del contenido de dicha actividad.
  3. EL contenido de la actividad puede provenir de un Layout(archivo xml), por lo que puede ser necesario crear un archivo de layout de xml y colocarlo como el origen de de contenido.
Hacer esto es muy sencillo y podemos verlo en el siguiente video.
Despues de ver el video puedes tomar el codigo utilizado en el mismo en el cual se tiene codigo para un ejemplo en el que se declara un boton en la actividad principal, y al darle click accederemos a una segunda actividad. Espero que este tutorial se de ayuda.

 

Video tutorial:

Codigo del ejemplo utilizado en el video tutorial:

Codigo de la actividad principal:

 

package com.actividades;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View.OnClickListener;
import android.view.View;
public class EjemploActividadesActivity extends Activity implements OnClickListener {
    /** Called when the activity is first created. */
	
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        View boton = findViewById(R.id.button1);
        boton.setOnClickListener(this);
        
        View boton2 = findViewById(R.id.button2);
        boton2.setOnClickListener(this);
        
    }

	public void onClick(View vista) {
		
		if(vista.getId()==findViewById(R.id.button1).getId())
		{
			Intent i = new Intent(this,tituloActivity.class);
			startActivity(i);
		}
		if(vista.getId()==findViewById(R.id.button2).getId())
		{
			Intent j = new Intent(this, actividad2Activity.class);
			startActivity(j);
		}
		
	}
}
package com.actividades;
import android.app.Activity;
import android.os.Bundle;
public class actividad2Activity extends Activity {
    /** Called when the activity is first created. */
	
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.actividad2);
    
        
    }
}

package com.actividades;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View.OnClickListener;
import android.view.View;
public class tituloActivity extends Activity {
    /** Called when the activity is first created. */
	
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.titulo);
        
    }
}

XML de Manifest

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.actividades"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk android:minSdkVersion="7" />

    <application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name" >
        <activity
            android:name=".EjemploActividadesActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity
            android:name="tituloActivity"
            android:label="@string/titulo"
            >
        </activity>
      
    </application>

</manifest>