<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Androideity</title>
	<atom:link href="http://androideity.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://androideity.com</link>
	<description>Programación android en español, tutoriales, documentación, noticias, smartphones, tablets, programación android, aplicaciones android</description>
	<lastBuildDate>Mon, 20 May 2013 02:58:22 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Review sobre  Android Studio</title>
		<link>http://androideity.com/2013/05/18/review-sobre-android-studio/#utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=review-sobre-android-studio</link>
		<comments>http://androideity.com/2013/05/18/review-sobre-android-studio/#comments</comments>
		<pubDate>Sat, 18 May 2013 22:06:48 +0000</pubDate>
		<dc:creator>sebastiancipolat</dc:creator>
				<category><![CDATA[Análisis]]></category>
		<category><![CDATA[Herramientas]]></category>
		<category><![CDATA[Programación]]></category>
		<category><![CDATA[Tips]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[Android Español]]></category>
		<category><![CDATA[desarrollo en android]]></category>
		<category><![CDATA[eclipse]]></category>
		<category><![CDATA[entorno de desarrollo]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[gui]]></category>
		<category><![CDATA[herramientas]]></category>
		<category><![CDATA[ide]]></category>
		<category><![CDATA[primeros pasos en android]]></category>
		<category><![CDATA[tips]]></category>
		<category><![CDATA[Trucos]]></category>
		<category><![CDATA[tutorial]]></category>

		<guid isPermaLink="false">http://androideity.com/?p=4368</guid>
		<description><![CDATA[<a href="http://androideity.com/2013/05/18/review-sobre-android-studio/"><img align="left" hspace="5" width="100" height="100" src="http://androideity.com/wp-content/uploads/2013/05/banner-150x150.jpg" class="alignleft wp-post-image tfe" alt="" title="banner" /></a>&#160; Hola hoy vamos a ver el nuevo IDE para desarrollar en Android que ha lanzado Google esta semana en su evento Google I/O 2013, su nombre es  Android Studio esta basado en un IDE para Java muy conocido llamado IntelliJ &#8230; <a href="http://androideity.com/2013/05/18/review-sobre-android-studio/">Sigue leyendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><a href="http://androideity.com/wp-content/uploads/2013/05/banner.jpg"><img class="aligncenter size-full wp-image-4372" title="banner" src="http://androideity.com/wp-content/uploads/2013/05/banner.jpg" alt="" width="578" height="280" /></a></p>
<p>&nbsp;</p>
<p>Hola hoy vamos a ver el nuevo IDE para desarrollar en Android que ha lanzado Google esta semana en su evento Google I/O 2013, su nombre es  Android Studio esta basado en un IDE para Java muy conocido llamado <a href="http://www.jetbrains.com/idea/">IntelliJ IDEA</a>.<br />
Este nuevo entorno nos proporciona herramientas para el desarrollo en android al igual que en Eclipse si utlizamos el plugin ADT.</p>
<p><span id="more-4368"></span></p>
<p>Este nuevo entorno nos proporciona herramientas para el desarrollo en android al igual que en Eclipse si utlizamos el plugin ADT.<br />
Segun la documentacion oficial tambien nos ofrece:</p>
<ul>
<li>Soporte para Gradle</li>
<li>Refactorizacion especifica para Android y soluciones rapidas.</li>
<li>Herramientas para medir el rendimiento, usabilidad, compatibilidad de versiones y otros problemas.</li>
<li>ProGuard y capacidad para firmar apps</li>
<li>Asistentes basados ??en plantillas para crear diseños y componentes en Android.</li>
<li>Un editor rico en cuanto a diseño, que le permite realizar drag and drop a los componentes de la UI,</li>
<li>vista previa de los layouts en múltiples configuraciones de pantalla en simultaneo(a mi opinion algo super util), y mucho más</li>
</ul>
<p>Como siempre Google nos ofrece sus soluciones para diferentes plataformas, yo particularmente lo he probado solamente en Linux Ubuntu 12.04 64 bits .</p>
<p>La instalación es muy simple y no voy a explayarme sobre ya que para cada OS varia pero lo pueden descargarlo de <a href="http://developer.android.com/sdk/installing/studio.html">aqui</a>.</p>
<h1><span style="color: #99cc00;">Creando un proyecto:</span></h1>
<p>Una vez que lo abrimos podemos ver algunas cosas,muestra una ventana para crear un proyecto importarlo, etc.</p>
<p style="text-align: justify;"><a href="http://androideity.com/wp-content/uploads/2013/05/main.jpg"><img class="size-medium wp-image-4375" title="" src="http://androideity.com/wp-content/uploads/2013/05/main-300x220.jpg" alt="" width="300" height="220" /></a></p>
<p>Para crear un proyecto nuevo es de lo mas simple:</p>
<p><span style="text-align: center;">1- Seleccionamos New Project,</span></p>
<p>luego la ventana que veremos es muy parecida a la del Eclipse.</p>
<p style="text-align: left;"><a href="http://androideity.com/wp-content/uploads/2013/05/newpory.jpg"><img class="wp-image-4376" src="http://androideity.com/wp-content/uploads/2013/05/newpory.jpg" alt="" width="444" height="357" /></a></p>
<p style="text-align: left;">2- Podemos seleccionar el icono para la app y su tamaño:</p>
<p style="text-align: justify;"><a href="http://androideity.com/wp-content/uploads/2013/05/newproy2.jpg"><img class="wp-image-4377" src="http://androideity.com/wp-content/uploads/2013/05/newproy2.jpg" alt="" width="448" height="351" /></a></p>
<p> 3-Seleccionar algun diseño ya predeterminado para la UI.</p>
<p style="text-align: justify;"><a href="http://androideity.com/wp-content/uploads/2013/05/newproy3.jpg"><img class="wp-image-4379" src="http://androideity.com/wp-content/uploads/2013/05/newproy3.jpg" alt="" width="442" height="353" /></a></p>
<p>&nbsp;</p>
<p>4- Por ultimo ingresamos el nombre de la Activity y Finish</p>
<p style="text-align: left;"><a href="http://androideity.com/wp-content/uploads/2013/05/newproy4.jpg"><img class="wp-image-4382" src="http://androideity.com/wp-content/uploads/2013/05/newproy4.jpg" alt="" width="554" height="438" /></a></p>
<p style="text-align: left;">Una vez q abre el e  podemos ver que tal vez su UI no sea del todo bonita si lo comparamos con el eclipse o algún otro  (lo compensa en rendimiento)</p>
<p style="text-align: left;"><a href="http://androideity.com/wp-content/uploads/2013/05/ide.jpg"><img class="wp-image-4383" title="ide" src="http://androideity.com/wp-content/uploads/2013/05/ide.jpg" alt="" width="805" height="472" /></a></p>
<p style="text-align: left;">La estructura del proyecto es muy parecida a la de eclipse, a continuación muestro una comparativo con los ide e sombreado algunas areas con color para facilitar la comparación.</p>
<p style="text-align: center;"><a href="http://androideity.com/wp-content/uploads/2013/05/comparativa-proyectos.jpg"><img class="aligncenter  wp-image-4391" src="http://androideity.com/wp-content/uploads/2013/05/comparativa-proyectos.jpg" alt="" width="658" height="618" /></a></p>
<p style="text-align: left;">Al intentar lanzar el emulador tuve el siguiente problema:</p>
<p style="text-align: left;"><img class="wp-image-4385" src="http://androideity.com/wp-content/uploads/2013/05/problema.jpg" alt="" width="438" height="305" /></p>
<p style="text-align: justify;">Algunos de los emuladores que habia creado no tenian seleccionado una version en el campo Targe, esto se debe a que el ide trae por defecto la version 4.2.2 y en mi caso usaba 2.3, para corregir esto tuve que seleccionar para el proyecto la ubicacion del SDK que tenia instalado.</p>
<p style="text-align: left;">Deben hacer lo siguiente:</p>
<p style="text-align: left;">File-&gt;Project Structure</p>
<p style="text-align: left;">Luego clickera Edit como vemos en la img.</p>
<p style="text-align: left;"><a href="http://androideity.com/wp-content/uploads/2013/05/proyectsettings1.jpg"><img class="size-large wp-image-4387" title="proyectsettings" src="http://androideity.com/wp-content/uploads/2013/05/proyectsettings1-1024x707.jpg" alt="" width="620" height="428" /></a></p>
<p style="text-align: left;">Luego en el campo Android SDK Home Path cambiarlo a donde uds tengan instalado su SDK.</p>
<p style="text-align: left;"><a style="text-align: center;" href="http://androideity.com/wp-content/uploads/2013/05/changesdk.jpg"><img class="wp-image-4389" src="http://androideity.com/wp-content/uploads/2013/05/changesdk-1024x260.jpg" alt="" width="496" height="126" /></a></p>
<p style="text-align: justify;">Luego de esto deberan volver a la ventana con los emuladores dar click en el emulador que muestra fail, clickear edit y veran que en el campo target en su listado figuran todos las versiones que tenian instaladas.</p>
<h1 style="text-align: justify;"><span style="color: #666699;">Editor de UI:</span></h1>
<p>Una de las caracteristicas mas interesantes que incluye es un poderoso de editor visual para poder crear arrastrando los componentes nuestras vistas.</p>
<p style="text-align: justify;"><a href="http://androideity.com/wp-content/uploads/2013/05/uieditor.jpg"><img class="wp-image-4393" src="http://androideity.com/wp-content/uploads/2013/05/uieditor.jpg" alt="" width="593" height="332" /></a></p>
<p style="text-align: justify;">También nos permite ver nuestra vista en diferente dispositivos.</p>
<p style="text-align: justify;"><img class="alignnone" src="http://s3.celularis.com/files/2013/05/android-studio-2-800x451.jpg" alt="" width="640" height="361" /></p>
<p>&nbsp;</p>
<h1><span style="color: #ff6600;">Cambiar Theme:</span></h1>
<p style="text-align: justify;">Si son de los que les gusta usar el IDE en colores oscuros al estilo SublimeText2 pueden cambiar el color de la sig. forma<br />
File-&gt;Settings-&gt;Appeareance-&gt;Theme<br />
El actual es IDEA 4.5 deberan cambiarlo a &#8220;<strong>Darcula</strong>&#8220;, luego deberan reiniciar el ide.<br />
Luego se vera de la siguiente forma;</p>
<p style="text-align: justify;"><a href="http://androideity.com/wp-content/uploads/2013/05/darcula.jpg"><img class="size-large wp-image-4394" title="" src="http://androideity.com/wp-content/uploads/2013/05/darcula-1024x602.jpg" alt="" width="620" height="364" /></a></p>
<p style="text-align: justify;">
<h1 style="text-align: justify;"><span style="color: #99cc00;">Probar App en Telefono en vez de Emulador:</span></h1>
<p>Pude observar que el IDE por defecto ejecuta la aplicación en el emulador y por mas que tengamos nuestro telefono conectado lo seguirá haciendo, para poder correrlas directamente en nuestro telefono debemos hacer lo siguiente:</p>
<p style="text-align: justify;">Dar click al lado de la flecha verde de RUN en el campo de seleccion y clickear en &#8220;Edit Configuration&#8221; como muestra la imagen.</p>
<p style="text-align: justify;"><a href="http://androideity.com/wp-content/uploads/2013/05/usarmovil.jpg"><img class="size-full wp-image-4410" title="usarmovil" src="http://androideity.com/wp-content/uploads/2013/05/usarmovil.jpg" alt="" width="223" height="108" /></a></p>
<p style="text-align: justify;">Luego nos abrira la siguiente ventana en el cual debemos buscar en la sección Target Device y marcar &#8220;Show chooser dialog&#8221; y luego  OK.</p>
<p style="text-align: justify;"><a href="http://androideity.com/wp-content/uploads/2013/05/selecusb.jpg"><img class="size-large wp-image-4411" title="selecusb" src="http://androideity.com/wp-content/uploads/2013/05/selecusb-1024x658.jpg" alt="" width="620" height="398" /></a></p>
<p style="text-align: justify;">Una vez modificado esto al volver a correr nuestra App nos mostrara la ventana para seleccionar si correr en el emulador o en nuestro dispositivo Android.</p>
<h1><span style="color: #993300;">Importar Proyecto de Eclipse:</span></h1>
<h1><span style="font-size: 13px; font-weight: normal;"> Documentacion oficial sobre esto </span><a style="font-size: 13px; font-weight: normal;" href="http://developer.android.com/sdk/installing/migrate.html">aqui</a><span style="font-size: 13px; font-weight: normal;">.</span></h1>
<h1><span style="font-size: 13px; font-weight: normal;"> Debemos hacer lo sig.</span></h1>
<p>Primer ver si el plugin ADT en eclipse esta al dia version 22 o superior<br />
Si no recuerdan como actualizarlo miren este <a href="http://developer.android.com/tools/help/adt.html#Updating">link</a></p>
<p>Luego en Eclipse, seleccionar File &gt; Export.<br />
En la ventana que aparece seleccionar Android and Generate Gradle build files.</p>
<p>Seleccionar el proyecto you want y click Finish.</p>
<p>Para importarlo en Android Studio:</p>
<p>En Android Studio, seleccionar File &gt; Import Project.</p>
<p>Ubicar el proyecto y seleccionar ok</p>
<p>Seleccionar crear proyecto de una fuente existente, seguir el asistente como si estuviesemos creando un proyecto.</p>
<p><strong>Android Studio nos ofrece mucho mas de lo que mostre en este post solamente comente algunas, con el tiempo iremos conociendo mas sobre este </strong><strong>IDE.</strong></p>
<p>Les dejo un video oficial de Google sobre este</p>
<p><iframe src="http://www.youtube.com/embed/e0fXuyL0xVU" frameborder="0" width="560" height="315"></iframe></p>
<h1></h1>
<h1><span style="color: #99cc00;">Conclusion:</span></h1>
<p>El ide promete mucho ya que esta diseñado especificamente para el desarrollo en Android, es mucho mas rapido y liviano que Eclipse, esto es un punto<br />
muy importante a favor, tambien para lo que es el diseño de UI es mucho mejor.<br />
Recuerden que al ser una version Preview de seguro debe haber muchos bugs que iran corrigiendo con el tiempo·<br />
Los invito a que lo prueben y dejen algun comentario de que les parecio o si quieren compartir alguna funcionalidad que hallan encontrado y les parece importante.</p>
<p>Muchas Gracias, hasta el proximo Post.</p>
<p>Sebastian.</p>
<p>&nbsp;</p>
<p><img class="alignnone" src="http://upload.wikimedia.org/wikipedia/commons/thumb/1/1a/Flag_of_Argentina.svg/200px-Flag_of_Argentina.svg.png" alt="" width="200" height="125" /></p>
<p>&nbsp;</p>
<h2 style="text-align: center;"><span style="color: #888888;">¿Te gustó este tutorial? ¡Compártelo!</span></h2>
<div style="text-align: center;"></div>
<p style="text-align: justify;">
]]></content:encoded>
			<wfw:commentRss>http://androideity.com/2013/05/18/review-sobre-android-studio/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>Google Maps Android API v2</title>
		<link>http://androideity.com/2013/05/05/google-maps-android-api-v2/#utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=google-maps-android-api-v2</link>
		<comments>http://androideity.com/2013/05/05/google-maps-android-api-v2/#comments</comments>
		<pubDate>Sun, 05 May 2013 23:41:05 +0000</pubDate>
		<dc:creator>htorrex</dc:creator>
				<category><![CDATA[Programación]]></category>
		<category><![CDATA[android maps v2]]></category>
		<category><![CDATA[API v2]]></category>
		<category><![CDATA[google maps]]></category>
		<category><![CDATA[googlemaps]]></category>
		<category><![CDATA[mapas google android]]></category>

		<guid isPermaLink="false">http://androideity.com/?p=4334</guid>
		<description><![CDATA[<a href="http://androideity.com/2013/05/05/google-maps-android-api-v2/"><img align="left" hspace="5" width="100" height="100" src="http://androideity.com/wp-content/uploads/2013/05/1Manager-150x150.jpg" class="alignleft wp-post-image tfe" alt="" title="1Manager" /></a>INTRODUCCIÓN A finales del 2012 google mostraba la segunda versión Google Maps Android API v2 la cuál tiene novedades interesantes: Integración con los Servicios de Google Play (Google Play Services) Utilización a través de un nuevo tipo específico de fragment (MapFragment). &#8230; <a href="http://androideity.com/2013/05/05/google-maps-android-api-v2/">Sigue leyendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<h3 style="text-align: justify;"><span style="color: #99cc00;"><strong>INTRODUCCIÓN</strong></span></h3>
<p style="text-align: justify;">A finales del 2012 google mostraba la segunda versión<a href="https://developers.google.com/maps/documentation/android/" target="_blank"> Google Maps Android API v2</a> la cuál tiene novedades interesantes:</p>
<ul style="text-align: justify;">
<li>Integración con los Servicios de Google Play (<a href="http://developer.android.com/intl/es/google/play-services/index.html" target="_blank">Google Play Services</a>)</li>
<li>Utilización a través de un nuevo tipo específico de fragment (<a href="https://developers.google.com/maps/documentation/android/reference/com/google/android/gms/maps/MapFragment" target="_blank">MapFragment</a>).</li>
<li>Utilización de mapas vectoriales, lo que repercute en una mayor velocidad de carga y una mayor eficiencia en cuanto a uso de ancho de banda.</li>
<li>Mejoras en el sistema de caché, lo que reducirá en gran medida las famosas áreas en blanco que tardan en cargar.</li>
<li>Los mapas son ahora 3D, por lo cuál, podremos mover nuestro punto de vista de forma que lo veamos en perspectiva.</li>
</ul>
<div style="text-align: justify;"><span id="more-4334"></span></div>
<div style="text-align: justify;"><!--more--></div>
<p style="text-align: justify;">Un cambió importante es que ahora utilizaremos un nuevo tipo específico de fragment llamado MapFragment, esto nos permitirá entre otras cosas añadir uno o varios mapas a cualquier actividad, y por supuesto tener todas las ventajas del uso de fragments. Esto viene a sustituir al MapView de la versión 1 que además requería que su actividad contenedora fuera del tipo MapActivity.</p>
<p style="text-align: justify;"><strong>Nota:</strong> <em>Ya que el nuevo control de mapas se basa en fragments, si queremos mantener la compatibilidad con versiones de Android anteriores a la 3.0 tendremos que utilizar la librería de soporte android-support.</em></p>
<h3 style="text-align: justify;"><span style="color: #99cc00;"><strong>El objetivo de este post es detallar los pasos necesarios para hacer uso de la nueva versión de la API de mapas de Google en sus futuros proyectos.</strong></span></h3>
<p style="text-align: justify;"><strong>1.-</strong> Primero que nada, ya que la API v2 se proporciona como parte del SDK de <strong>Google Play Services</strong>, es necesario incorporar previamente a nuestro entorno de desarrollo este paquete. Haremos esto accediendo desde Eclipse al Android SDK Manager y descargando del apartado de extras el paquete llamado “Google Play Services”.</p>
<p style="text-align: justify;"><a href="http://androideity.com/wp-content/uploads/2013/05/1Manager.jpg"><img class="size-medium wp-image-4337 aligncenter" title="1Manager" src="http://androideity.com/wp-content/uploads/2013/05/1Manager-300x215.jpg" alt="" width="300" height="215" /></a></p>
<p style="text-align: justify;">el paquete quedará instalado en la ruta: &lt;carpeta-sdk-android&gt;/extras/google/google_play_services/.</p>
<p style="text-align: justify;"><strong>2.- El siguiente paso será obtener una API Key para poder utilizar el servicio de mapas de Google en nuestra aplicación.</strong></p>
<p style="text-align: justify;"><strong>Nota:</strong> <em>Como sabemos en la versión 1 del api también necesitábamos una key, en este caso dicha key quedará obsoleta ya que La API de Google Maps para Android V2 utiliza un nuevo sistema de gestión de claves. Se recomienda seguir con el proceso para generar una nueva.</em></p>
<p style="text-align: justify;">Por lo tanto lo que haremos será acceder a la <a href="https://accounts.google.com/ServiceLogin?service=devconsole&amp;passive=1209600&amp;continue=https://code.google.com/apis/console/&amp;followup=https://code.google.com/apis/console/" target="_blank">Consola de APIs de Google</a>, en este caso tendremos que crear un nuevo proyecto desplegando el menú superior izquierdo y seleccionando la opción <strong><span style="text-decoration: underline;">&#8220;Create..&#8221;</span></strong></p>
<p style="text-align: justify;"><a href="http://androideity.com/wp-content/uploads/2013/05/2GoogleServices.jpg"><img class="size-medium wp-image-4338 aligncenter" title="2GoogleServices" src="http://androideity.com/wp-content/uploads/2013/05/2GoogleServices-200x300.jpg" alt="" width="200" height="300" /></a></p>
<p style="text-align: justify;">Nos mostrará una ventana en la que escribiremos el nombre del proyecto. Introducimos algún nombre descriptivo y damos aceptar.</p>
<p style="text-align: justify;"><a href="http://androideity.com/wp-content/uploads/2013/05/3NombreProyecto.jpg"><img class="size-medium wp-image-4339 aligncenter" title="3NombreProyecto" src="http://androideity.com/wp-content/uploads/2013/05/3NombreProyecto-300x110.jpg" alt="" width="300" height="110" /></a></p>
<p style="text-align: justify;">Una vez creado el proyecto damos clic e a la opción <strong><span style="text-decoration: underline;">&#8220;Services&#8221;</span></strong> del menú de la izquierda. Desde esta ventana podemos activar o desactivar cada uno de los servicios de Google que queremos utilizar. Para el ejemplo sólo activaremos el servicio llamado &#8220;Google Maps Android API v2&#8243; pulsando sobre el botón ON/OFF.</p>
<p style="text-align: justify;"><a href="http://androideity.com/wp-content/uploads/2013/05/4ON.jpg"><img class="size-medium wp-image-4340 aligncenter" title="4ON" src="http://androideity.com/wp-content/uploads/2013/05/4ON-300x79.jpg" alt="" width="300" height="79" /></a></p>
<p style="text-align: justify;">Una vez hecho esto, damos clic en la opción <strong><span style="text-decoration: underline;">&#8220;API Access&#8221;</span></strong> donde tendremos la posibilidad de obtener nuestra nueva API Key que nos permita utilizar el servicio de mapas desde nuestra aplicación. A continuación pulsaremos el botón <span style="text-decoration: underline;"><strong>&#8220;Create new Android key…&#8221;</strong></span>.</p>
<p style="text-align: justify;">En concreto necesitaremos ingresar dos cosas:</p>
<ul style="text-align: justify;">
<li>La huella digital (SHA1) del certificado con el que firmamos la aplicación y</li>
<li>El nombre del paquete java utilizado en nuestra aplicación.</li>
</ul>
<p style="text-align: justify;">Toda aplicación Android debe ir firmada para poder ejecutarse en un dispositivo, este proceso de firma es uno de los pasos que tenemos que hacer siempre antes de distribuir públicamente una aplicación. De hecho durante el desarrollo para poder realizar pruebas y la depuración del código, estamos firmando la aplicación con un &#8220;certificado de pruebas&#8221;.</p>
<p style="text-align: justify;">Podemos saber en qué carpeta de nuestro sistema está almacenado este certificado accediendo desde Eclipse al menú Eclipse/ Preferences / Android / Build.</p>
<p style="text-align: justify;"><a href="http://androideity.com/wp-content/uploads/2013/05/5RutaKeyDebug.jpg"><img class="size-medium wp-image-4341 aligncenter" title="5RutaKeyDebug" src="http://androideity.com/wp-content/uploads/2013/05/5RutaKeyDebug-300x224.jpg" alt="" width="300" height="224" /></a></p>
<p style="text-align: justify;">En mi caso el certificado de pruebas está en la ruta &#8220;/Users/htorres/.android/debug.keystore&#8221;. Para obtener nuestra huella digital SHA1 deberemos acceder a dicha ruta desde la consola y ejecutar los siguientes comandos:</p>
<ul style="text-align: justify;">
<li>cd /Users/htorres/.android/</li>
<li>&#8220;/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home/bin/keytool&#8221; -list -v -keystore debug.keystore -alias androiddebugkey -storepass android -keypass android</li>
</ul>
<p style="text-align: justify;">En mi caso la instalación de Java está en la ruta &#8220;/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/&#8221;. Sólo debes sustituir por la ruta en tu computadora. Esto nos devolverá varios datos del certificado.</p>
<p style="text-align: justify;"><a href="http://androideity.com/wp-content/uploads/2013/05/6Sha1.jpg"><img class="size-medium wp-image-4342 aligncenter" title="6Sha1" src="http://androideity.com/wp-content/uploads/2013/05/6Sha1-300x159.jpg" alt="" width="300" height="159" /></a></p>
<p style="text-align: justify;">Este es el dato que nos interesa:<br />
SHA1: 41:3C:38:4B:C6:6A:BE:71:2D:E2:31:7D:C6:52:32:E3:96:AF:43:B4</p>
<p style="text-align: justify;">Lo añadimos a la ventana de obtención de la API Key donde nos habíamos quedado antes, y a continuación separado por un punto y coma añadimos el paquete java que vayamos a utilizar en nuestra aplicación, que en mi caso será &#8220;mx.androideity.mapav2&#8243;.</p>
<p style="text-align: justify;"><a href="http://androideity.com/wp-content/uploads/2013/05/7Sha1Package.jpg"><img class="size-medium wp-image-4343 aligncenter" title="7Sha1Package" src="http://androideity.com/wp-content/uploads/2013/05/7Sha1Package-300x208.jpg" alt="" width="300" height="208" /></a></p>
<p style="text-align: justify;">Pulsamos el botón Create y se genera el API Key, podremos verla en la pantalla siguiente dentro del apartado <strong><span style="text-decoration: underline;">&#8220;Key for Android Apps (with certificates)&#8221;</span></strong>.</p>
<p style="text-align: justify;"><a href="http://androideity.com/wp-content/uploads/2013/05/8ApiKeyGenerada.jpg"><img class="size-medium wp-image-4345 aligncenter" title="8ApiKeyGenerada" src="http://androideity.com/wp-content/uploads/2013/05/8ApiKeyGenerada-300x65.jpg" alt="" width="300" height="65" /></a></p>
<p style="text-align: justify;">Con lo anterior concluimos las configuraciones necesarias para utilizar el servicio de mapas de Android en nuestras aplicaciones.</p>
<p style="text-align: justify;"><strong>3.-</strong> <strong>Crearemos un nuevo proyecto de Android</strong>, para el ejemplo lo llamaremos &#8220;androideity-mapav2&#8243;.</p>
<p style="text-align: justify;"><strong>Nota:</strong> <em>Recordemos utilizar para el proyecto el mismo paquete java que hemos indicado durante la obtención de la API key.</em></p>
<p style="text-align: justify;"><span style="text-decoration: underline;">3.1</span> Ahora tenemos que modificar el archivo <strong><span style="text-decoration: underline;">AndroidManifest.xml</span></strong> para agregar la API Key que acabamos de generar, esto dentro de la etiqueta&lt;application&gt;, un nuevo elemento &lt;meta-data&gt; como se muestra a continuación:</p>
<p style="text-align: justify;"><a href="http://androideity.com/wp-content/uploads/2013/05/code8.jpg"><img class="size-medium wp-image-4346 aligncenter" title="code8" src="http://androideity.com/wp-content/uploads/2013/05/code8-300x37.jpg" alt="" width="300" height="37" /></a></p>
<p style="text-align: justify;">En donde android:value  tendremos que poner nuestra API Key recien generada.</p>
<p style="text-align: justify;"><span style="text-decoration: underline;">3.2</span> Otra modificación dentro del AndroidManifest es añadir permisos adicionales que nos permitan acceder a los servicios web de Google, a Internet, y al almacenamiento externo del dispositivo (esto para guardar la caché de los mapas), por último dado que la API v2 de Google Maps Android utiliza OpenGL ES versión 2, deberemos especificar también dicho requisito en nuestro AndroidManifest añadiendo un nuevo elemento &lt;uses-feature&gt;:</p>
<p style="text-align: justify;"><a href="http://androideity.com/wp-content/uploads/2013/05/code9.jpg"><img class="aligncenter" title="code9" src="http://androideity.com/wp-content/uploads/2013/05/code9-300x142.jpg" alt="" width="300" height="142" /></a></p>
<p style="text-align: justify;">Una vez hemos configurado todo lo necesario en el AndroidManifest, y antes de escribir nuestro código, tenemos que seguir añadiendo elementos externos a nuestro proyecto.</p>
<p style="text-align: justify;"><strong>4.-</strong> <strong>Agregar google play services al proyecto:</strong></p>
<p style="text-align: justify;">Debemos referenciar desde nuestro proyecto la librería con el <strong><span style="text-decoration: underline;">SDK de Google Play Services</span></strong>. Desde eclipse podemos importar la librería mediante la opción de menú <span style="text-decoration: underline;"><strong>&#8220;File / Import… / Existing Android Code Into Workspace&#8221;</strong></span>.</p>
<p style="text-align: justify;">Como lo comentamos anteriormente este paquete se localiza en la ruta: <strong>&#8220;&lt;carpeta-sdk-android&gt;/extras/google/google_play_services/libproject/google-play-services_lib&#8221;.</strong></p>
<p style="text-align: justify;">Acto seguido debemos asociar a nuestro proyecto la libreria que acabamos de importar dando clic derecho / Properties / Android. En dicha ventana podemos añadir una nueva librería en la sección inferior llamada <span style="text-decoration: underline;">&#8220;Library&#8221;</span>. Cuando pulsamos el botón <span style="text-decoration: underline;">&#8220;Add..&#8221;</span> nos aparecerá la librería recien importada y podremos seleccionarla directamente, añadiéndose a nuestra lista de librerías referenciadas por nuestro proyecto.</p>
<p style="text-align: justify;"><a href="http://androideity.com/wp-content/uploads/2013/05/11libreriaServices.jpg"><img class="aligncenter size-medium wp-image-4349" title="11libreriaServices" src="http://androideity.com/wp-content/uploads/2013/05/11libreriaServices-255x300.jpg" alt="" width="255" height="300" /></a></p>
<p style="text-align: justify;"><strong> 5.- Añadir la librería android-support-v4.jar</strong></p>
<p style="text-align: justify;">Debemos asegurarnos de que nuestro proyecto incluye la librería android-support-v4.jar, que debería aparecer si desplegamos la carpeta &#8220;lib&#8221; de nuestro proyecto. Si es así pasa al paso 6, de lo contrario haz lo siguiente:</p>
<p style="text-align: justify;">Puedes agregar la librería dando clic derecho en el proyecto en la opción &#8220;Android Tools / Add Support Library&#8221; se abrirá el SDK Manager y procederá a descargar e instalar la librería, para más detalles puedes revisar la documentación oficial <a href="http://developer.android.com/intl/es/tools/extras/support-library.html" target="_blank">aquí.</a></p>
<p style="text-align: justify;"><strong>6.-</strong> Ahora editamos el archivo <strong><span style="text-decoration: underline;">activity_main.xml</span></strong> que es el layout principal de la actividad, en el caso de la nueva API v2 se añadirá en forma de<em>fragment</em> de un determinado tipo (com.google.android.gms.maps.SupportMapFragment), quedando por ejemplo de la siguiente forma:como se muestra:</p>
<p style="text-align: justify;"><a href="http://androideity.com/wp-content/uploads/2013/05/10code.jpg"><img class="aligncenter" title="10code" src="http://androideity.com/wp-content/uploads/2013/05/10code-300x61.jpg" alt="" width="300" height="61" /></a></p>
<p style="text-align: justify;"><strong>7.-</strong> Dado que estamos utilizando fragments, la actividad principal también tendrá que extender a FragmentActivity (en vez de simplemente Activity). Usaremos también la versión de FragmentActivity incluida en la librería android-support para ser compatibles con la mayoría de las versiones Android actuales</p>
<p style="text-align: justify;">Este es el código que ingresaremos en nuestra clase llamada MainActivity que como se observa se hereda de FragmentActivity de la libreria support.v4:</p>
<p style="text-align: justify;"><a href="http://androideity.com/wp-content/uploads/2013/05/code12.jpg"><img class="size-medium wp-image-4351 aligncenter" title="code12" src="http://androideity.com/wp-content/uploads/2013/05/code12-300x66.jpg" alt="" width="300" height="66" /></a></p>
<p style="text-align: justify;"><strong>8.-</strong> Este es el resultado al ejecutar la aplicación en el dispositivo:</p>
<p style="text-align: justify;"><a href="http://androideity.com/wp-content/uploads/2013/05/13.png"><img class="size-medium wp-image-4350 aligncenter" title="13" src="http://androideity.com/wp-content/uploads/2013/05/13-200x300.png" alt="" width="200" height="300" /></a></p>
<p style="text-align: justify;">Espero que les sirva el post para poder agilizar la curva de aprendizaje en la migración de mapas en android con respecto a la versión 1.</p>
<p style="text-align: justify;">En post siguientes hablaremos de las nuevas características e interacciones con el mapa.</p>
]]></content:encoded>
			<wfw:commentRss>http://androideity.com/2013/05/05/google-maps-android-api-v2/feed/</wfw:commentRss>
		<slash:comments>17</slash:comments>
		</item>
		<item>
		<title>Usando SurfaceView en Android – Parte 2</title>
		<link>http://androideity.com/2013/03/23/usando-surfaceview-en-android-parte-2/#utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=usando-surfaceview-en-android-parte-2</link>
		<comments>http://androideity.com/2013/03/23/usando-surfaceview-en-android-parte-2/#comments</comments>
		<pubDate>Sun, 24 Mar 2013 00:50:15 +0000</pubDate>
		<dc:creator>sebastiancipolat</dc:creator>
				<category><![CDATA[Programación]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[canvas]]></category>
		<category><![CDATA[SurfaceHolder]]></category>
		<category><![CDATA[SurfaceView]]></category>
		<category><![CDATA[touch game]]></category>
		<category><![CDATA[touch screen]]></category>

		<guid isPermaLink="false">http://androideity.com/?p=4296</guid>
		<description><![CDATA[<a href="http://androideity.com/2013/03/23/usando-surfaceview-en-android-parte-2/"><img align="left" hspace="5" width="100" height="100" src="http://androideity.com/wp-content/uploads/2013/02/imagenpostsurfaceview1-150x150.png" class="alignleft wp-post-image tfe" alt="imagenpostsurfaceview" title="imagenpostsurfaceview" /></a>&#160; Hola lectores  hoy les traigo la segunda parte del  tutorial  sobre el uso de SurfaceView en nuestras aplicaciones, antes de seguir si no leyeron la primera parte recomiendo que lo hagan: http://androideity.com/2013/02/12/usando-surfaceview-en-android-parte-1/ Hoy avanzaremos un poco mas y veremos &#8230; <a href="http://androideity.com/2013/03/23/usando-surfaceview-en-android-parte-2/">Sigue leyendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><a href="http://androideity.com/wp-content/uploads/2013/02/imagenpostsurfaceview1.png"><img class="aligncenter" title="imagenpostsurfaceview" src="http://androideity.com/wp-content/uploads/2013/02/imagenpostsurfaceview1.png" alt="imagenpostsurfaceview" width="578" height="280" /></a></p>
<p>&nbsp;</p>
<p>Hola lectores  hoy les traigo la segunda parte del  tutorial  sobre el uso de SurfaceView en nuestras aplicaciones, antes de seguir si no leyeron la primera parte recomiendo que lo hagan:</p>
<p><a href="http://androideity.com/2013/02/12/usando-surfaceview-en-android-parte-1/">http://androideity.com/2013/02/12/usando-surfaceview-en-android-parte-1/</a></p>
<p>Hoy avanzaremos un poco mas y veremos como detectar pulsaciones en la pantalla y poder interactuar con ellas.</p>
<p><span id="more-4296"></span>La idea es que al finalizar el post podamos emular una especie de interfaz como la de un joystick como vemos en las imágenes siguientes:</p>
<p style="text-align: left;"><a href="http://androideity.com/wp-content/uploads/2013/03/joystick-cx-40.jpg"><img class="wp-image-4298" title="joystick " src="http://androideity.com/wp-content/uploads/2013/03/joystick-cx-40-265x300.jpg" alt="" width="186" height="210" /></a>                                                     <a href="http://androideity.com/wp-content/uploads/2013/03/device-2013-02-11-011101.png"><img class="wp-image-4299 alignnone" src="http://androideity.com/wp-content/uploads/2013/03/device-2013-02-11-011101-225x300.png" alt="joystick " width="180" height="240" /></a></p>
<div></div>
<h2></h2>
<h3><strong style="font-size: 1.5em;"><span style="color: #99cc00;">Manos a la obra:</span></strong></h3>
<p>Como siempre el codigo estara disponible en el repositorio, veremos algunas cosas antes.</p>
<p>Para interactuar con la pulsacion de la pantalla tendremos que utilizar onTouchEvent() mas <a href="http://developer.android.com/reference/android/view/View.html#onTouchEvent(android.view.MotionEvent)">info</a><br />
public boolean onTouchEvent(MotionEvent event)</p>
<p>Cuando tocamos  la pantalla lo estamos haciendo en ciertas coordenadas (X,Y) dentro de la misma:</p>
<p>int touched_x = (int) event.getX();</p>
<p>int touched_y = (int) event.getY();</p>
<p>Otra de las cosas que podemos hacer es tener un control de cuando o como realizamos la pulsacion sobre la pantalla, para esto utilizaremos la clase</p>
<p>MotionEvent recomiendo dar un vistazo a <a href="http://developer.android.com/reference/android/view/MotionEvent.html">http://developer.android.com/reference/android/view/MotionEvent.html</a></p>
<p><span style="color: #808080;"> onTouchEvent(MotionEvent event)<span style="color: #000000;"> recibe como parametro un objeto Motion event, por lo que nosotros podemos leer la accion que esta ocurriendo mediante</span></span><strong><span style="color: #003366;"> </span></strong></p>
<p><strong><span style="color: #003366;">event.getAction();</span></strong></p>
<p>por medio de un switch podemos controlar esa accion y saber cuando por ej:</p>
<p><span style="color: #000000;"><span style="color: #99cc00;">MotionEvent.ACTION_DOWN</span>   Cuando se toca la pantalla</span></p>
<p><span style="color: #99cc00;">MotionEvent.ACTION_MOVE</span> Cuando se desplaza el dedo por la pantalla</p>
<p><span style="color: #99cc00;">MotionEvent.ACTION_UP</span>   Cuando levantamos el dedo de la pantalla que estábamos tocando</p>
<p>Entoces por ejemplo si quisiera dibujar un circulo que se muestre en donde presiono la pantalla</p>
<p>deberia guardar las coordenadas x,y de la pulsacion de la pantalla y cuando esta se toca determiandolo en el onTouchEvent con MotionEvent.ACTION_DOWN</p>
<p>dentro del metodo onDraw() dibujar el circulo usando las coordenadas de la pulsacion como coordenadas de origen del circulo, luego</p>
<p>cuando se levante el dedo  con MotionEvent.ACTION_UP volver a pone la pantalla negra.</p>
<p>Tambien por ejemplo si quisiera implementar algun tipo de drag and drop podria utilizar el MotionEvent.ACTION_MOVE y combinarlo con los otros 2.</p>
<p><span style="color: #99cc00;">Ahora veremos la aplicación:</span></p>
<p>El código es el mismo que el del tutorial anterior con algunos complementos:</p>
<p>Los archivos MySurfaceThread ,MainActivity y el AndroidManifest.xml son los mismo que los del tutorial anterior.</p>
<p>En el sig. diagrama ayudara para entender el codigo.</p>
<p>&nbsp;</p>
<p style="text-align: center;"><a href="http://androideity.com/wp-content/uploads/2013/03/diagrama.png"><img class="size-medium wp-image-4308 aligncenter" src="http://androideity.com/wp-content/uploads/2013/03/diagrama-300x272.png" alt="diagrama" width="300" height="272" /></a></p>
<p>En el archivo <span><span style="color: #ff6600;">MySurfaceView </span><span>he realizado las siguiente modificaciones, la explicación esta comentada en cada linea.</span></span></p>
<p style="text-align: center;"><a href="http://androideity.com/wp-content/uploads/2013/03/codigo1.png"><img class="aligncenter size-full wp-image-4314" title="codigo1" src="http://androideity.com/wp-content/uploads/2013/03/codigo1.png" alt="Codigo" width="1276" height="3014" /></a></p>
<p>Basicamento lo que hace en el evento onDraw() es muy simple si toco la pantalla  determinandolo por la variable touched y donde toque esta dentro del circulo negro dibujamos el circulo rojo y al mover el dedo da la sensacion de estar moviendolo.</p>
<p>Luego para detectar cuando o no presiono el boton, lo que hago es como antes si touched es true y en donde estoy tocando en la pantalla es donde esta el boton</p>
<p>cambiamos la imagen que muestra  bitmap y al redibujarse la pantalla parece como si lo estuviese tocando ya que al sacar el dedo de encima cambia la imagen.</p>
<p>lineas 118 a  138  del codigo</p>
<p>Si todo funciona correctamente deberia verse como el video:<br />
<iframe src="http://www.youtube.com/embed/YRAQB2bh5j8" frameborder="0" width="560" height="315"></iframe></p>
<p>Como ven es muy simple y no tiene mayor complejidad, si entendieron todo esto pueden darle un vistazo a un ejemlo ya incluido en la carpetas Samples llamado LunarLander el cual utiliza todo lo que vimos hoy y les va a servir como complemento.</p>
<p><a href="http://androideity.com/wp-content/uploads/2013/03/lander.png"><img class="aligncenter size-medium wp-image-4309" title="" src="http://androideity.com/wp-content/uploads/2013/03/lander-225x300.png" alt="LunarLander" width="225" height="300" /></a></p>
<p>&nbsp;</p>
<p>Como veran con todo esto que hemos visto podran realizar su propio juego o cualquier aplicacion que utilize la interaccion con las pulsaciones en la pantalla.</p>
<p>&nbsp;</p>
<h2><span style="color: #99cc00;">Código<strong> utilizado:</strong></span></h2>
<p>Como siempre comparto con uds el codigo utilizado en este ejemplo, podran descargarlo del repositorio:</p>
<p>&nbsp;</p>
<h2 style="text-align: left;"><span style="color: #ff0000;">Click en la imagen debajo para acceder al repositorio</span></h2>
<p>&nbsp;</p>
<p style="text-align: center;"><a href="https://github.com/Androideity/-Usando-SurfaceView-en-Android---Parte-2"><img class="aligncenter" src="http://androideity.com/wp-content/uploads/2012/10/GitHub1.png" alt="Repositirio GitHub" width="265" height="154" /></a></p>
<p>&nbsp;</p>
<p>Esto fue todo por hoy, espero que les halla gustado como siempre cualquier consulta o sugerencia pueden utilizar el</p>
<p>campo de comentario que encontraran mas abajo, hasta la proxima.!</p>
<p>Sebastian</p>
<div style="text-align: left;"><img class="alignnone" src="http://upload.wikimedia.org/wikipedia/commons/thumb/1/1a/Flag_of_Argentina.svg/200px-Flag_of_Argentina.svg.png" alt="" width="90" height="56" /></div>
<p>&nbsp;</p>
<p>&nbsp;</p>
<h2 style="text-align: center;"><strong><span style="color: #808080;">¿Te gustó este tutorial? ¡Compártelo!</span></strong></h2>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://androideity.com/2013/03/23/usando-surfaceview-en-android-parte-2/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Usando SurfaceView en Android &#8211; Parte 1</title>
		<link>http://androideity.com/2013/02/12/usando-surfaceview-en-android-parte-1/#utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=usando-surfaceview-en-android-parte-1</link>
		<comments>http://androideity.com/2013/02/12/usando-surfaceview-en-android-parte-1/#comments</comments>
		<pubDate>Tue, 12 Feb 2013 20:58:47 +0000</pubDate>
		<dc:creator>sebastiancipolat</dc:creator>
				<category><![CDATA[Programación]]></category>

		<guid isPermaLink="false">http://androideity.com/?p=4235</guid>
		<description><![CDATA[<a href="http://androideity.com/2013/02/12/usando-surfaceview-en-android-parte-1/"><img align="left" hspace="5" width="100" height="100" src="http://androideity.com/wp-content/uploads/2013/02/imagenpostsurfaceview1-150x150.png" class="alignleft wp-post-image tfe" alt="imagenpostsurfaceview" title="imagenpostsurfaceview" /></a>&#160; Hola lectores el dia de hoy les traigo un nuevo tutorial  en este caso  sobre como utilizar SurfaceView en nuestras aplicaciones. En el blog ya hemos utilizado esto  en combinacion con algun otro tema en los sig. post: OpenGL para &#8230; <a href="http://androideity.com/2013/02/12/usando-surfaceview-en-android-parte-1/">Sigue leyendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><a href="http://androideity.com/wp-content/uploads/2013/02/imagenpostsurfaceview1.png"><img class="aligncenter size-full wp-image-4237" title="imagenpostsurfaceview" src="http://androideity.com/wp-content/uploads/2013/02/imagenpostsurfaceview1.png" alt="imagenpostsurfaceview" width="578" height="280" /></a></p>
<p>&nbsp;</p>
<p>Hola lectores el dia de hoy les traigo un nuevo tutorial  en este caso  sobre como utilizar SurfaceView en nuestras aplicaciones.</p>
<p>En el blog ya hemos utilizado esto  en combinacion con algun otro tema en los sig. post: <a title="OpenGL para mí, para ti, para todos! – Parte I" href="http://androideity.com/2011/12/15/%C2%A1opengl-para-mi-para-ti-para-todos-%E2%80%93-parte-i/ " target="_blank">OpenGL para mí, para ti, para todos! – Parte I</a>  y <a href="http://androideity.com/2011/10/08/hello-camera/" target="_blank">Hello Camera</a> pero en esta ocasion lo veremos con un poco mas de profundidad.</p>
<h2><span style="color: #99cc00;"><strong>¿Que  nos permite SurfaceView?</strong></span></h2>
<p>Según la documentacion oficial disponible  <a href="http://developer.android.com/reference/android/view/SurfaceView.html">aqui</a>  , Proporciona una superficie de dibujo dedicado incrustado dentro de una jerarquía de vistas.</p>
<p>Puedes controlar el formato de esta superficie y  si se quiere, su tamaño,  SurfaceView se encargara de colocar  la superficie en el lugar correcto en la pantalla.</p>
<p><span id="more-4235"></span>La superficie esta ordenada respecto del eje Z de modo que se encuentra detrás de la ventana que contendrá al SurfaceView, esta crea un &#8216;agujero&#8217; en la ventana para poder mostrar su superficie. La jerarquía de vistas se va a encargar de manejar la superficie con los demas componentes que hay en la ventana por lo que se puede combinar SurfaceView con cualquier otro elemento como botones en la parte superior de la superficie aunque esto puede afectar el rendimiento.<br />
Basicamente se trata de una <a title="sdk View" href="http://developer.android.com/reference/android/view/View.html" target="_blank">View</a> que contiene una <a title="sdk Surface" href="http://developer.android.com/reference/android/view/Surface.html" target="_blank">Surface</a> que es un buffer crudo que es usado por el screen compositor que se encarga de renderizar todo en Android.</p>
<p>Algunas diferencias entre View y SurfaceView:</p>
<ul>
<li>Views todo es dibujado en el mismo hilo de la UI el cual tambien es usado para la interaccion con el usuario.</li>
<li>SurfaceView puede ser dibujado por varios hilos diferentes al de la UI.</li>
<li>Surfaceview No puede ser transparente solamente puede estar detras de otros elementos en la jerarquia de vistas.</li>
<li>Para animaciones es mucho mas rapido que View.</li>
<li>Surfaceview consume mas recursos que View</li>
</ul>
<p>For more information (and a great usage example) refer to the LunarLander project in the SDK &#8216;s examples section</p>
<h2><strong><span style="color: #99cc00;">Manos a la obra:</span></strong></h2>
<p>Para acceder a la superficie subyacente es necesario hacerlo mediante la interfaz SurfaceHolder.Callback</p>
<p>Para poder empezar es necesario implenentar una clase  que extienda de SurfaceView e implemente SurfaceHolder.Callback para poder manejar los metodos relacionados con esta ( creación, modificación y destrucción,etc)</p>
<p>Esta contendra los metodos  surfaceCreated(), surfaceDestroyed(), surfaceChanged()</p>
<p>- Implementar un  Thread  para nuestro SurfaceView.</p>
<p>-En el constructor de SurfaceView agregar  SurfaceView a SurfaceHolder para poder utilicar callback y crear el hilo.<br />
getHolder().addCallback(this);<br />
thread = new MySurfaceThread(getHolder(), this);</p>
<p>-Modificar el metodo  run() del  Thread</p>
<p>Empezando con el codigo.</p>
<p>A la clase la he llamado MySurfaceView, el codigo sera de la siguiente forma:</p>
<p><a href="http://androideity.com/wp-content/uploads/2013/02/surfaceviewbasica.png"><img class="aligncenter size-full wp-image-4245" title="surfaceviewbasica" src="http://androideity.com/wp-content/uploads/2013/02/surfaceviewbasica.png" alt="" width="698" height="678" /></a></p>
<p>Como pudimos ver en el constructor llamamos getHolder().addCallback(this); para acceder a la superficie y poder manejar los eventos de SufaceView desde esta clase. He agregado onDraw() y onTouchEvent() los cuales veremos luego.</p>
<p>En el activity principal vamos a decirle que en lugar de cargar la ui desde un archivo xml de /res/Layout utilize nuestra clase:</p>
<p>MainActivity.java</p>
<p><a href="http://androideity.com/wp-content/uploads/2013/02/mainactivity.png"><img class="aligncenter size-full wp-image-4249" title="" src="http://androideity.com/wp-content/uploads/2013/02/mainactivity.png" alt="Main Activity" width="915" height="349" /></a></p>
<p>En  la linea 19 use setContentView(new MySurfaceView(this)) aqui le dijo que utilize nuestra clase en lugar del layout, tambien mas arriba defini que no se muestre el titulo de la app ni la barra de notificaciones.</p>
<p>Como les habia comentado al principio el SurfaceView puede utilizarse con otros elementos como botones,etc, por lo que para poder utilizarlo es necesario declararlo en el XML del layout, se podria hacer de la sig. forma.</p>
<p>Ejemplo:</p>
<p><a href="http://androideity.com/wp-content/uploads/2013/02/ejlayoutcondsurfaceembd.png"><img class="aligncenter size-full wp-image-4250" title="" src="http://androideity.com/wp-content/uploads/2013/02/ejlayoutcondsurfaceembd.png" alt="ejempplo de layout con SurfaceView" width="628" height="404" /></a></p>
<p>Si ejecutamos la aplicación en este punto mostrara toda la pantalla negra ya que en ninguna parte le hemos dicho que pinte o cambie el color.</p>
<p>Ahora lo que vamos a hacer es implementar un hilo que sera el que se encargara de pintar, observen  que este hilo sera diferente al de la UI.</p>
<p>Prestar atencion a la explicacion en los comentarios en el codigo:</p>
<p>&nbsp;</p>
<p><a href="http://androideity.com/wp-content/uploads/2013/02/thread.png"><img class="aligncenter size-full wp-image-4253" title="" src="http://androideity.com/wp-content/uploads/2013/02/thread.png" alt="thread" width="872" height="774" /></a></p>
<p>Es necesario agregar en el metodo onCreate de nuestro SurfaceView la llamada a nuestro hilo</p>
<p><a href="http://androideity.com/wp-content/uploads/2013/02/oncreate.png"><img class="size-full wp-image-4268 alignnone" src="http://androideity.com/wp-content/uploads/2013/02/oncreate.png" alt="oncreate" width="468" height="141" /></a></p>
<p>Como veran creamis una instancia al hilo pasandole como parametros el la referencia al surfaceholder y el contexto.</p>
<p>luego establecemos el estado del hilo como corriendo -&gt; true y lo iniciamos con start.</p>
<p>Tambien debemos modificar el SurfaceDestroyed()</p>
<p>Cada vez que la app pase a segundo plano el SurfaceView se va a destruir junto con todo su contenido ejecutandose SurfaceDestroyed(),</p>
<p>el hilo se va a detener y liberar el canvas, pueden probar esto pasando la app a segundo plano y dándole un vistazo al logcat</p>
<p>lo que implica que cuando la app vuelva a primer plano debera volver a dibujar todo nuevamente deberán tener en cuenta esto a la hora de utilizar esto.</p>
<p><a href="http://androideity.com/wp-content/uploads/2013/02/surfacedestroy.png"><img class="alignnone size-full wp-image-4280" title="" src="http://androideity.com/wp-content/uploads/2013/02/surfacedestroy.png" alt="SurfaceDestroy()" width="510" height="262" /></a></p>
<p>Ahora necesitaríamos modificar el metodo onDraw() y especificar que realize alguna accion que podamos ver en la pantalla.</p>
<p>Solamente explicare como dibujar un circulo ya que el tutorial no es sobre canvas en si por lo que recomiendo leer la documentacion sobre <a href="http://developer.android.com/reference/android/graphics/Canvas.html">Canvas</a>.</p>
<p>Con simplemente colocar dentro:</p>
<p><a href="http://androideity.com/wp-content/uploads/2013/02/ondraparte1.png"><img class="aligncenter size-full wp-image-4261" title="" src="http://androideity.com/wp-content/uploads/2013/02/ondraparte1.png" alt="onDraw()" width="584" height="397" /></a></p>
<p>Si ejecutan la app veran  la pantalla con fondo blanco y un circulo negro en la mitad de la pantalla:</p>
<p style="text-align: center;"><a href="http://androideity.com/wp-content/uploads/2013/02/pantalla-parte-1.png"><img class="aligncenter size-full wp-image-4262" style="border: 2px solid black;" src="http://androideity.com/wp-content/uploads/2013/02/pantalla-parte-1.png" alt="pantalla parte 1" width="240" height="320" /></a></p>
<p>Hasta aca damos   por finalizado la 1°  parte del tutorial.</p>
<p><span style="color: #003366;"><strong>En la segunda parte que publicare en lo que resta de la semana utilizaremos los conocimientos aprendidos hoy y explicare como detectar las pulsaciones en la pantalla,  les mostrare como realizar una interfaz  basica que &#8220;simule&#8221; el funcionamiento de un joystick como los del viejo Atari.</strong></span><br />
<a href="http://androideity.com/wp-content/uploads/2013/02/joystick-cx-40.jpg"><img class="aligncenter size-thumbnail wp-image-4257" title="joystick-cx-40" src="http://androideity.com/wp-content/uploads/2013/02/joystick-cx-40-150x150.jpg" alt="joystick atari" width="150" height="150" /></a></p>
<p>&nbsp;</p>
<p>Para realizar este tutorial utilize informacion de las sigueientes fuentes:</p>
<p><a href="http://developer.android.com/reference/android/view/Surface.html">http://developer.android.com/reference/android/view/Surface.html</a></p>
<p><a href="http://developer.android.com/reference/android/view/SurfaceView.html">http://developer.android.com/reference/android/view/SurfaceView.html</a></p>
<p><a href="http://android-er.blogspot.com.ar/2010/05/android-surfaceview.html">http://android-er.blogspot.com.ar/2010/05/android-surfaceview.html</a></p>
<p><a href="http://epere4.blogspot.com.ar/2008/04/cmo-funciona-synchronized-en-java.html">http://epere4.blogspot.com.ar/2008/04/cmo-funciona-synchronized-en-java.html</a></p>
<p><a href="http://blog.vidasconcurrentes.com/android/dibujando-figuras-en-un-canvas-de-android-parte-i/">http://blog.vidasconcurrentes.com/android/dibujando-figuras-en-un-canvas-de-android-parte-i/</a></p>
<p><a href="http://stackoverflow.com/questions/13496598/surfaceview-colour-differences-between-surfaceview-and-view">http://stackoverflow.com/questions/13496598/surfaceview-colour-differences-between-surfaceview-and-view</a></p>
<p><a href="http://stackoverflow.com/questions/1243433/android-difference-between-surfaceview-and-view">http://stackoverflow.com/questions/1243433/android-difference-between-surfaceview-and-view</a></p>
<p><a href="http://https417.blogspot.com.ar/2012/08/threading-surfaceview-in-android.html">http://https417.blogspot.com.ar/2012/08/threading-surfaceview-in-android.html</a></p>
<h2></h2>
<h2><span style="color: #99cc00;">Código</span><strong><span style="color: #99cc00;"> utilizado:</span></strong></h2>
<p>Como siempre comparto con uds el codigo utilizado en este ejemplo, podran descargarlo del repositorio:</p>
<p>&nbsp;</p>
<h2 style="text-align: center;"><span style="color: #ff0000;">Click en la imagen debajo para acceder al repositorio</span></h2>
<p>&nbsp;</p>
<p style="text-align: center;"><a href="https://github.com/Androideity/Usando-SurfaceView-en-Android---Parte-1  "><img class="aligncenter" title="Repositorio" src="http://androideity.com/wp-content/uploads/2012/10/GitHub1.png" alt="" width="265" height="154" /></a></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>Esto fue todo por hoy, espero que les halla gustado, hasta la proxima.!</p>
<p>Sebastian</p>
<p><img src="http://upload.wikimedia.org/wikipedia/commons/thumb/1/1a/Flag_of_Argentina.svg/200px-Flag_of_Argentina.svg.png" alt="Bandera Argentina" width="84" height="53" /></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<h2 style="text-align: center;"><span style="color: #888888;"><strong> ¿Te gustó este tutorial? ¡Compártelo!</strong></span></h2>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://androideity.com/2013/02/12/usando-surfaceview-en-android-parte-1/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Uso de la Librería PanoramaGL en Android usando Eclipse</title>
		<link>http://androideity.com/2012/11/20/uso-de-la-libreria-panoramagl-en-android-usando-eclipse/#utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=uso-de-la-libreria-panoramagl-en-android-usando-eclipse</link>
		<comments>http://androideity.com/2012/11/20/uso-de-la-libreria-panoramagl-en-android-usando-eclipse/#comments</comments>
		<pubDate>Wed, 21 Nov 2012 01:13:10 +0000</pubDate>
		<dc:creator>jaime</dc:creator>
				<category><![CDATA[Diseño]]></category>
		<category><![CDATA[Programación]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[desarrollo en android]]></category>
		<category><![CDATA[eclipse]]></category>
		<category><![CDATA[PanoramaGL]]></category>
		<category><![CDATA[tutorial]]></category>

		<guid isPermaLink="false">http://androideity.com/?p=4203</guid>
		<description><![CDATA[<a href="http://androideity.com/2012/11/20/uso-de-la-libreria-panoramagl-en-android-usando-eclipse/"><img align="left" hspace="5" width="100" height="100" src="http://androideity.com/wp-content/uploads/2012/11/imagen0-150x150.jpg" class="alignleft wp-post-image tfe" alt="" title="PanoramaGL Android 0" /></a>Twitter: @JaimeYesidLeon Las herramientas con las que contamos los desarrolladores de aplicaciones en Android cada día crece como espuma y fortalece la plataforma del robot verde; así que el problema no es la falta de herramientas sino el conocerlas, por &#8230; <a href="http://androideity.com/2012/11/20/uso-de-la-libreria-panoramagl-en-android-usando-eclipse/">Sigue leyendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><a href="https://twitter.com/#!/JaimeYesidLeon" target="_blank"><strong>Twitter: @JaimeYesidLeon</strong></a></p>
<p style="text-align: center;"><a href="http://androideity.com/wp-content/uploads/2012/11/imagen0.jpg"><img class="aligncenter size-full wp-image-4215" style="margin-top: 20px; margin-bottom: 20px;" title="PanoramaGL Android 0" src="http://androideity.com/wp-content/uploads/2012/11/imagen0.jpg" alt="" width="448" height="286" /></a></p>
<p>Las herramientas con las que contamos los desarrolladores de aplicaciones en Android cada día crece como espuma y fortalece la plataforma del robot verde; así que el problema no es la falta de herramientas sino el conocerlas, por eso en este post muy sencillo traigo un “Hola Mundo” para una librería que me gustó mucho y que se llama PanoramaGL, con la cual podrás ver fotos panorámicas en tu aplicación, así que si te interesa agregar esta funcionalidad a tu aplicación sigue leyendo para ver de qué se trata.<br />
<span id="more-4203"></span></p>
<p>Hace unas pocas semanas Google dio a conocer la última versión de sus sistema operativo Android, el cual ya va en 4.2 y que se sigue llamando Jelly Bean como su versión anterior 4.1. La versión 4.2 promete una mejoras importantes dentro de las cuales surgió una que me llamó mucho la atención: Photo Sphere; una<br />
funcionalidad de la cámara con la cual podrás capturar y visualizar fotos de 360°. Genial ¿no?<br />
En este video podrás recordar o ver (si no lo has hecho antes) de lo que se trata Photo Sphere:</p>
<p><iframe width="620" height="349" src="http://www.youtube.com/embed/YLk8XphmK_E?fs=1&#038;feature=oembed" frameborder="0" allowfullscreen></iframe></p>
<p>Sin duda alguna esta nueva funcionalidad es bastante interesante, pero sería muchísimo más interesante si los desarrolladores de aplicaciones para Android pudiéramos aprovechar este recurso e incluirlo en aplicaciones que necesitan de un recurso más liviano que un video pero más interactivo que una foto plana.<br />
Imagina que estás desarrollando una aplicación que necesita mostrar el interior de una casa que está a la venta, un almacén que estas promocionando, un sitio turístico que deseas dar a conocer, el interior de un automóvil que deseas mostrar a tus clientes, ¿no crees que una foto panorámica sería la solución perfecta? Si crees que sí, de seguro la librería que hoy te traigo será una solución muy buena para este tipo de necesidades.</p>
<p><strong id="internal-source-marker_0.23380120750516653">PanoramaGL</strong></p>
<p>PanoramaGL fue la primera librería para Android (también para iOS) Open Source que implementó la propiedad de visualizar fotos panorámicas tanto en el eje X como Y, para ser usadas en el desarrollo de aplicaciones móviles. En la página oficial <a title="Sitio oficial PanoramaGL" href="http://code.google.com/p/panoramagl-android/" target="_blank">PanoramaGL</a>  podrás encontrar todo lo que necesitas saber sobre esta librería, como un HelloWorld, descargar el código fuente, recursos externos y características propias, aunque podemos destacar para nuestro interés que se puede usar en versiones de Android 2.0 en adelante, soporta OpenGL 1.0 en adelante, tiene zoom y movimiento sensorial, osea que puedes usar por ejemplo el Acelerómetro para hacer que se mueva la foto que estás visualizando. Algo muy interesante también es la facilidad de poder implementar el protocolo JSON para visualizar Fotos desde una URL.</p>
<p>Para que puedas ver de qué se trata esta librería te recomiendo que visites su página y te enteres de todas sus geniales características, pero si quieres ver ya de que se trata, te dejo el siguiente video (no tan claro) en donde se puede ver un ejemplo de lo que hace la librería.</p>
<p><iframe width="620" height="465" src="http://www.youtube.com/embed/1eSnM9eL3l0?fs=1&#038;feature=oembed" frameborder="0" allowfullscreen></iframe></p>
<p>Como lo dijimos al inicio del post, vamos a ver un “HolaMundo” del uso de esta librería para que pueda ser aprovechada en nuestros proyectos, así que empecemos:</p>
<p>1. En el primer paso vamos a descargar los archivos necesarios para utilizar PanoramaGL y como es lógico pensar necesitamos la librería .jar para ser usada en nuestro proyecto, así que la descargamos de la siguiente dirección: <a href="http://panoramagl-android.googlecode.com/files/PanoramaGL_0.1.jar"> http://panoramagl-android.googlecode.com/files/libglues.zip</a></p>
<p>La segunda descarga que vamos a hacer será de los archivos de compatibilidad, pero ¿qué son esos archivos? Son ficheros que nos ayudan para que podamos usar nuestro código en diferentes arquitecturas de hardware sin importar si el dispositivo Android tiene un procesador con arquitectura ARM, x86 o MIPS, así que debes descargarlos de la siguiente dirección:<br />
<a href="http://panoramagl-android.googlecode.com/files/libglues.zip">http://panoramagl-android.googlecode.com/files/libglues.zip</a></p>
<p>Lo último y más bonito que debemos tener para hacer nuestro proyecto son las imágenes que vamos a mostrar. Es muy importante que estas imágenes tengan las siguientes características:</p>
<p>a. Que su tamaño NO exceda los 1024 x1024 pixeles de tamaño, ya que la librería no soporta más de este tamaño. Es cierto que es una limitante pero pues no todo puede ser color de rosa.</p>
<p>b. Lo segundo que debes tener presente (aunque sea obvio), es que las imágenes de que vayas a visualizar deben ser de tipo esféricas, que no sean planas, ya que la librea lo que hace es como una especie de “estiramiento” de la misma y las acomoda al formato panorama; estas imágenes esféricas se ven extrañas en un visualizador de imágenes común, pero cuando las visualizas correctamente se ven muy bonitas.  Pero si no eres fotógrafo, o no sabes cómo tomar una foto esférica (como es mi caso) pues muy sencillo bájate una de internet, en mi caso use la de la siguiente dirección:<br />
<a href="http://www.pananoias.com/wp-content/gallery/equirectangulares/rocodromo.jpg">http://www.pananoias.com/wp-content/gallery/equirectangulares/rocodromo.jpg</a> y después de la descarga le cambie el tamaño a 1024&#215;512 pixeles. Eso lo hace muy fácil el editor de imágenes de Windows, no sé cómo se haría en Mac<br />
o Linux. De todas maneras al final del post te dejaré el código fuente del<br />
proyecto.</p>
<p>2. Con los archivos necesarios para el proyecto, ya podremos empezar a codificar lo que necesitamos del proyecto, para esto creamos un proyecto a tu necesidad y con el nombre que le desees dar, la versión, y si tiene la última versión del ADT para Eclipse podrás elegir el Theme:</p>
<p style="text-align: center;"><a href="http://androideity.com/wp-content/uploads/2012/11/imagen1.png"><img class="aligncenter size-medium wp-image-4216" style="margin-top: 20px; margin-bottom: 20px;" title="imagen1" src="http://androideity.com/wp-content/uploads/2012/11/imagen1-300x256.png" alt="" width="300" height="256" /></a></p>
<p>3. Con nuestro proyecto creado, lo siguiente será copiar los archivos que descargamos a nuestro proyecto, así que vamos a lugar en donde descargamos los archivos y aquel que se llama “libglues”, se descomprime y quedaría una carpeta llamada libs, la cual contiene las siguientes carpetas:</p>
<p style="text-align: center;"><a href="http://androideity.com/wp-content/uploads/2012/11/imagen2.png"><img class="aligncenter size-full wp-image-4217" style="margin-top: 20px; margin-bottom: 20px;" title="imagen2" src="http://androideity.com/wp-content/uploads/2012/11/imagen2.png" alt="" width="532" height="229" /></a></p>
<p>Estas carpetas que están dentro de la  llamada libs son las que debes copiar dentro de tu proyecto; también debes copiar dentro de tu carpeta libs la librería PanoramaGL_0.1.jar que también descargaste, así que tu proyecto debería ir quedando de la siguiente manera:</p>
<p style="text-align: center;"><a href="http://androideity.com/wp-content/uploads/2012/11/imagen3.png"><img class="aligncenter size-full wp-image-4218" style="margin-top: 20px; margin-bottom: 20px;" title="imagen3" src="http://androideity.com/wp-content/uploads/2012/11/imagen3.png" alt="" width="448" height="325" /></a></p>
<p>4. Con nuestros archivos ya dentro de las carpetas respectivas lo que debemos hacer es vincular la librería PanoramaGL_01.jar a nuestro proyecto; una forma de hacerlo es dando clic derecho sobre el proyecto, seleccionar la opción “Properties”, seguido seleccionas la opción “Java Build Path” y al costado derecho seleccionas la pestaña “Libraries”; seguido das clic en el botón “Add JARS..” y en la ventana que se abre debes elegir la librería PanoramaGL_0.1.jar y por último das clic en el botón “OK”. La imagen a continuación muestra cómo se debe ver antes de dar clic en “OK”, pero en el video que está al final de este post podrás ver los pasos de este punto con mayor detalle así como el resto de la construcción del proyecto.</p>
<p style="text-align: center;"><a href="http://androideity.com/wp-content/uploads/2012/11/imagen4.png"><img class="aligncenter size-full wp-image-4219" style="margin-top: 20px; margin-bottom: 20px;" title="imagen4" src="http://androideity.com/wp-content/uploads/2012/11/imagen4.png" alt="" width="448" height="283" /></a></p>
<p>5. Con los archivos necesarios dentro del proyecto, vamos a colocar a nuestras protagonistas, la fotos panorámicas o esféricas que queremos visualizar, como dije al inicio deben ser fotos esféricas, el enlace que les deje muestra la siguiente imagen:</p>
<p style="text-align: center;"><img class="aligncenter" style="margin-top: 20px; margin-bottom: 20px;" src="https://lh5.googleusercontent.com/OWMfVguDt6hyqaa1MWpEV5Cb_y9ofzKDFW2ECNVa6luqWcNMLRHWjP4w8EobhyIcqYoG62BFn7zK5dcljqfn4As9-K7fBz5D27XL67_Q5XuFKjwm6gc" alt="" width="500" height="250" /></p>
<p style="text-align: left;">Como pueden ver casi no se puede diferenciar claramente de qué se trata el lugar, pero cuando lo veamos implementados en nuestro proyecto van a ver lo bonito que queda; así que descargamos la imagen, le damos un tamaño máximo de 1024 pixeles y la guardamos en nuestra carpeta llamada “raw”, que si no la tienes creada la debes adicionar a tu proyecto dentro de la carpeta “res”, a mi imagen le di el nombre de rocodromo.jpeg, y así va quedando el proyecto:</p>
<p style="text-align: center;"><a href="http://androideity.com/wp-content/uploads/2012/11/imagen5.png"><img class="aligncenter size-full wp-image-4220" style="margin-top: 20px; margin-bottom: 20px;" title="imagen5" src="http://androideity.com/wp-content/uploads/2012/11/imagen5.png" alt="" width="422" height="336" /></a></p>
<p style="text-align: left;">6. Tenemos todos los archivos que necesitamos, ahora faltaría un poco de código para ver unas lindas imágenes panorámicas, así que abrimos nuestra clase que para nuestro caso la llamamos <em>PanoramaGL.java</em> y las cosas que debe tener son las siguientes:</p>
<p>a. Los <em>import</em> necesarios son los siguientes:</p>
<p><em>import com.panoramagl.PLImage;</em><br />
<em>import com.panoramagl.PLSphericalPanorama;</em><br />
<em>import com.panoramagl.PLView;</em><br />
<em>import com.panoramagl.utils.PLUtils;</em><br />
<em>import android.os.Bundle;</em></p>
<p>Aquellos que empiezan con “<em>panoramagl</em>” son aquellos que se refieren a la librería que previamente importamos, y que son necesarios para los objetos que crearemos a continuación.</p>
<p>b. Hacemos que nuestra clase extienda como <em>PLView</em> para heredar los elementos necesarios, así que nuestra clase seria <em>PanoramaGL.java extends PLView.</em></p>
<p>c. Creamos un objeto de tipo <em>PLSphericalPanorama</em> el cual llamamos panorama.</p>
<p>d. Modificamos el objeto panorama para que tome la imagen que tenemos guardada en la carpeta &#8220;<em>raw&#8221;</em>:</p>
<p><em>panorama.setImage(this.getCurrentGL(),</em><br />
<em>PLImage.imageWithBitmap(PLUtils.getBitmap(this, R.raw.rocodromo)));</em></p>
<p>e. Por último escribimos la línea de código para que la &#8220;<em>Activity&#8221;</em> creada tome la imagen y la muestre.</p>
<p>Quedando el código de la siguiente manera:</p>
<p style="text-align: center;"><a href="http://androideity.com/wp-content/uploads/2012/11/imagen6.png"><img class="aligncenter size-full wp-image-4221" style="margin-top: 20px; margin-bottom: 20px;" title="imagen6" src="http://androideity.com/wp-content/uploads/2012/11/imagen6.png" alt="" width="640" height="254" /></a></p>
<p style="text-align: left;">Y así con este sencillo y corto código ya tenemos nuestra imagen cargada en nuestros proyecto, aquí una imagen que muestra cómo se inicia cuando el proyecto comienza:</p>
<p style="text-align: center;"><a href="http://androideity.com/wp-content/uploads/2012/11/imagen7.png"><img class="aligncenter size-full wp-image-4222" style="margin-top: 20px; margin-bottom: 20px;" title="imagen7" src="http://androideity.com/wp-content/uploads/2012/11/imagen7.png" alt="" width="364" height="336" /></a></p>
<p style="text-align: left;">Pero cómo lo bonito es verlo en vivo, a continuación te dejo un video en donde se muestra paso a paso la creación del proyecto y se puede ver cómo funciona en un dispositivo real:</p>
<p><iframe width="620" height="465" src="http://www.youtube.com/embed/videoseries?list=UUcOdo8mfXzKvvWHJwKHFjvA" frameborder="0" allowfullscreen></iframe></p>
<p style="text-align: left;"><strong>Nota:</strong>  Si detectas algún error en el código, en la explicación, escrito o en el video, por favor escríbenos y con mucho gusto la corregimos. Agradecemos tu ayuda.<br />
<strong>Nota 2:</strong> El proyecto queda alojado en GitHub , por lo tanto solo tendrás que descargar el proyecto y verificar si tienes alguna duda. Abajo te dejo el enlace directo para la descarga.</p>
<p style="text-align: center;"><a title="Descargar Codigo" href="https://github.com/Androideity/TutorialPanoramaGL" target="_blank"><img class="aligncenter size-full wp-image-4185" style="margin-top: 20px; margin-bottom: 20px;" title="GitHub1" src="http://androideity.com/wp-content/uploads/2012/10/GitHub11.png" alt="" width="265" height="154" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://androideity.com/2012/11/20/uso-de-la-libreria-panoramagl-en-android-usando-eclipse/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Action Bar Android usando Eclipse</title>
		<link>http://androideity.com/2012/10/22/action-bar-android-usando-eclipse/#utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=action-bar-android-usando-eclipse</link>
		<comments>http://androideity.com/2012/10/22/action-bar-android-usando-eclipse/#comments</comments>
		<pubDate>Tue, 23 Oct 2012 03:02:00 +0000</pubDate>
		<dc:creator>jaime</dc:creator>
				<category><![CDATA[Programación]]></category>
		<category><![CDATA[Action Bar]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[eclipse]]></category>
		<category><![CDATA[programacion]]></category>

		<guid isPermaLink="false">http://androideity.com/?p=4166</guid>
		<description><![CDATA[<a href="http://androideity.com/2012/10/22/action-bar-android-usando-eclipse/"><img align="left" hspace="5" width="100" height="100" src="http://androideity.com/wp-content/uploads/2012/10/Action-Bar-Android-1-150x150.jpg" class="alignleft wp-post-image tfe" alt="" title="Action Bar Android 1" /></a>Twitter: @JaimeYesidLeon En repetidas ocasiones me han dicho que las TabActivity que explicamos en 2 artículos anteriores, Pestañas en Android usando Eclipse y Pestañas en Android usando Eclipse segunda Parte están obsoletas en las versiones 3.0 de Android en adelante, &#8230; <a href="http://androideity.com/2012/10/22/action-bar-android-usando-eclipse/">Sigue leyendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><a href="https://twitter.com/#!/JaimeYesidLeon" target="_blank"><span style="color: #3399ff;"><strong>Twitter: @JaimeYesidLeon</strong></span></a></p>
<p style="text-align: center;"><a href="http://androideity.com/wp-content/uploads/2012/10/Action-Bar-Android-1.jpg"><img class="aligncenter  wp-image-4167" style="margin-top: 20px; margin-bottom: 20px;" title="Action Bar Android 1" src="http://androideity.com/wp-content/uploads/2012/10/Action-Bar-Android-1.jpg" alt="" width="637" height="480" /></a></p>
<p style="text-align: left;">En repetidas ocasiones me han dicho que las TabActivity que explicamos en 2 artículos anteriores, <a href="http://androideity.com/2012/02/13/pestanas-en-android-usando-eclipse/">Pestañas en Android usando Eclipse</a> y <a href="http://androideity.com/2012/06/18/pestanas-en-android-usando-eclipse-segunda-parte/">Pestañas en Android usando Eclipse segunda Parte</a> están obsoletas en las versiones 3.0 de Android en adelante, y tienen razón, pero si Android hace esto es porque quiere que las aplicaciones que desarrollemos sean cada vez más funcionales y estéticamente más agradables para los usuarios. Es por eso que hoy les traigo un tutorial en el cual podremos ver el Action Bar que nos ofrece Android para nuestros desarrollos.</p>
<p><span id="more-4166"></span>Los desarrolladores de aplicaciones en Android cuentan con varios patrones de diseño que proporciona Google para que sus apps sean agradables, fácilmente entendibles y lo mayormente intuitivas posible, es por eso que los recursos con los que se contaban en versiones anteriores, van siendo obsoletas o no más soportadas, cosa que se agradece por parte de nosotros lo que desarrollamos apps en Android; pongámoslo asíi de fácil, imagina que tu eres fabricante de ropa, y sigues haciendo los mismos pantalones bota campana, camisas de solapas gigantes  y zapatos doble piso o suecos que fueron furor en los años 70, pues muy seguramente nadie te va a comprar la ropa a menos que vayan a comprar un disfraz para el dia de Halloween; así que pasemos a usar los recursos que nos recomiendan desde la casa de Android.</p>
<p style="text-align: center;"><a href="http://androideity.com/wp-content/uploads/2012/10/Action-Bar-Android-2.jpg"><img class="aligncenter  wp-image-4168" style="margin-top: 20px; margin-bottom: 20px;" title="Action Bar Android 2" src="http://androideity.com/wp-content/uploads/2012/10/Action-Bar-Android-2.jpg" alt="" width="341" height="336" /></a></p>
<p> Las aplicaciones no se pueden quedar como inicialmente fueron concebidas, como diseñador de apps debes estar muy pendiente de las nuevas tendencias en el diseño, “debes estar a la moda” en cuanto a funcionalidad y esteticidad se trata, así que hoy te traemos la tendencia en el diseño de las aplicaciones, en donde en la misma pantalla tienes diferentes botones que con su imagen nos dan una idea de lo que son y para lo que sirven, un ejemplo de estas aplicaciones son las de Youtube, Twitter, Instagram, Facebook y muchas mas:</p>
<p style="text-align: center;"><a href="http://androideity.com/wp-content/uploads/2012/10/Action-Bar-Android-3.jpg"><img class="aligncenter  wp-image-4169" style="margin-top: 20px; margin-bottom: 20px;" title="Action Bar Android 3" src="http://androideity.com/wp-content/uploads/2012/10/Action-Bar-Android-3.jpg" alt="" width="448" height="188" /></a></p>
<p>Podemos ver que las apps más populares para Android usar ActionBar como herramienta de acceso a sus diferentes opciones de uso, así que hoy vamos a ver lo sencillo que es el uso de esta herramienta en nuestra aplicaciones, pero como siempre te decimos, el mejor sitio para que consultes sobre este y cualquier tema de desarrollo es la página oficial de desarrolladores de Android, y el enlace que habla sobre ActionBar es el siguiente: <a href="http://developer.android.com/guide/topics/ui/actionbar.html">ActionBar Android</a> al cual te remitimos para que lo estudies y encuentres toda la información que no te podemos hacer llegar, nosotros te damos un acercamiento y un ejemplo del recurso, pero si quieres profundizar más en este tema, ve directamente a la fuente.</p>
<p style="text-align: center;"><a href="http://androideity.com/wp-content/uploads/2012/10/Action-Bar-Android-4.jpg"><img class="aligncenter  wp-image-4170" style="margin-top: 20px; margin-bottom: 20px;" title="Action Bar Android 4" src="http://androideity.com/wp-content/uploads/2012/10/Action-Bar-Android-4.jpg" alt="" width="448" height="300" /></a></p>
<p>Así que si nada más que hablar, vamos a empezar con el ejemplo de uso en el cual mostraremos como se usa el ActionBar, como crear un ítem dentro de la barra, como saber cuando fue pulsado el item respectivo y como acceder a nuestro boton de Home, no sin antes dejar claro que el proyecto funciona para versiones de Android 3.0 y superior, si deseas usar este recurso en versiones menores, debes importar la librería de compatibilidad, cosas que si es necesario lo explicaremos en otro tutorial, por ahora empecemos con el tutorial:</p>
<p>1. Creamos nuestro proyecto al cual llamaremos “TutorialActionBar” y en este caso usaremos la versión 4.0 y que soporte hasta la versión 3.1.</p>
<p style="text-align: center;"><a href="http://androideity.com/wp-content/uploads/2012/10/Action-Bar-Android-5.jpg"><img class="aligncenter  wp-image-4171" style="margin-top: 20px; margin-bottom: 20px;" title="Action Bar Android 5" src="http://androideity.com/wp-content/uploads/2012/10/Action-Bar-Android-5.jpg" alt="" width="367" height="336" /></a></p>
<p>2. Ya creado nuestro proyecto, le damos un nombre a nuestra Activity principal y a nuestro layout, que en este caso le daremos el nombre de ActionBarActivity y al layout el nombre de main, como te muestro a continuación:</p>
<p style="text-align: center;"><a href="http://androideity.com/wp-content/uploads/2012/10/Action-Bar-Android-6.jpg"><img class="aligncenter  wp-image-4172" style="margin-top: 20px; margin-bottom: 20px;" title="Action Bar Android 6" src="http://androideity.com/wp-content/uploads/2012/10/Action-Bar-Android-6.jpg" alt="" width="366" height="336" /></a></p>
<p>3. Cuando creamos nuestro proyecto, empezamos a codificar nuestra Activity, vamos a sobreescribir un método de esta clase llamado onCreateOptionsMenu que sirve para crear nuestro menú y que recibe como parámetro un objeto de tipo Menu, y dentro de este método llamamos a un método que llamamos CreaMenu y le pasamos el objeto menu, quedando el código de la siguiente manera:</p>
<p style="text-align: center;"><a href="http://androideity.com/wp-content/uploads/2012/10/Action-Bar-Android-7.jpg"><img class="aligncenter  wp-image-4173" style="margin-top: 20px; margin-bottom: 20px;" title="Action Bar Android 7" src="http://androideity.com/wp-content/uploads/2012/10/Action-Bar-Android-7.jpg" alt="" width="443" height="336" /></a></p>
<p>4. El método que llamamos CreaMenu y el cual recibe un objeto de tipo Menu crea cada uno de los ítems que se mostrarán en nuestro ActionBar; en nuestro caso vamos a crear 5 ítems de los cuales los 3 primeros van a tener un icono que los identificará y los otros 2 solo tendrán texto. Para crear un ítem lo hacemos utilizando un objeto de tipo MenuItem y para agregarlo utilizamos el método add, que recibe tres parámetros: el Id, el orden, y el nombre que va a tener cada item.<br />
Por último para cada item que creamos, llamamos al método setIcon para indicarle la imagen que utilizará el item. Además debemos llamar al método setShowAsAction con la constante SHOW_AS_ACTION_IF_ROOM para indicar que vamos a usar este ítem como un elemento interactivo el cual vamos a pulsar y usar para hacer alguna acción; así que el código de este método es el siguiente:</p>
<p style="text-align: center;"><a href="http://androideity.com/wp-content/uploads/2012/10/Action-Bar-Android-8.jpg"><img class="aligncenter  wp-image-4174" style="margin-top: 20px; margin-bottom: 20px;" title="Action Bar Android 8" src="http://androideity.com/wp-content/uploads/2012/10/Action-Bar-Android-8.jpg" alt="" width="382" height="336" /></a></p>
<p> Cuando llamamos al método setIcon, seleccionamos las imágenes que van a ir en cada uno de los ítems, para este caso elegí 3, los cuales se llaman calendar, lock y question y deben ir guardados en la carpeta res/drawable,como se ve en la siguiente imagen:</p>
<p style="text-align: center;"><a href="http://androideity.com/wp-content/uploads/2012/10/Action-Bar-Android-9.jpg"><img class="aligncenter size-full wp-image-4175" style="margin-top: 20px; margin-bottom: 20px;" title="Action Bar Android 9" src="http://androideity.com/wp-content/uploads/2012/10/Action-Bar-Android-9.jpg" alt="" width="293" height="134" /></a></p>
<p> 5. Como ya creamos nuestros items, debemos crear un método para que cuando estos sean pulsados sepamos cual fue, para hacer esto debemos sobreescribir el método onOptionsItemSelected que recibe como parámetro un objeto de tipo MenuItem:</p>
<p style="text-align: center;"><a href="http://androideity.com/wp-content/uploads/2012/10/Action-Bar-Android-10.jpg"><img class="aligncenter  wp-image-4176" style="margin-top: 20px; margin-bottom: 20px;" title="Action Bar Android 10" src="http://androideity.com/wp-content/uploads/2012/10/Action-Bar-Android-10.jpg" alt="" width="547" height="480" /></a></p>
<p>Dentro de este método vamos a llamar un método llamado MenuSelecciona y que recibe el objeto MenuItem, y que devuelve una variable de tipo boolean para saber si fue consumida la acción de cada item creado. Dentro de este método definiremos las líneas que nos ayudarán a mostrar una alerta de tipo Toast que indicará que fue pulsado ese ítem. Es aquí dónde deberás sustituir el código que te permita realizar las acciones que necesites que haga tu aplicación. El código quedaría de la siguiente manera:</p>
<p style="text-align: center;"><a href="http://androideity.com/wp-content/uploads/2012/10/Action-Bar-Android-11.jpg"><img class="aligncenter size-full wp-image-4177" style="margin-top: 20px; margin-bottom: 20px;" title="Action Bar Android 11" src="http://androideity.com/wp-content/uploads/2012/10/Action-Bar-Android-11.jpg" alt="" width="640" height="381" /></a></p>
<p> Hasta este paso ya podremos terminar con nuestro código, pero como mencioné en la introducción al tutorial, vamos a aprender cómo se utiliza el elemento Home del ActionBar. Pero, ¿qué es el botón Home? Pues es aquel que siempre está en la barra del título pero que no se le daba ningún uso, si has usado la app de Youtube en Android es aquel que se activa cuando pulsas sobre el logo de Youtube:</p>
<p style="text-align: center;"><a href="http://androideity.com/wp-content/uploads/2012/10/Action-Bar-Android-12.jpg"><img class="aligncenter  wp-image-4178" style="margin-top: 20px; margin-bottom: 20px;" title="Action Bar Android 12" src="http://androideity.com/wp-content/uploads/2012/10/Action-Bar-Android-12.jpg" alt="" width="269" height="448" /></a></p>
<p>Para activarlo lo que vamos a hacer primero es crear un objeto de la clase ActionBar dentro del método onCreate de la Activity principal y llamamos al método setDisplayHomeAsUpEnabled y lo configuramos a true, para que se active este botón, quedando el código de la siguiente manera:</p>
<p style="text-align: center;"><a href="http://androideity.com/wp-content/uploads/2012/10/Action-Bar-Android-13.jpg"><img class="aligncenter  wp-image-4179" style="margin-top: 20px; margin-bottom: 20px;" title="Action Bar Android 13" src="http://androideity.com/wp-content/uploads/2012/10/Action-Bar-Android-13.jpg" alt="" width="448" height="308" /></a></p>
<p> También necesitaremos saber cuando el botón Home sea pulsado, así que dentro de nuestro método MenuSelecciona, adicionamos un nuevo case dentro del switch para saber cuando sea pulsado el Home, así que el método quedaría de la siguiente manera:</p>
<p style="text-align: center;"><a href="http://androideity.com/wp-content/uploads/2012/10/Action-Bar-Android-14.jpg"><img class="aligncenter  wp-image-4180" style="margin-top: 20px; margin-bottom: 20px;" title="Action Bar Android 14" src="http://androideity.com/wp-content/uploads/2012/10/Action-Bar-Android-14.jpg" alt="" width="448" height="317" /></a></p>
<p> Con esto quedaría listo todo el código que necesitamos para manejar nuestro ActionBar, si corremos el código y pulsamos sobre cada uno de nuestros items se vería cómo se ve en la siguiente imagen:</p>
<p style="text-align: center;"><a href="http://androideity.com/wp-content/uploads/2012/10/Action-Bar-Android-15.jpg"><img class="aligncenter  wp-image-4181" style="margin-top: 20px; margin-bottom: 20px;" title="Action Bar Android 15" src="http://androideity.com/wp-content/uploads/2012/10/Action-Bar-Android-15.jpg" alt="" width="366" height="336" /></a></p>
<p> Y si te preguntas, ¿en dónde rayos están los otros item que agregaste? Como podrás observar en tu ejemplo únicamente están visibles 2 de los 5 items y el item de Home (la lupita con la fecha). Pues la respuesta es que mires la siguiente imagen y obtengas la respuesta:</p>
<p style="text-align: center;"><a href="http://androideity.com/wp-content/uploads/2012/10/Action-Bar-Android-16.jpg"><img class="aligncenter  wp-image-4182" style="margin-top: 20px; margin-bottom: 20px;" title="Action Bar Android 16" src="http://androideity.com/wp-content/uploads/2012/10/Action-Bar-Android-16.jpg" alt="" width="367" height="336" /></a></p>
<p> Ah ok, entonces cuando la pantalla está en modo retrato solo muestra unos ítem y cuando está en modo paisaje muestra lo demás porque la pantalla tiene más espacio disponible, ¿pero en dónde está el quinto item que agregamos? ¿y si mi aplicación sólo estará configurada para mostrarse en modo retrato que pasa con los demás ítems? Ok, entonces te invito a que mires la siguiente imagen y saques la respuesta:</p>
<p style="text-align: center;"><a href="http://androideity.com/wp-content/uploads/2012/10/Action-Bar-Android-17.jpg"><img class="aligncenter  wp-image-4183" style="margin-top: 20px; margin-bottom: 20px;" title="Action Bar Android 17" src="http://androideity.com/wp-content/uploads/2012/10/Action-Bar-Android-17.jpg" alt="" width="362" height="336" /></a></p>
<p>Lo que pasa es que como creamos objetos de tipo Menu, cuando no son mostrados están ocultos los item que no pueden ser mostrados, pero podrás ser activados con el botón Menu.</p>
<p>Bueno como siempre hago en mis tutoriales un video del paso a paso del proyecto, y cómo está vez no será la excepción, te dejo abajo el video que muestra cómo manejar el ActionBar en Android usando eclipse para aquellos que prefieren ver todos los detalles, y además como en Androideity se ha venido haciendo desde hace unos meses, todos los proyectos los dejamos en GitHub para que los descargues, y puedas revisar algún error que te haya salido a lo largo del seguimiento del tutorial. Con esto ya tienes todos los recursos para trabajar, así que dale.</p>
<p><iframe width="620" height="349" src="http://www.youtube.com/embed/gvZ-Vh0g3HI?fs=1&#038;feature=oembed" frameborder="0" allowfullscreen></iframe></p>
<p>Por ahora no es más pero tampoco menos, espero que te sirva este aporte a tus proyectos Android, y si tienes dudas con mucho gusto déjalas abajo en los comentarios que tan pronto como pueda las contestaré, aunque si puedes darme una manito y avisar por twitter que dejaste un comentario te lo agradezco.</p>
<p><strong>Nota:</strong> Si detectas algún error en el código, en la explicación, escrito o en el video, por favor escríbenos y con mucho gusto la corregimos. Agradecemos tu ayuda.<br />
<strong>Nota 2:</strong> A partir de esta entrega dejaremos todo el código de los proyectos en un repositorio alojado en GitHub , por lo tanto solo tendrás que descargar el proyecto y verificar si tienes alguna duda. Abajo te dejo el enlace directo para la descarga.</p>
<p>&nbsp;</p>
<p style="text-align: center;"><span style="font-size: large;"><span style="color: #99cc00;"><strong>Descarga el proyecto:</strong></span></span><br />
<a href="https://github.com/Androideity/Tutorial_ActionBar" target="_blank"><img class="aligncenter size-full wp-image-4185" style="margin-top: 20px; margin-bottom: 20px;" title="GitHub1" src="http://androideity.com/wp-content/uploads/2012/10/GitHub11.png" alt="" width="265" height="154" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://androideity.com/2012/10/22/action-bar-android-usando-eclipse/feed/</wfw:commentRss>
		<slash:comments>27</slash:comments>
		</item>
		<item>
		<title>Envio de Tweets  desde tu aplicación usando la libreria Twitter4J y OAuth</title>
		<link>http://androideity.com/2012/10/20/envio-de-tweets-desde-tu-aplicacion-usando-la-libreria-twitter4j-y-oauth/#utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=envio-de-tweets-desde-tu-aplicacion-usando-la-libreria-twitter4j-y-oauth</link>
		<comments>http://androideity.com/2012/10/20/envio-de-tweets-desde-tu-aplicacion-usando-la-libreria-twitter4j-y-oauth/#comments</comments>
		<pubDate>Sat, 20 Oct 2012 19:48:38 +0000</pubDate>
		<dc:creator>sebastiancipolat</dc:creator>
				<category><![CDATA[Aplicaciones]]></category>
		<category><![CDATA[Diseño]]></category>
		<category><![CDATA[Programación]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[conceptos básicos]]></category>
		<category><![CDATA[conociendo Android]]></category>
		<category><![CDATA[desarrollo en android]]></category>
		<category><![CDATA[Trucos]]></category>
		<category><![CDATA[tutorial]]></category>
		<category><![CDATA[twitter]]></category>

		<guid isPermaLink="false">http://androideity.com/?p=4097</guid>
		<description><![CDATA[<a href="http://androideity.com/2012/10/20/envio-de-tweets-desde-tu-aplicacion-usando-la-libreria-twitter4j-y-oauth/"><img align="left" hspace="5" width="100" height="100" src="http://androideity.com/wp-content/uploads/2012/10/tweet-post-150x150.png" class="alignleft wp-post-image tfe" alt="" title="tweet post" /></a>&#160; Hola amigos de androideity el dia de hoy les mostrare como poder enviar un tweet desde tu propia aplicacion, seguramente habran visto o usado muchas aplicaciones que permiten realizar esto como la de nike+ running , endondomondo, etc. al &#8230; <a href="http://androideity.com/2012/10/20/envio-de-tweets-desde-tu-aplicacion-usando-la-libreria-twitter4j-y-oauth/">Sigue leyendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><a href="http://androideity.com/wp-content/uploads/2012/10/tweet-post.png"><img class="aligncenter size-full wp-image-4098" title="tweet post" src="http://androideity.com/wp-content/uploads/2012/10/tweet-post.png" alt="" width="578" height="280" /></a></p>
<p>&nbsp;</p>
<p>Hola amigos de androideity el dia de hoy les mostrare como poder enviar un tweet desde tu propia aplicacion, seguramente habran visto o usado muchas aplicaciones que permiten realizar esto como la de nike+ running , endondomondo, etc. al final del tutorial tu podras hacer lo mismo.</p>
<p><span id="more-4097"></span></p>
<p>Twitter posee una <a href="https://dev.twitter.com/docs"> API REST</a> mediante la cual interactuaremos con el, también pone ofrece un <a href="https://dev.twitter.com/docs/twitter-libraries">listado </a>de librerías para diversos lenguajes para poder utilizar el api de una manera sencilla, actualmente el api se encuentra en la version 1.1 la version 1.0 dejara de funcionar en marzo del 2013</p>
<p>Lo que nosotros vamos a realizar puede hacerse directamente desde el api sin utilizar ninguna librería pero esto implica tener un fuerte conocimiento sobre esta, para poder facilitar las cosas utilizaremos una librería orientada a java llamada <a href="http://twitter4j.org/en/index.jsp">Twitter4J </a>también es compatible con Android y permite compatibilidad con OAuth, recomiendo que le den una lectura rapida a la documentacion de esta libreria.</p>
<p>Twitter utiliza <a href="http://oauth.net/" target="_blank">OAuth</a> para proveerle acceso al api a las aplicaciones externas, este mecanismo de autenticacion nos permite interactuar sin la necesidad de comprometer los datos del usuario como el usuario y clave.</p>
<p>mas info sobre  OAuth: <a href="http://es.wikipedia.org/wiki/OAuth">http://es.wikipedia.org/wiki/OAuth</a></p>
<p>tambien ofrece algunos <a href="https://dev.twitter.com/docs/auth/oauth/single-user-with-examples">ejemplos </a>sobre como acceder usando este protocolo. <a href="https://dev.twitter.com/docs/auth/using-oauth">https://dev.twitter.com/docs/auth/using-oauth</a></p>
<p>Antes de empezar a ver el código necesitamos registrar nuestra aplicación para que pueda interactuar con el, podremos hacerlo desde <span style="color: #0000ee;"><span style="text-decoration: underline;"><a href="https://dev.twitter.com/apps/new">aquí</a> </span><span style="color: #000000;">una vez ya logueados veremos una pantalla como esta:</span></span></p>
<p style="text-align: center;"><a href="http://androideity.com/wp-content/uploads/2012/10/captura_createapp.png"><img class="aligncenter  wp-image-4114" title="captura_createapp" src="http://androideity.com/wp-content/uploads/2012/10/captura_createapp.png" alt="" width="799" height="489" /></a></p>
<p>&nbsp;</p>
<p>Yo le puse de  nombre a mi aplicacion: <span style="color: #000080;"><em>sebas_tweet_test_android_app</em></span> <strong>ustedes deben ingresar otro diferente.</strong></p>
<p>El formulario es muy simple de completar pero hay 2 que pueden confundir.</p>
<p><strong><span style="color: #99cc00;">Website</span></strong><span style="color: #99cc00;">:</span> deberán colocar la dirección de la pagina web de la aplicación en donde el usuario podria descargarla, aunque si no tienen ninguna web pueden escribir lo que deseen no importa si existe o no.</p>
<p><strong><span style="color: #99cc00;">Callback URL:</span></strong> Aqui pueden ingresar la direccion web a la cual nos retornara una vez de que la autenticacion con twitter alla sido exitosa. se puede dejar en blanco tambien.</p>
<p>una vez que halla completado el captcha y aceptado los termino clicken en &#8220;Create your Twitter application&#8221;.</p>
<p>Luego veran esta pantalla:</p>
<p style="text-align: center;"> <a href="http://androideity.com/wp-content/uploads/2012/10/ok_app1.png"><img class="aligncenter  wp-image-4122" title="ok_app" src="http://androideity.com/wp-content/uploads/2012/10/ok_app1.png" alt="" width="602" height="593" /></a></p>
<p style="text-align: left;">Como veran al comienzo muestra el nombre de la aplicación que registramos, la descripcion y la url que ingresamos en el campo website.</p>
<p style="text-align: left;">Deben ir a la solapa settings , veran que pueden moficar todos los datos que ingresaron antes, tambien pueden cambiar el icono de la aplicación deben dirigirse</p>
<p style="text-align: left;">a la sección Application Type y seleccionar <strong><span style="color: #99cc00;">Read and Write </span></strong><span><span>ya que la aplicación no sera de solo lectura, una vez actualizado los datos deben volver a la solapa details y tomar nota de los sig. valores que utilizaremos en la aplicacion, &#8220;Consumer key&#8221;,&#8221;Consumer secret&#8221;. Estas claves son las que usara nuestra aplicación de android para autenticarse con twitter. Luego terminaremos la registracion clickeando en &#8220;</span></span>Create my access token&#8221;, con esto terminamos la parte del registro en twitter.</p>
<h3 style="text-align: left;"><span style="color: #99cc00;"><strong>Ahora si manos a la obra.</strong></span></h3>
<p style="text-align: left;">Como siempre tendran el codigo disponible en el repositorio en github al final.</p>
<p style="text-align: left;">Ahora es el turno de descargar la librería Twitter4J que les comente al principio, al momento en que he escrito el tutorial la ultima version era la 2.2.6</p>
<p style="text-align: left;">para android pueden descargarla de <a href="http://twitter4j.org/en/twitter4j-android-2.2.6.zip">aqui</a>.(igual en el repositorio estara el proyecto de eclipse con la libreria ya incluida).</p>
<p style="text-align: left;">de lo que descargaron el archivo que deben buscar esta dentro de la carpeta lib llamado &#8220;twitter4j-core-android-2.2.6.jar&#8221;.</p>
<p style="text-align: left;">javadoc de la libreria <a href="http://twitter4j.org/en/javadoc/index.html">aqui</a>.</p>
<p style="text-align: left;"><span style="color: #ff9900;">La version de android que he utlizado para hacer este tutorial es la 2.3.3.</span></p>
<p style="text-align: left;">he llamado al proyecto &#8220;Twitter_testapp&#8221;, si no van a usar el codigo del repositorio recuerden incluir la libreria antes de continuar</p>
<p style="text-align: left;">La estructura del proyecto es la siguiente, como veran luego de incluir la libreria deberia de quedar asi.</p>
<p style="text-align: center;"><a href="http://androideity.com/wp-content/uploads/2012/10/proyecto.png"><img class="aligncenter  wp-image-4124" title="proyecto" src="http://androideity.com/wp-content/uploads/2012/10/proyecto.png" alt="" width="282" height="674" /></a></p>
<p>&nbsp;</p>
<p>La aplicación sera muy simple, basicamente hara lo siguiente:</p>
<p>1- Al arrancar buscara en el shared preferences si existe el registro con las claves obtenidas de twitter, en caso de que NO abrira un webview que la primer vez que corramos la app nos pedira loguearnos en twitter para habilitar que la app pueda utilizar nuestra cuenta de twitter, luego descargara unas claves que guardara en el shared preferences para que la porxima vez que arraque pued &#8216;loguearse&#8217; automaticamente.</p>
<p>2-Luego podremos escribir un tweet, al intentar enviarlo volvera a realizar la validacion previa, luego enviara el texto que hallamos escrito, en caso de sea exitoso el borde de la imagen del medio sera de color verde, si ocurrio algun fallo sera de color rojo.</p>
<p>3-Tambien hay un boton de Logoff que borrara los datos almacenados en el sharedpreferences.</p>
<p>Se vera de la siguiente forma:</p>
<p><a href="http://androideity.com/wp-content/uploads/2012/10/app.png"><img class="aligncenter size-medium wp-image-4127" title="app" src="http://androideity.com/wp-content/uploads/2012/10/app-225x300.png" alt="" width="225" height="300" /></a></p>
<p>&nbsp;</p>
<p>Cuando el envio del tweet sea exitoso se vera de esta forma, podran observar que el borde la imagen del centro cambia de color.</p>
<p style="text-align: center;"><a href="http://androideity.com/wp-content/uploads/2012/10/ok.png"><img class=" wp-image-4156 aligncenter" title="ok" src="http://androideity.com/wp-content/uploads/2012/10/ok-225x300.png" alt="" width="203" height="270" /></a></p>
<p>En caso de error:</p>
<p><a href="http://androideity.com/wp-content/uploads/2012/10/fail.png"><img class="aligncenter size-medium wp-image-4157" title="fail" src="http://androideity.com/wp-content/uploads/2012/10/fail-225x300.png" alt="" width="225" height="300" /></a></p>
<p>&nbsp;</p>
<p>He creado dos clases auxiliares para facilitar el manejo del envio de tweets y el acceso al shared preferences ademas esta pueden ser reutilizadas para otros proyectos.</p>
<p>He creado una clase llamada &#8220;Constants_Settings&#8221;</p>
<p>Aquí he definido algunas constantes que usaremos en toda la app.</p>
<div></div>
<p style="text-align: center;"><a href="http://androideity.com/wp-content/uploads/2012/10/constantes.png"><img class="aligncenter  wp-image-4134" title="constantes" src="http://androideity.com/wp-content/uploads/2012/10/constantes.png" alt="" width="601" height="277" /></a></p>
<p><strong><span style="color: #ff9900;">Deben modificar los siguientes valores por los obtenidos cuando registramos la aplicación en twitter.</span></strong></p>
<p>OAUTH_CONSUMER_KEY =&#8221;<em>Consumer key</em>&#8221;</p>
<p>OAUTH_CONSUMER_KEY_SECRET=&#8221;<em>Consumer key Secret</em>&#8221;</p>
<p><em>En esta ocasion no hablare sobre los layouts y el archivo manifest ya que son muy simples, los pueden ver directamente en el <a href="https://github.com/Androideity/Envio-de-Tweets-desde-tu-aplicaci-n-usando-la-libreria-Twitter4J-y-OAuth/tree/master/Twitter_testapp/res/layout">repositorio</a>.</em></p>
<p>Veremos primero la clase principal MainActivity.java leer comentarios en cada caso.</p>
<p style="text-align: center;"><a href="http://androideity.com/wp-content/uploads/2012/10/codigomain1.png"><img class="aligncenter  wp-image-4139" title="codigomain" src="http://androideity.com/wp-content/uploads/2012/10/codigomain1.png" alt="" width="786" height="1883" /></a></p>
<p>&nbsp;</p>
<p>Les comentare basicamente lo que hacemosen esta clase:</p>
<p>En la linea 41 se crea una instancia a la clase TweetHelper a la cual le pasamos el context como parametro.</p>
<p>Luego en la 45 llamamos al metodo <strong>validar_login()</strong> que lo que hace es verificar si en el telefono estan almacenados los access token y acces token secret  en caso de que no llama al webview lineas 93 a 98</p>
<p>Intent i = new Intent(MainActivity.this, TwitterWebActivity.class);<br />
i.putExtra(&#8220;URL&#8221;, tweet_hlp.get_AuthenticationURL());</p>
<p>en este pasa como parámetro la autenticationURL que seria la url callback que comente mas adelante , cuando el webview termina nos retorna el <span style="color: #99cc00;"><strong>oauth_verifier</strong><span style="color: #000000;"> del cual  en la linea 116 en onActivityResult </span></span></p>
<p><span style="color: #99cc00;"><span style="color: #000000;">tweet_hlp.Store_OAuth_verifier(oauthVerifier);</span></span></p>
<p>lo almacenamos en el telefono.</p>
<p>Luego tenemos el botón de envio de Tweets que volvera a llamar <strong>validar_login()</strong> descripto recien.</p>
<p>Tambien obtenemos el texto del campo de text</p>
<p>String texto = tweet_txt.getText().toString();</p>
<p>Luego hacemos uso del metodo Send_Tweet que retorna un boolean sobre si se envio o no el tweet</p>
<p>boolean twt_snd_status = tweet_hlp.Send_Tweet(texto);</p>
<p>Luego en base a la  respuesta mostramos un Toast y cambiamos la imagen mediante</p>
<p>tweet_imgstatus(1);</p>
<p>Luego esta el otro Boton LogOff que borra el contenido guardado en sharedpreferences.</p>
<h3><span style="color: #99cc00;"><strong>Veamos rapidamente el webview  TwitterWebActivity.java</strong></span></h3>
<p style="text-align: center;"><a href="http://androideity.com/wp-content/uploads/2012/10/web.png"><img class="aligncenter  wp-image-4142" title="web" src="http://androideity.com/wp-content/uploads/2012/10/web.png" alt="" width="639" height="562" /></a></p>
<p> Como veran no es nada del otro mundo recibe por parámetro URL y lo muestra. Luego retorna &#8220;oauth_verifier&#8221; como les comente mas arriba.</p>
<p>Ahora es el turno de la clase que he creado para facilitar el uso de twitter dentro del paquete com.cipolat.twitter_testapp.lib</p>
<p><strong><span style="color: #99cc00;">TweetHelper.java</span></strong></p>
<p><strong></strong><span style="text-align: center;">Lean los comentarios para cada caso: </span></p>
<p style="text-align: center;"><a href="http://androideity.com/wp-content/uploads/2012/10/tweethlp.png"><img class="aligncenter  wp-image-4145" title="tweethlp" src="http://androideity.com/wp-content/uploads/2012/10/tweethlp.png" alt="" width="673" height="2509" /></a></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>Como veran el constructor recibe por parametro el context que es necesario para la clase  Shar_Pref_Helper, tambien instanciamos esta clase y le pasamos como parametro el nombre con el que se almacenara el registro en el shared preferences y el contexto.</p>
<p>También al principio de la clase creamos unas variables que tomaran los datos de la clase Constants_Settings.</p>
<p>Luego en la linea 42 mpezamos a crear objeto para interactuar con twitter</p>
<p>twitter = new TwitterFactory().getInstance();</p>
<p>En la linea 46 le asignamos las claves para la autenticacion usando OAuth,estos estan en la clase mencionada previamente</p>
<p>twitter.setOAuthConsumer(OAUTH_CONSUMER_KEY, OAUTH_CONSUMER_SECRET);</p>
<p>Para poder enviar los tweets usamos la función<strong><span style="color: #99cc00;"> Send_Tweet(String tweet_text)</span></strong> que recibe como parametro el text que queremos que envie, este retorna un valor booleano relacionado con el exito o no del emvio del tweet, esto es utilizado en la clase main para cambiar la imagen de estado.</p>
<p>Dentro Creamos el objeto configuracion necesario pasamos como parametros las claves consumer key and consumer Secret  y los accessToken y accessTokensecret para la autenticacion OAuth estos son extraidos del shared preferences por lo que antes de ejecutar esto es necesario realizar para verificar su existencia como hicimos anteriormente</p>
<p>Configuration conf = new ConfigurationBuilder()<br />
.setOAuthConsumerKey(OAUTH_CONSUMER_KEY)<br />
.setOAuthConsumerSecret(OAUTH_CONSUMER_SECRET)<br />
.setOAuthAccessToken(accessToken)<br />
.setOAuthAccessTokenSecret(accessTokenSecret).build();</p>
<p>Usamos lo seteado anteriormente para obtener una instancia para autenticacion OAuth.<br />
Creamos nuevamente objeto para acceder a twitter, (podria haberse utilizado el creado anteriormente) al cual le asigamos el objeto configuracion con las claves para la autenticacion con twitter.<br />
Twitter t = new TwitterFactory(conf).getInstance();</p>
<p>//Actualizamos estado, enviamos el twwet.<br />
t.updateStatus(tweet_text);</p>
<p>Esto esta dentro de un bloque try cath para determinar si se envio el tweet ya que puede surgir la excepcion TwitterException.</p>
<p>Luego esta clase tiene otras funciones como <strong><span style="color: #99cc00;">Store_OAuth_verifier(String OAuth) </span></strong><span><span>que recibe como parámetro<span style="color: #000000;"> oauthVerifier del cual hablamos antes.</span></span></span></p>
<p>con el parametro recibido retorna un AccessToken</p>
<p>AccessToken at=twitter.getOAuthAccessToken(mRequestToken, OAuth);</p>
<p>del usaremos los metodo getToken y getTokenSecret para grabar estos datos dentro del telefono ya que seran necesario para el envio del tweet como vimos antes.</p>
<p>shrpref.Write_String(TW_ACCTOKEN, at.getToken());<br />
shrpref.Write_String(TW_ACCTOKEN_SECRET, at.getTokenSecret());</p>
<p>Luego otro metodo  para comentar es <strong><span style="color: #99cc00;">verify_logindata()</span></strong><span style="color: #99cc00;"><span style="color: #000000;"> que retorna un valor booleano.</span></span></p>
<p>Basicamente accede al shared preferences y verifica si existen dentro del shared preferences los TW_ACCTOKEN_SECRET y TW_ACCTOKEN</p>
<p>(shrpref.isExist(TW_ACCTOKEN_SECRET en base al resultado devuelve el valor booleano.</p>
<p><strong><span style="color: #ff6600;"> Consideraciones al momento de enviar tweets:</span></strong></p>
<p>Como comente anteriormente a la hora de enviar un tweet o interactuar con twitter puede surgir la excepcion TwitterException recomiendo leer el <a href="http://twitter4j.org/en/javadoc/twitter4j/TwitterException.html">api</a> sobre esto.</p>
<p><strong><span style="color: #ff0000;">Deben tener en cuenta de que no pueden enviar un tweet en blanco y que no pueden enviar un mismo mensaje repetidas veces sin un tiempo de espera son las mismas consideraciones que tienen en cuenta cuando usan twitter.</span></strong></p>
<p>Los errores que muestra son de este tipo:</p>
<p><span style="color: #666699;">10-01 01:10:10.493: W/System.err(1630)<strong>: 403</strong>:The request is understood, but it has been refused. An accompanying error message will explain why. This code is used when requests are being denied due to update limits (https://support.twitter.com/articles/15364-about-twitter-limits-update-api-dm-and-following).</span></p>
<div> este era relacionado con el envió de un mismo mensaje uno seguidotras otro.</div>
<div>El mensaje incluye un codigo de error, el cual es el codigo devuelto por twitter, el listado de estos codigos de error se encuentra <a href="https://dev.twitter.com/docs/error-codes-responses">aqui</a>.</div>
<div></div>
<div>Por ultimo les comento rapidamente la clase para manejar el acceso al shared preferences:</div>
<div></div>
<div><a href="http://androideity.com/wp-content/uploads/2012/10/sharepref.png"><img class="aligncenter  wp-image-4152" title="sharepref" src="http://androideity.com/wp-content/uploads/2012/10/sharepref.png" alt="" width="517" height="770" /></a></div>
<div></div>
<div>Esta clase debe recibir como parametro el nombre del registro en el shared preferences y el contexto.</div>
<div>Tiene una funcion llamada isExist(String val) la cual en base al parametro pasado retorna un valor booleano</div>
<div>referido a la existencia o no de una clave con ese nombre.</div>
<div></div>
<div>Tambien poseee las funciones <strong><span style="color: #99cc00;">Get_stringfrom_shprf(String val)</span></strong> la cual retorna un String con el conetenido del parametro val sacado del Shared Preferences.</div>
<div></div>
<div><strong><span style="color: #99cc00;">Write_String(String clave, String valor)</span></strong> la cual escribe dentro del registro los valores que recibe.</div>
<div></div>
<div><strong><span style="color: #99cc00;">Remove_Value(String clave)</span></strong> Borra el valor que le pasemos como parametro.</div>
<div></div>
<div>Bien esto fue todo antes de terminar comparto con ustedes un vídeo donde pueden ver en funcionamiento la aplicación.</div>
<div></div>
<div><iframe src="http://www.youtube.com/embed/mulZrSPi1Os" frameborder="0" width="420" height="315"></iframe></div>
<div></div>
<div></div>
<div></div>
<div>Los invito a que accedan al repositorio <span style="color: #0000ff;">(haciendo click en la imagen debajo)</span> y prueben el codigo,</div>
<div>como veran no es muy complicado espero que les sea util.</div>
<div></div>
<div></div>
<div></div>
<div><a href="https://github.com/Androideity/Envio-de-Tweets-desde-tu-aplicaci-n-usando-la-libreria-Twitter4J-y-OAuth"><img class="aligncenter size-full wp-image-4155" title="GitHub1" src="http://androideity.com/wp-content/uploads/2012/10/GitHub1.png" alt="" width="265" height="154" /></a></div>
<div></div>
<div></div>
<div>Las siguientes paginas me  han servido como fuentes:</div>
<div><a href="http://nicolasfornaro.blogspot.com.ar/2012/02/twitter-desde-android-con-twitter4j.html" target="_blank">http://nicolasfornaro.<wbr>blogspot.com.ar/2012/02/<wbr>twitter-desde-android-con-<wbr>twitter4j.html</wbr></wbr></wbr></a></div>
<div>
<div><a href="http://es.wikipedia.org/wiki/OAuth" target="_blank">http://es.wikipedia.org/wiki/<wbr>OAuth</wbr></a></div>
<div><a href="http://androidforums.com/introductions/218621-twitter4j-oauth-android-simple.html" target="_blank">http://androidforums.com/<wbr>introductions/218621-<wbr>twitter4j-oauth-android-<wbr>simple.html</wbr></wbr></wbr></a></div>
<div><a href="http://www.android10.org/index.php/articleslibraries/291-twitter-integration-in-your-android-application" target="_blank">http://www.android10.org/<wbr>index.php/articleslibraries/<wbr>291-twitter-integration-in-<wbr>your-android-application</wbr></wbr></wbr></a></div>
<div><a href="http://francho.org/2010/01/09/jugando-con-java-y-el-api-de-twitter/" target="_blank">http://francho.org/2010/01/09/<wbr>jugando-con-java-y-el-api-de-<wbr>twitter/</wbr></wbr></a></div>
<div><a href="http://www.londatiga.net/it/how-to-post-twitter-status-from-android/" target="_blank">http://www.londatiga.net/it/<wbr>how-to-post-twitter-status-<wbr>from-android/</wbr></wbr></a></div>
<div><a href="http://www.androidsnippets.com/post-a-tweet-on-twitter" target="_blank">http://www.androidsnippets.<wbr>com/post-a-tweet-on-twitter</wbr></a></div>
</div>
<p>&nbsp;</p>
<p>Aclaro que no soy un experto en el uso de twitter con android, por lo que si alguno tiene mas conocimientos y considera que algo esta incorrecto sientase libre de usar el cuadro de comentarios como tambien si tienen alguna otra consulta o pregunta.<span style="color: #888888; text-align: center;"> </span></p>
<p>Esto fue todo por hoy, espero que les halla gustado, hasta la proxima.!</p>
<p>Sebastian</p>
<p>&nbsp;</p>
<h2 style="text-align: center;"><span style="color: #999999;"><strong style="color: #888888; text-align: center;">¿Te gustó este tutorial? ¡Compártelo!</strong></span></h2>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://androideity.com/2012/10/20/envio-de-tweets-desde-tu-aplicacion-usando-la-libreria-twitter4j-y-oauth/feed/</wfw:commentRss>
		<slash:comments>34</slash:comments>
		</item>
		<item>
		<title>Sockets en Android</title>
		<link>http://androideity.com/2012/08/05/sockets-en-android/#utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=sockets-en-android</link>
		<comments>http://androideity.com/2012/08/05/sockets-en-android/#comments</comments>
		<pubDate>Sun, 05 Aug 2012 22:13:37 +0000</pubDate>
		<dc:creator>sebastiancipolat</dc:creator>
				<category><![CDATA[Aplicaciones]]></category>
		<category><![CDATA[Diseño]]></category>
		<category><![CDATA[Programación]]></category>
		<category><![CDATA[activity]]></category>
		<category><![CDATA[android market]]></category>
		<category><![CDATA[Android sockets]]></category>
		<category><![CDATA[aplicaciones android]]></category>
		<category><![CDATA[aplicaciones móviles]]></category>
		<category><![CDATA[conceptos básicos]]></category>
		<category><![CDATA[conociendo Android]]></category>
		<category><![CDATA[cursos]]></category>
		<category><![CDATA[desarrollo en android]]></category>
		<category><![CDATA[primeros pasos en android]]></category>
		<category><![CDATA[tutorial]]></category>

		<guid isPermaLink="false">http://androideity.com/?p=4037</guid>
		<description><![CDATA[<a href="http://androideity.com/2012/08/05/sockets-en-android/"><img align="left" hspace="5" width="100" height="100" src="http://androideity.com/wp-content/uploads/2012/08/imagenposts-150x150.png" class="alignleft wp-post-image tfe" alt="imagenposts" title="imagenposts" /></a>  Hola lectores el dia de hoy veremos como utilizar sockets en Android, como crearlos, enviar y recibir datos. Antes de empezar es necesario saber lo que es un socket pueden leer el sig. articulo. Básicamente lo que haremos hoy &#8230; <a href="http://androideity.com/2012/08/05/sockets-en-android/">Sigue leyendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><a href="http://androideity.com/wp-content/uploads/2012/08/imagenposts.png"><img class="aligncenter size-full wp-image-4039" title="imagenposts" src="http://androideity.com/wp-content/uploads/2012/08/imagenposts.png" alt="imagenposts" width="578" height="280" /></a>   Hola lectores el dia de hoy veremos como utilizar sockets en Android, como crearlos, enviar y recibir datos. Antes de empezar es necesario saber lo que es un socket pueden leer el sig. <a title="socket" href="http://es.wikipedia.org/wiki/Socket_de_Internet" target="_blank">articulo</a>. Básicamente lo que haremos hoy es una aplicacion &#8216;cliente&#8217;  para android que se conectara mediante un socket usando el protocolo TCP a una aplicaciòn &#8216;servidor&#8217; escrita en JAVA J2SE, esta app nos permitira enviar datos al servidor y desde este le podremos dar un uso a estos. <span id="more-4037"></span>A continuación podrán ver como es el diagrama en una Comunicacion entre un cliente y un servidor.   <a href="http://androideity.com/wp-content/uploads/2012/08/7a09a_tcptime.png"><img class="aligncenter size-medium wp-image-4041" title="TCP" src="http://androideity.com/wp-content/uploads/2012/08/7a09a_tcptime-247x300.png" alt="" width="247" height="300" /></a> Como veran primero se establece la coneccion, luego  el servidor  espera a que los clientes se conecten, una vez ya conectados uno hace una peticion y obtiene una respuesta hasta hacen esto hasta que la coneccion se corta. Nosotros trataremos de hacer lo mismo. En nuestro caso la app cliente estara en un dispositivo con android que se conectara mediante Wi-Fi a un router en el cual tambien esta conectada la  computadora que correra la aplicacion servidor al estar hecho en java podra correr en cualquier sistema operativo.   <a href="http://androideity.com/wp-content/uploads/2012/08/diagrama.png"><img class="aligncenter size-medium wp-image-4043" title="diagrama" src="http://androideity.com/wp-content/uploads/2012/08/diagrama-300x166.png" alt="" width="300" height="166" /></a> En android el manejo de sockets por lo menos con  TCP es igual que en java, aclaro que no soy un experto en este tema  me he basado en vario tutoriales que encontraran al final. Cuando trabajamos con sockets podemos usar el tipo  Socket en el cliente y en el servidor uno o más objetos Socket asociados a un ServerSocket. La E/S se realiza a través de objetos InputStream y OutputStream asociados a los Sockets. <strong>Lado  Servidor:</strong>En el servidor debemos hacer lo sig.</p>
<ul>
<li>Crear el socket servidor</li>
<li>Aceptar un cliente</li>
<li>Obtener los InputStream y/o OutputStream del cliente.</li>
<li>Crear unos InputStream y/o OutputStream más adecuados a nuestras necesidades.</li>
<li>Leer y escribir datos del y al cliente.</li>
<li>Cerrar el socket.</li>
</ul>
<p>En el servidor se crea un serversocket que tiene como parametro el numero de puerto este puede ser del 1 a 65535  del 1 a 1023 están reservados para servicios del sistema (SSH,SMTP, ftp, mail, www, telnet, etc&#8230;) Del 1024 en adelante podemos usarlos a nuestro gusto. <strong>Crear el socket servidor:</strong> El servidor crea un socket servidor que tiene como parámetro el puerto en el que a va estar escuchando las peticiones entrantes en mi caso he usado el 5555: <strong><span style="color: #333333;"><code>ServerSocket skServidor = new ServerSocket(5555);</code></span></strong> Cada servidor debe usar un puerto diferente. <strong>Aceptar un cliente:</strong> Una vez creado el servidor, este espera conexiones de los cliente para eso llamamos al método <strong>accept()</strong>. Este método se queda bloqueado hasta que algún cliente se conecta. Nos devuelve un <strong>Socket</strong>, que es la conexión con dicho cliente. <span style="color: #333333;"><strong>Socket skCliente = skServidor.accept();</strong></span>Un servidor puede manejar multiples conexion con cliente pero en este caso solamente manejara una.</p>
<h4>Obtener el InputStream y/o OutputStream</h4>
<p>Una vez que el cliente ya esta conectado, debemos  obtener de él el <strong>OuputStream</strong> o <strong>InputStream</strong> con los métodos<strong>getOutputStream()</strong> o <strong>getInputStream()</strong>. La clase <strong>OutpuStream</strong> nos sirve para enviar datos.  <strong>InputStream</strong> nos sirve para leer los datos recibidos. <span style="color: #333333;"><strong>InputStream input = skCliente.getIntputStream();</strong></span> <span style="color: #333333;"><strong>OutputStream output = skCliente.getOutputStream();</strong></span> Estos metodos únicamente envían bytes. Si vamos a utilizar tipos de datos normales (enteros, String) podemos utilizar las clases <strong>DataInputStream</strong> y <strong>DataOutputStream</strong>. Estas clases tienen un constructor que admite un<strong>InputStream</strong> y un <strong>OutputStream</strong> respectivamente. <strong><span style="color: #333333;">DataInputStream inputdata = new DataInputStream (input);</span></strong> <strong><span style="color: #333333;">DataOuputStream outputdata = new DataOutputStream (output);</span></strong> Estas clases tienen sus propios metodos para escribir o leer. como <strong>writeInt()</strong>,<strong>writeFloat()</strong>, <strong>readInt()</strong>, etc. Para strings usaremos los métodos <strong>writeUTF()</strong> y <strong>readUTF()</strong>, que envían/leen las cadenas en formato UTF.</p>
<div>Tambien podemos enviar y recibir objetos, en nuestra aplicacion crearemos nuestro objeto Mensaje_data</div>
<div>Para poder leer o escribir deberemos usar los metodos <strong> readObject()</strong> y <strong>writeObject()</strong> de <span style="color: #99cc00;"><strong>ObjectInputStream</strong></span> y <span style="color: #99cc00;"><strong>ObjectOutputStream</strong></span>.</div>
<div>Para poder usar estos métodos las clases que enviemos deben implementar la interface <strong>Serializable</strong>.</div>
<p><strong><span style="color: #000000;">Lado Cliente:</span></strong> Para poder crear el socket usamos la clase &#8216;Socket&#8217; ademas deberemos usar la<strong> Direccion IP del server</strong> y el <strong>puerto</strong> que empleara para la comunicacion <strong><span style="color: #333333;">Socket skCliente = new Socket (IP,PUERTO); IP debe ser u String y PUERTO un entero.</span></strong> Podemos ver todo esto en el sig. diagrama. <a href="http://androideity.com/wp-content/uploads/2012/08/diagramasockets.png"><img class="aligncenter size-medium wp-image-4048" title="diagramasockets" src="http://androideity.com/wp-content/uploads/2012/08/diagramasockets-300x192.png" alt="" width="300" height="192" /></a></p>
<div> Veremos mas de esto en el codigo de la aplicacion.</div>
<div>De momento nuestra app solamente enviara mensajes al servidor osea que la comunicacion sera en un solo sentido veremos como hacerla</div>
<div>&#8216;bidireccional en otro turial&#8217;</div>
<div>Una vez ya visto la parte teorica manos a la obra.</div>
<div></div>
<div>La app de android se vera asi le di un diseño parecido al tablero de una maquinaria para que sea mas agradable y divertido.</div>
<div></div>
<div><a href="http://androideity.com/wp-content/uploads/2012/08/device.png"><img class="aligncenter size-medium wp-image-4049" title="Captura de la app" src="http://androideity.com/wp-content/uploads/2012/08/device-168x300.png" alt="Captura de la app" width="168" height="300" /></a></div>
<p>Tendrá unos campos al comienzo en donde deberemos ingresar la direccion ip del server y el puerto,unos leds que cambiaran de color segun el estado de la conexion y un texto en el medio que informara cuando halla un error, luego mas abajo hay un campo en el que le podemos enviar un texto al servidor y luego de bajo cuatro botones de acción a los cuales desde el servidor podremos asignarle que cada vez que se los pulse realizar en el server una accion diferente como ejecutar un script, abrir una aplicacion etc, con esto podriamos usar nuestro movil como un control remoto para la pc. Veremos primero el codigo de la aplicacion servidor. He utilizado Eclipse para escribir el codigo en el repositorio encontraran el codigo. El proyecto del servidor se llama SimpleServer-Socket He  creado una clase que se llama Mensaje_data por lo que los &#8216;mensajes&#8217; que se enviaran seran de este tipo, esta clase estara presente en las 2 aplicaciones   <a href="http://androideity.com/wp-content/uploads/2012/08/1.png"><img class="aligncenter size-full wp-image-4077" title="" src="http://androideity.com/wp-content/uploads/2012/08/1.png" alt="Mensaje_data" width="628" height="206" /></a>  Este tiene los siguiente atributos.</p>
<ul>
<li>Action :</li>
</ul>
<p>llamare  mensaje de accion al mensaje que debe  tener en este atributo un valor difernte al -1 y estar comprendido entre 1 y 4. Cada valor tendra una accion especifica diferente, estos se definira mas abajo. last_msg debe ser false</p>
<ul>
<li>Texto:</li>
</ul>
<p>Llamare mensaje de texto al mensaje que tenga de valor action -1 y en texto debera tener lo que se desea enviar al server. last_msg debe ser false.</p>
<ul>
<li>Ultimo mensaje:</li>
</ul>
<p>Sera el mensaje que se envira para avisarle al servidor que debe cortar la conexion, se enviara al presionar desconectar. action=-1 texto=&#8221; &#8221; last_msg=true Server.java <a href="http://androideity.com/wp-content/uploads/2012/08/server1.png"><img class="aligncenter size-full wp-image-4053" title="server1" src="http://androideity.com/wp-content/uploads/2012/08/server1.png" alt="server1" width="918" height="2351" /></a> Algunas aclaraciones, En el metodo Exec  podremos hacer varias cosas ejucar un script abrir un pdf, un HTML, recomiendo visitar los siguientes <a href="http://www.rgagnon.com/javadetails/java-0014.html">link</a>1 , <a href="http://www.chuidiang.com/java/ejemplos/Runtime/runtime.php">link2</a>  para mayor comprension. En este caso al presionar el boton de accion 1 abrira VLC,  en el numero 2 Chrome y en el 3 una terminal esto lo he hecho usando linux, en este punto dependera del sistema operativo que esten utilizando, si no ponemos el path del ejecutable, el directorio en el que se encuentra debe estar en la variable de entorno <strong>PATH</strong>, si no, no sabrá dónde econtrar el ejecutable.   Ahora es el turno de la aplicacion para <span style="color: #99cc00;">android</span>, recomiendo leer el comentario en cada caso: Proyecto: <a href="http://androideity.com/wp-content/uploads/2012/08/proyecto.png"><img class="aligncenter size-full wp-image-4055" title="proyecto eclipse" src="http://androideity.com/wp-content/uploads/2012/08/proyecto.png" alt="proyecto eclipse" width="307" height="501" /></a> Al  AndroidManifest.xml y al layout en  layout/main no los voy a mostrar pueden verlos directamente desde el repositorio. Sockettest.java Explicare el funcionamiento paso a paso comentando en cada lineas. <a href="http://androideity.com/wp-content/uploads/2012/08/codigo-droid.png"><img class="size-full wp-image-4056 alignleft" src="http://androideity.com/wp-content/uploads/2012/08/codigo-droid.png" alt="codigo droid" width="672" height="3422" /></a><a href="http://androideity.com/wp-content/uploads/2012/08/codigo-droid2.png"><img class="size-full wp-image-4058 alignleft" src="http://androideity.com/wp-content/uploads/2012/08/codigo-droid2.png" alt="codigo droid2" width="634" height="933" /></a> Como habran  visto el funcionamiento es muy simple y no hay nada de mayor complejidad. para poder ejecutar el codigo java sin utilizar el eclipse deberan ejecutar desde su interprete de comandos segun el os que usen javac server.java y luego java server despues deberian ejecutar la app de android. Pueden ver un video sobre el funcionamiento de la aplicacion: <iframe src="http://www.youtube.com/embed/67pRHevpOY8" frameborder="0" width="420" height="315"></iframe> <strong><span style="color: #ff9900;">Pueden descargar el codigo de este tutorial desde nuestro repositorio haciendo click en la imagen debajo.</span></strong> El proyecto de la aplicacion servidor se llama &#8220;<a id="c7b43e8b45448e9e1c2ac5c1d54e8b7c-872babd444873bc85091a0be7b3d48afaaefadb9" href="https://github.com/Androideity/Sockets-en-Android-Server/tree/HEAD/SimpleServer-Socket">SimpleServer-Socket</a>&#8221; La aplicacion cliente &#8220;<a id="6f9a9ac6b2a583d7958c35b3c6621e48-69bf8e2d494a78649a3077a36124bf91e03cb22f" href="https://github.com/Androideity/Sockets-en-Android-Server/tree/HEAD/Socket-Client">Socket-Client</a>&#8221;</p>
<p style="text-align: center;"><a href="https://github.com/Androideity/Sockets-en-Android-Server" target="_blank"><img class="aligncenter" title="Github" src="http://androideity.com/wp-content/uploads/2011/07/GitHub1.png" alt="Github" width="265" height="154" /></a></p>
<p>Con estos nuevos conocimiento se pueden hacer todo tipo de aplicaciones de diversos uso, hasta incluso si tienen conocimientos en electronica podria llegar a servirles para manipular circuitos desde su  telefono o hasta quien sabe incluso manejar un robot. En proximos tutoriales incluiremos una comunicacion bidireccional por lo que implementaremos en la app de android threads para manejar estos. Respecto de sockets en Java hay mucha informacion en internet, para armar este tutorial he utilizado los siguiente recursos, recomiendo que les hechen un  vistazo que son muy utiles: <a href="http://codigoprogramacion.com/java/103-sockets-en-java-con-cliente-y-servidor.html">http://codigoprogramacion.com/java/103-sockets-en-java-con-cliente-y-servidor.html</a> <a href="http://docs.oracle.com/javase/tutorial/networking/sockets/index.html">http://docs.oracle.com/javase/tutorial/networking/sockets/index.html</a> <a href="http://casidiablo.net/java-socket-chat-basico/">http://casidiablo.net/java-socket-chat-basico/</a> <a href="http://www.chuidiang.com/java/sockets/socket.php">http://www.chuidiang.com/java/sockets/socket.php</a> <a href="http://mundogeek.net/archivos/2006/03/20/sockets-en-java/">http://mundogeek.net/archivos/2006/03/20/sockets-en-java/</a> <a href="http://www.helloandroid.com/tutorials/simple-connection-example-part-ii-tcp-communication">http://www.helloandroid.com/tutorials/simple-connection-example-part-ii-tcp-communication</a> <a href="http://docs.oracle.com/javase/tutorial/networking/sockets/readingWriting.html">http://docs.oracle.com/javase/tutorial/networking/sockets/readingWriting.html</a> <a href="http://android-er.blogspot.com.ar/2011/01/simple-communication-using.html">http://android-er.blogspot.com.ar/2011/01/simple-communication-using.html</a> <a href="http://android-er.blogspot.com.ar/2011/01/implement-simple-socket-server-in.html">http://android-er.blogspot.com.ar/2011/01/implement-simple-socket-server-in.html</a> <a href="http://adblogcat.com/ssl-sockets-android-and-server-using-a-certificate/">http://adblogcat.com/ssl-sockets-android-and-server-using-a-certificate/</a>Si alguno tiene experiencia en este tema y considera que en el tutorila hay algo incorrecto o no se entiende bien sientanse libre de usar el cuadro de comentarios de bajo al igual si tienen alguna consulta o sugerencia. Hasta el proximo tutorial! Sebastian.</p>
<p style="text-align: center;"><strong>¿Te gustó este tutorial? ¡Compártelo!</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://androideity.com/2012/08/05/sockets-en-android/feed/</wfw:commentRss>
		<slash:comments>107</slash:comments>
		</item>
		<item>
		<title>Permisos de Facebook SDK en Android</title>
		<link>http://androideity.com/2012/08/03/permisos-de-facebook-sdk-en-android/#utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=permisos-de-facebook-sdk-en-android</link>
		<comments>http://androideity.com/2012/08/03/permisos-de-facebook-sdk-en-android/#comments</comments>
		<pubDate>Fri, 03 Aug 2012 17:40:56 +0000</pubDate>
		<dc:creator>Chelix Preciado</dc:creator>
				<category><![CDATA[Programación]]></category>

		<guid isPermaLink="false">http://androideity.com/?p=4026</guid>
		<description><![CDATA[<a href="http://androideity.com/2012/08/03/permisos-de-facebook-sdk-en-android/"><img align="left" hspace="5" width="100" height="100" src="http://androideity.com/wp-content/uploads/2012/08/fb_android-150x150.png" class="alignleft wp-post-image tfe" alt="" title="Facebook Android Permisos" /></a>Hola de nuevo amigos de Androideity..!! En mi post anterior les platique como permitir a una aplicación android relacionarse con facebook mediante single sign on, este post lo dedicare a mostrar como podemos agregar más permisos que facebook nos puede &#8230; <a href="http://androideity.com/2012/08/03/permisos-de-facebook-sdk-en-android/">Sigue leyendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><a href="http://androideity.com/wp-content/uploads/2012/08/fb_android.png"><img class="size-full wp-image-4029 aligncenter" title="Facebook Android Permisos" src="http://androideity.com/wp-content/uploads/2012/08/fb_android.png" alt="" width="578" height="280" /></a></p>
<p>Hola de nuevo amigos de Androideity..!!<br />
En mi <a title="Single Sign On Androis" href="http://androideity.com/2012/07/20/android-single-sign-on-sso-con-facebook/" target="_blank">post anterior</a> les platique como permitir a una aplicación android relacionarse con facebook mediante single sign on, este post lo dedicare a mostrar como podemos agregar más permisos que facebook nos puede brindar a nuestra aplicación.</p>
<p><span id="more-4026"></span></p>
<p>Cuando un usuario se autentifica en una aplicación de facebook, por default podemos acceder a la información básica del usuario, en caso de que deseemos acceder a más información o queramos publicar información en facebook, como publicaciones en nuestro muro o en el muro de alguien más, es necesario incluir permisos adicionales.</p>
<p>Un listado detallado de los permisos que la SDK de Facebook nos ofrece se puede ver en el siguiente link: <a href="http://developers.facebook.com/docs/authentication/permissions/">http://developers.facebook.com/docs/authentication/permissions/</a></p>
<p>Solicitar estos permisos desde nuestra aplicación android es sencillo, la clase de Facebook, la cual se encuentra en su <a title="Facebook android SDK" href="https://github.com/facebook/facebook-android-sdk" target="_blank">sdk</a>, tiene el método de &#8220;authorize&#8221; en el cual le podemos enviar en un array de string los permisos que deseemos usar de facebook.</p>
<p>authorize(Activity activity, String[] permissions, final DialogListener listener)</p>
<p>Si no sabes como integrar la SDK de Facebook y/o relacionarla con tu aplicacion de Facebook, dale un vistazo a mi <a title="Android-Facebook Single Sign On" href="http://androideity.com/2012/07/20/android-single-sign-on-sso-con-facebook/" target="_blank">post anterior</a>, el cual ya contiene un ejemplo de como hacerlo.</p>
<p>Como ejemplo, agregaré algunos permisos en el método de authorize:</p>
<p style="text-align: center;"><a href="http://androideity.com/wp-content/uploads/2012/08/fb_permissions.png"><img class=" wp-image-4027 aligncenter" title="facebook permisos android" src="http://androideity.com/wp-content/uploads/2012/08/fb_permissions-300x213.png" alt="" width="300" height="213" /></a></p>
<p>Como podemos ver en el código, he agregado permisos para publicar, obtener la dirección de email, información sobre sus relaciones e información a saber si el usuario se encuentra online u offline.</p>
<p>Como resultado verán que cuando el usuario llegue a autorizar la aplicación, preguntara si acepta también que la aplicación acceda a los siguientes permisos.</p>
<p><a href="http://androideity.com/wp-content/uploads/2012/08/Screenshot_2012-08-03-12-27-49.png"><img class="alignleft size-medium wp-image-4028" title="Facebook Android Permisos" src="http://androideity.com/wp-content/uploads/2012/08/Screenshot_2012-08-03-12-27-49-180x300.png" alt="" width="180" height="300" /></a></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>Y así es como podemos jugar con los permisos de la SDK de Facebook en android.</p>
<p>Saludos. <img src='http://androideity.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://androideity.com/2012/08/03/permisos-de-facebook-sdk-en-android/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Android Single-Sign-On (SSO) con Facebook</title>
		<link>http://androideity.com/2012/07/20/android-single-sign-on-sso-con-facebook/#utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=android-single-sign-on-sso-con-facebook</link>
		<comments>http://androideity.com/2012/07/20/android-single-sign-on-sso-con-facebook/#comments</comments>
		<pubDate>Fri, 20 Jul 2012 22:10:56 +0000</pubDate>
		<dc:creator>Chelix Preciado</dc:creator>
				<category><![CDATA[Programación]]></category>

		<guid isPermaLink="false">http://androideity.com/?p=4003</guid>
		<description><![CDATA[<a href="http://androideity.com/2012/07/20/android-single-sign-on-sso-con-facebook/"><img align="left" hspace="5" width="100" height="100" src="http://androideity.com/wp-content/uploads/2012/07/single_sign_on-150x150.png" class="alignleft wp-post-image tfe" alt="" title="single sign on facebook" /></a>Hola amigos de androideity, este post tiene la finalidad de explicar como implementar en Android un Single-Sing-On (SSO) con una aplicación de facebook, SSO es una manera de loggearse dentro de una aplicación por medio de la API de Facebook, &#8230; <a href="http://androideity.com/2012/07/20/android-single-sign-on-sso-con-facebook/">Sigue leyendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><a title="single sign on facebook" href="http://androideity.com/wp-content/uploads/2012/07/single_sign_on.png" target="_blank"><img class="aligncenter size-full wp-image-4016" style="margin-top: 10px; margin-bottom: 10px;" title="single sign on facebook" src="http://androideity.com/wp-content/uploads/2012/07/single_sign_on.png" alt="" width="578" height="280" /></a></p>
<p>Hola amigos de androideity, este post tiene la finalidad de explicar como implementar en Android un Single-Sing-On (SSO) con una aplicación de facebook, SSO es una manera de loggearse dentro de una aplicación por medio de la API de Facebook, sin tener que pedir el nombre de usuario y contraseña de una cuenta de facebook. Esto es posible en android si en el dispositivo se cuenta con la aplicación oficial de facebook, y esta tiene guardada una sesión de facebook, de lo contrario la API de facebook pedirá los datos de la sesión al usuario.</p>
<p><span id="more-4003"></span></p>
<p>Comenzaremos creando una aplicación en facebook, lo cual podemos hacer en este link <a href="https://developers.facebook.com/apps">https://developers.facebook.com/apps</a></p>
<p>Les quedará algo así:</p>
<p><a href="http://androideity.com/wp-content/uploads/2012/07/fbapp.png"><img class="size-medium wp-image-4004 alignnone" title="fbapp" src="http://androideity.com/wp-content/uploads/2012/07/fbapp-291x300.png" alt="" width="291" height="300" /></a></p>
<p>Para este ejemplo solo necesitamos asignarle nombre a nuestra aplicación, y fijarnos en la APPID que se muestra, ya que la utilizaremos en nuestro proyecto android, también podemos ver el check de NAtive Android App, el cual habilitaremos más adelante para lograr implementar SSO en android.</p>
<p>A continuación, descargamos la SDK oficial de Facebook para android, la cual esta en github: <a href="https://github.com/facebook/facebook-android-sdk">https://github.com/facebook/facebook-android-sdk</a></p>
<p>Una vez que tenemos la SDK de facebook, creamos nuestro proyecto android, en el cual incluiremos las clases del SDK de facebook, dejando la estructura como la siguiente manera:</p>
<p>&nbsp;</p>
<p><a href="http://androideity.com/wp-content/uploads/2012/07/fbconnectstructure1.png"><img class="aligncenter size-medium wp-image-4006" title="fbconnectstructure" src="http://androideity.com/wp-content/uploads/2012/07/fbconnectstructure1-215x300.png" alt="" width="215" height="300" /></a></p>
<p>Ahora pasaremos con nuestra clase main, en mi caso, le he cambiado el nombre a &#8220;FBConnectTestActivity&#8221;.</p>
<p>En esta creamos una nueva instancia de la clase Facebook, y en el constructor le pasaremos el ID de nuestra aplicación, y en el onCreate() de nuestra actividad, le daremos el authorize() a la instancia de Facebook para loggear al obtener un token de acceso a la aplicación de Facebook.</p>
<p>El metodo de authorize() nos regresa un DialogListener, en el cual cachamos si se obtuvieron los datos correctamente, si existieron errores o si se cancela la petición por medio de onComplete(), onFacebookError(), onError() y onCancel().</p>
<p>Adicionalmente, debemos de sobrecargar el metodo de onActivityResult() del Activity para cachar el callback de la clase de facebook.</p>
<p>Nuestra clase que de la siguiente manera:</p>
<p><a href="http://androideity.com/wp-content/uploads/2012/07/fbconnectstructure2.png"><img class="aligncenter size-medium wp-image-4007" title="fbconnectcode" src="http://androideity.com/wp-content/uploads/2012/07/fbconnectstructure2-300x264.png" alt="" width="300" height="264" /></a></p>
<p>Ahora debemos de habilitar en nuestra aplicación de Facebook el SSO, regresemos a nuestro aplicación en facebook, y habilitaremos la opción de Aplicación Android Nativa, y activemos el configurado para android SSO, y en el campo de Tecla de cuadrado Android agregaremos la firma de nuestra aplicación android, esta se obtiene por medio de la keytool de android en consola, si solo estamos haciendo pruebas, debemos hacer uso de la llave por default de android, la cual es la &#8220;debug.keystore&#8221;, si exportamos nuestro proyecto debemos de hacer uso del código generado por la llave con la que se firmo la apk. Más información de como obtener la firma de llaves de aplicaciones android en este link: <a href="http://developer.android.com/tools/publishing/app-signing.html">http://developer.android.com/tools/publishing/app-signing.html</a></p>
<p>Una vez que tenemos nuestro codigo en la aplicación, guardamos los cambios.</p>
<p><a href="http://androideity.com/wp-content/uploads/2012/07/ssotestconfig.png"><img class="alignnone size-medium wp-image-4008" title="ssotestconfig" src="http://androideity.com/wp-content/uploads/2012/07/ssotestconfig-300x229.png" alt="" width="300" height="229" /></a></p>
<p>Ahora podemos ejecutar nuestro proyecto android y ver como se muestra un Dialog el cual pide al usuario dar permisos de que esta aplicación acceda a su información de facebook.</p>
<p><a href="http://androideity.com/wp-content/uploads/2012/07/Screenshot_2012-07-20-17-07-26.png"><img class="aligncenter size-medium wp-image-4009" title="Screenshot_2012-07-20-17-07-26" src="http://androideity.com/wp-content/uploads/2012/07/Screenshot_2012-07-20-17-07-26-180x300.png" alt="" width="180" height="300" /></a></p>
<p>El código completo del ejemplo lo puedes ver en: <a href="https://github.com/ChelixPreciado/androidsso">https://github.com/ChelixPreciado/androidsso</a></p>
<p>Saludos.. <img src='http://androideity.com/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> </p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://androideity.com/2012/07/20/android-single-sign-on-sso-con-facebook/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
	</channel>
</rss>
