<?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>Tue, 15 May 2012 20:19:10 +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>Asiste a la reunión Mayo 2012 Cocoaheads y Androideity</title>
		<link>http://androideity.com/2012/05/15/asiste-a-la-reunion-mayo-2012-cocoaheads-y-androideity/#utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=asiste-a-la-reunion-mayo-2012-cocoaheads-y-androideity</link>
		<comments>http://androideity.com/2012/05/15/asiste-a-la-reunion-mayo-2012-cocoaheads-y-androideity/#comments</comments>
		<pubDate>Tue, 15 May 2012 20:11:09 +0000</pubDate>
		<dc:creator>Condesa</dc:creator>
				<category><![CDATA[Programación]]></category>
		<category><![CDATA[conferencias]]></category>
		<category><![CDATA[conociendo Android]]></category>
		<category><![CDATA[desarrollo en android]]></category>
		<category><![CDATA[eventos]]></category>

		<guid isPermaLink="false">http://androideity.com/?p=3442</guid>
		<description><![CDATA[<a href="http://androideity.com/2012/05/15/asiste-a-la-reunion-mayo-2012-cocoaheads-y-androideity/"><img align="left" hspace="5" width="100" height="100" src="http://androideity.com/wp-content/uploads/2012/05/cocoaheads-150x150.png" class="alignleft wp-post-image tfe" alt="" title="Cocoaheads y Androideity" /></a>En esta ocasión es para mí un placer invitarlos a una reunión que tendremos este sábado 19 de mayo en Ciudad de México con apoyo de la comunidad de Cocoa Heads México que se dedican al desarrollo en iOS y nuestra comunidad. &#8230; <a href="http://androideity.com/2012/05/15/asiste-a-la-reunion-mayo-2012-cocoaheads-y-androideity/">Sigue leyendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><a title="Cocoaheads y Androideity" href="http://androideity.com/wp-content/uploads/2012/05/cocoaheads.png" target="_blank"><img class="aligncenter size-full wp-image-3443" style="margin-top: 10px; margin-bottom: 10px;" title="Cocoaheads y Androideity" src="http://androideity.com/wp-content/uploads/2012/05/cocoaheads.png" alt="" width="578" height="280" /></a></p>
<p>En esta ocasión es para mí un placer invitarlos a una reunión que tendremos este sábado 19 de mayo en Ciudad de México con apoyo de la comunidad de <strong><a href="http://cocoaheads.org/mx/MexicoCity/index.html" target="_blank">Cocoa Heads México</a></strong> que se dedican al desarrollo en iOS y nuestra comunidad.</p>
<p>Con la finalidad de invitar a los chavos interesados en el desarrollo de aplicaciones móviles y ser parte de este nuevo mercado emergente en nuestro país, estamos organizando varias charlas que te ayuden a dar el salto que necesitas para aprender y para la gente que ya está haciendo cosas pueda obtener un feedback con el contenido que venimos a compartir.</p>
<p><span id="more-3442"></span>Lo genial de la modalidad de estas reuniones es que si bien se organizan charlas, también tendrás un espacio para platicar con otros desarrolladores acerca de los proyectos en los que te encuentras trabajando y aclarar dudas que tengas, intercambiar experiencias, etc.</p>
<p>El enfoque no es totalmente Android, sin embargo, creo conveniente también mirar hacia otras plataformas y conocer en qué se programa, quién quita y también estás interesado en aprender de iOS. ;D</p>
<p>Este evento será el Sábado 19 de mayo de 10:00 AM a 5:00 PM en la ciudad de México, en las Oficinas Raku ubicadas en Paseo de la Reforma 107, piso 5 despacho 502.</p>
<p>Por cuestiones de las instalaciones, el cupo es limitado a un número específico de personas por lo que si estás interesado en asistir no esperes más y regístrate <a href="https://cocoaheadsmx.stagehq.com/events/1469" target="_blank">aquí</a>.</p>
<p>Espero que aproveches al máximo el evento para aprender más sobre desarrollo móvil.</p>
<p>&nbsp;</p>
<p style="text-align: center;"><strong>¡Corre la voz!</strong></p>
<p style="text-align: center;">
]]></content:encoded>
			<wfw:commentRss>http://androideity.com/2012/05/15/asiste-a-la-reunion-mayo-2012-cocoaheads-y-androideity/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Administra tus repositorios con Subeclipse</title>
		<link>http://androideity.com/2012/05/15/administra-tus-repositorios-con-subeclipse/#utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=administra-tus-repositorios-con-subeclipse</link>
		<comments>http://androideity.com/2012/05/15/administra-tus-repositorios-con-subeclipse/#comments</comments>
		<pubDate>Tue, 15 May 2012 15:56:27 +0000</pubDate>
		<dc:creator>Condesa</dc:creator>
				<category><![CDATA[Programación]]></category>
		<category><![CDATA[desarrollo en android]]></category>
		<category><![CDATA[eclipse]]></category>
		<category><![CDATA[herramientas]]></category>
		<category><![CDATA[tips]]></category>

		<guid isPermaLink="false">http://androideity.com/?p=3411</guid>
		<description><![CDATA[<a href="http://androideity.com/2012/05/15/administra-tus-repositorios-con-subeclipse/"><img align="left" hspace="5" width="100" height="100" src="http://androideity.com/wp-content/uploads/2012/05/subeclipse-150x150.png" class="alignleft wp-post-image tfe" alt="" title="Subeclipse" /></a>Si ya llevas tiempo en esto del desarrollo, sin importar la plataforma, sabrás la importancia de trabajar con herramientas que nos ayuden a llevar el control de las versiones de un proyecto (cuestión muy importante cuando trabajamos en equipo). La &#8230; <a href="http://androideity.com/2012/05/15/administra-tus-repositorios-con-subeclipse/">Sigue leyendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><a title="Subeclipse" href="http://androideity.com/wp-content/uploads/2012/05/subeclipse.png" target="_blank"><br />
<img class="aligncenter size-full wp-image-3431" style="margin-top: 10px; margin-bottom: 10px;" title="Subeclipse" src="http://androideity.com/wp-content/uploads/2012/05/subeclipse.png" alt="" width="578" height="280" /></a></p>
<p>Si ya llevas tiempo en esto del desarrollo, sin importar la plataforma, sabrás la importancia de trabajar con herramientas que nos ayuden a llevar el control de las versiones de un proyecto (cuestión muy importante cuando trabajamos en equipo).</p>
<p>La herramienta con la que he trabajado en muchas ocasiones es <strong>SVN</strong> que viene del término <strong>Subversion</strong> y se trata de un software (<em>open source</em>) de sistema de control de versiones. Dentro de sus características podemos mencionar:</p>
<ul>
<li>Un repositorio remoto donde se alojan las copias y revisiones comunes.</li>
<li>Contamos con una copia local donde podemos trabajar de forma independiente y cuando creamos conveniente, podemos mandar esta copia al repositorio remoto y el sistema se encargará de verificar que no existan conflictos entre las diferentes copias y así tener siempre la &#8220;versión estable y final&#8221; cada vez que un miembro del equipo actualice.</li>
<li>Permite ver una muestra de cambios entre diferentes versiones, esto en los archivos de clases y archivos similares.</li>
</ul>
<p>Si bien podemos utilizar SVN como cualquier otro programa en nuestra computadora, también existe un plugin que nos permite vincularlo a nuestro Eclipse y trabajar de forma más cómoda con las versiones. Esto es precisamente lo que vengo a compartirte en este post.</p>
<p><span id="more-3411"></span>El plugin en cuestión se llama <strong>Subeclipse</strong>, un proyecto de <a href="http://subclipse.tigris.org" target="_blank">Tigris.org</a> que dota a nuestro Eclipse IDE con la capacidad de soportar las funciones de SVN directamente sobre los proyectos que tengamos en nuestro Workspace.</p>
<p>En el <a href="http://subclipse.tigris.org/servlets/ProjectProcess?pageID=p4wYuA" target="_blank">sitio del proyecto</a> podrás checar qué versión de Subversion, de Eclipse y del plugin puedes utilizar en conjunto para que no tengas ningún problema de compatibilidad.</p>
<p>Para conocer la versión de tu Eclipse basta con ir a la opción <em>Help &gt; About Eclipse SDK</em>:</p>
<p style="text-align: center;"><a title="Subeclipse plugin" href="http://androideity.com/wp-content/uploads/2012/05/subeclipse01.png" target="_blank"><img class="aligncenter  wp-image-3434" style="margin-top: 10px; margin-bottom: 10px;" title="Subeclipse plugin" src="http://androideity.com/wp-content/uploads/2012/05/subeclipse01.png" alt="" width="491" height="303" /></a></p>
<p>En mi caso, he elegido la versión 1.6 de Subeclipse.</p>
<p style="text-align: center;"><a title="Subeclipse plugin" href="http://androideity.com/wp-content/uploads/2012/05/subeclipse02.png" target="_blank"><img class="aligncenter  wp-image-3435" style="margin-top: 10px; margin-bottom: 10px;" title="Subeclipse plugin" src="http://androideity.com/wp-content/uploads/2012/05/subeclipse02.png" alt="" width="526" height="66" /></a></p>
<p>Para instalarlo, me voy a la opción <em>Help &gt; Install new software</em> de Eclipse y damos clic sobre el botón <em>Add&#8230;</em> donde colocaremos la URL que corresponde a <em>Eclipse update site URL</em> de la imagen anterior y de preferencia un nombre que haga referencia a lo que estamos instalando:</p>
<p style="text-align: center;"><a title="Subeclipse plugin" href="http://androideity.com/wp-content/uploads/2012/05/subeclipse03.png" target="_blank"><img class="aligncenter size-full wp-image-3436" style="margin-top: 10px; margin-bottom: 10px;" title="Subeclipse plugin" src="http://androideity.com/wp-content/uploads/2012/05/subeclipse03.png" alt="" width="494" height="197" /></a></p>
<p>Posteriormente elegiremos las herramientas que necesitemos de las que nos da la opción de instalar. Al momento de seleccionar alguna de ellas se nos muestra la información detallada del <em>feature</em> para que nos sea más fácil elegir. Yo he seleccionado las tres y doy clic en <em>Next &gt;</em>. Cuando la instalación haya finalizado es necesario reiniciar Eclipse.</p>
<p>Siempre que instalemos un nuevo plugin o herramienta a nuestro IDE, es importante hacer un test rápido para saber que todo salió bien.</p>
<p>Con este plugin tendremos la opción de abrir la perspectiva de SVN para ver nuestros proyectos y administrar nuestros repositorios de forma más cómoda. Para irnos a esta perspectiva damos clic en <em>Window &gt; Open perspective &gt; Other &gt; SVN Repository Exploring</em>.</p>
<p style="text-align: center;"><a title="Subeclipse plugin" href="http://androideity.com/wp-content/uploads/2012/05/subeclipse04.png" target="_blank"><img class="aligncenter  wp-image-3438" style="margin-top: 10px; margin-bottom: 10px;" title="Subeclipse plugin" src="http://androideity.com/wp-content/uploads/2012/05/subeclipse04.png" alt="" width="541" height="278" /></a></p>
<p>Dentro de la pestaña <em>SVN Repositories</em> se irán enlistando los repositorios que vayamos agregando. En la pestaña <em>SVN Annotate</em> podemos accesar a los comentarios o anotaciones que se le haya hecho a alguno de los archivos del repositorio que nos hayamos descargado previamente.</p>
<p>Para agregar un repositorio nuevo basta con dar clic sobre el área blanca de <em>SVN Repositories &gt; New &gt; Repository Location</em>, escribimos la URL y damos clic en <em>Finish</em>.</p>
<p style="text-align: center;"><a title="Subeclipse plugin" href="http://androideity.com/wp-content/uploads/2012/05/subeclipse05.png" target="_blank"><img class="aligncenter size-full wp-image-3437" style="margin-top: 10px; margin-bottom: 10px;" title="Subeclipse plugin" src="http://androideity.com/wp-content/uploads/2012/05/subeclipse05.png" alt="" width="510" height="291" /></a></p>
<p>Una vez teniendo un repositorio agregado podemos navegar entre su contenido para ahora sí descargarnos directamente proyectos Android (u otro tipo de proyectos) a nuestro Workspace. Sobre el directorio de nuestro interés damos clic derecho y seleccionamos la opción <em>Checkout&#8230;</em> que nos llevará a un wizzard en dónde escribiremos el nombre con el que se descargará ese proyecto dentro del Workspace.</p>
<p style="text-align: center;"><a title="Subeclipse plugin" href="http://androideity.com/wp-content/uploads/2012/05/subeclipse06.png" target="_blank"><img class="aligncenter size-full wp-image-3439" style="margin-top: 10px; margin-bottom: 10px;" title="Subeclipse plugin" src="http://androideity.com/wp-content/uploads/2012/05/subeclipse06.png" alt="" width="525" height="514" /></a></p>
<p>Al dar clic en <em>Finish</em> nos descargará el proyecto dentro de la ubicación por default de nuestro Workspace. Si necesitas descargarte el proyecto dentro de otro directorio, da clic en <em>Next</em> ya que en la siguiente ventana es en donde podrás cambiar la ubicación.</p>
<p>Al finalizar la descarga, cambia de perspectiva a la de Java y en tu <em>Package Explorer</em> podrás ver ya el proyecto descargado del repo. De esta forma nos es bastante sencillo empezar a trabajar sobre el código, hacer modificaciones y actualizar el proyecto en el repositorio que compartimos con nuestros miembros de equipo.</p>
<p>En la web suelo encontrar algunos proyectos de librerías que liberan su código fuente proporcionándote una URL de su repositorio. Con este plugin podrás descargarte dichos proyectos de forma rápida y sencilla y poder navegar entre el código.</p>
<p>Hay veces en las que estos proyectos se liberan únicamente bajo permisos de lectura, así que no te será posible mandar los cambios que puedas llegar a hacerles a las clases del proyecto.</p>
<p>Por ejemplo, a continuación te muestro cómo se ve el proyecto que corresponde al código fuente de la librería <em>OpenYouTubeActivity</em> del cuál platiqué en mi <a title="Reproducir videos de Youtube desde tu app Android" href="http://androideity.com/2012/05/13/reproducir-videos-de-youtube-desde-tu-app-android/" target="_blank">post anterior</a>.</p>
<p style="text-align: center;"><a title="Subeclipse plugin" href="http://androideity.com/wp-content/uploads/2012/05/subeclipse07.png" target="_blank"><img class="aligncenter size-full wp-image-3440" style="margin-top: 10px; margin-bottom: 10px;" title="Subeclipse plugin" src="http://androideity.com/wp-content/uploads/2012/05/subeclipse07.png" alt="" width="425" height="307" /></a></p>
<p>Las carpetas que ves con un icono de color amarillo son aquellos archivos que están tal cuál se encuentran en el repositorio remoto. En cambio, aquellos archivos que se encuentran con un icono de color café con un asterisco son aquellos que yo he modificado.</p>
<p>En un entorno colaborativo en el que estés trabajando sobre un proyecto propio podrás subir estos últimos archivos que modifiques para que el proyecto remoto vaya teniendo tus actualizaciones.</p>
<p>Algo importante es que siempre que subas actualizaciones hagas pruebas exhaustivas de que el módulo o cambios que estés implementando no tenga errores y funcione de lo mejor para que siempre se tenga en el repositorio la versión final y estable en cada iteración.</p>
<p>Ahora bien, para subir estas actualizaciones basta con dar clic derecho sobre el nombre de tu proyecto y elegir la opción <em>Team &gt; Commit</em>. Dependiendo de las acciones que necesites aplicar a un proyecto que estés compartiendo con otros miembros de tu equipo, será en este menú <em>Team</em> donde las encontrarás.</p>
<p>Por último, si has estado trabajando en algún proyecto de forma local y de repente se unen a ti otros desarrolladores, puedes subir tu código a un repositorio que previamente hayas levantado dando clic derecho <em>Team &gt; Share Project</em> y configurar en el wizzard la URL de dónde se encuentra el respositorio remoto que lo albergará. Con esto damos paso a que cualquier otra persona a la cuál le proporcionemos la URL pueda empezar también a trabajar sobre nuestro proyecto.</p>
<p>Si hasta ahora es la primera vez que planeas utilizar este plugin, te comparto un par de referencias que te pueden ayudar a despejar las dudas básicas de cómo utilizarlo:</p>
<ul>
<li><a href="http://www.ibm.com/developerworks/opensource/library/os-ecl-subversion/" target="_blank">How to use subversion with Eclipse</a></li>
<li><a href="http://ist.berkeley.edu/as-ag/tools/usage/subclipse-usage-tips.html" target="_blank">Subeclipse usage: Tips &amp; Tricks</a></li>
</ul>
<p>Como lo dije al inicio del post, un software de control de versiones es una de las herramientas básicas para trabajar en equipo, espero que te sirva y que te agilice muchos procesos.</p>
<p>&nbsp;</p>
<p style="text-align: center;"><strong>¿Te fue útil este post? ¡Compártelo!</strong></p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://androideity.com/2012/05/15/administra-tus-repositorios-con-subeclipse/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Reproducir videos de Youtube desde tu app Android</title>
		<link>http://androideity.com/2012/05/13/reproducir-videos-de-youtube-desde-tu-app-android/#utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=reproducir-videos-de-youtube-desde-tu-app-android</link>
		<comments>http://androideity.com/2012/05/13/reproducir-videos-de-youtube-desde-tu-app-android/#comments</comments>
		<pubDate>Mon, 14 May 2012 01:37:43 +0000</pubDate>
		<dc:creator>Condesa</dc:creator>
				<category><![CDATA[Programación]]></category>
		<category><![CDATA[desarrollo en android]]></category>
		<category><![CDATA[librerías]]></category>
		<category><![CDATA[tips]]></category>

		<guid isPermaLink="false">http://androideity.com/?p=3385</guid>
		<description><![CDATA[<a href="http://androideity.com/2012/05/13/reproducir-videos-de-youtube-desde-tu-app-android/"><img align="left" hspace="5" width="100" height="100" src="http://androideity.com/wp-content/uploads/2012/05/youtube10-150x150.png" class="alignleft wp-post-image tfe" alt="" title="Videos Youtube en Android" /></a>  En alguna ocasión abordamos el tema de los Intents y de cómo nos permiten en ocasiones utilizar las aplicaciones que el usuario ya tiene instaladas en su smartphone para lanzar algunas acciones como reproducir audio o video, abrir un &#8230; <a href="http://androideity.com/2012/05/13/reproducir-videos-de-youtube-desde-tu-app-android/">Sigue leyendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"> <a title="Videos Youtube en Android" href="http://androideity.com/wp-content/uploads/2012/05/youtube10.png" target="_blank"><img class="aligncenter size-full wp-image-3406" style="margin-top: 10px; margin-bottom: 10px;" title="Videos Youtube en Android" src="http://androideity.com/wp-content/uploads/2012/05/youtube10.png" alt="" width="578" height="280" /></a></p>
<p>En alguna ocasión abordamos el <a title="Intents en Android: Intents implícitos" href="http://androideity.com/2011/10/19/intents-en-android-implicitos/" target="_blank">tema de los Intents</a> y de cómo nos permiten en ocasiones utilizar las aplicaciones que el usuario ya tiene instaladas en su smartphone para lanzar algunas acciones como reproducir audio o video, abrir un link en un browser, compartir información a través de una red social, etc. sin tener que reinventar la rueda.</p>
<p>Este método nos permite entonces, de manera muy sencilla y con una línea de código, reproducir videos de Youtube a partir de una URL.</p>
<p>Con algo como esto:</p>
<p style="text-align: center;"><em>startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(&#8220;http://www.youtube.com/watch?v=_JkkkdH6zTQ&#8221;));</em></p>
<p style="text-align: left;"><em></em>Obtendría este resultado:</p>
<p style="text-align: left;"><a href="http://androideity.com/wp-content/uploads/2012/05/youtube_011.png"><img class="aligncenter size-full wp-image-3390" title="Videos de Youtube en Android" src="http://androideity.com/wp-content/uploads/2012/05/youtube_011.png" alt="" width="459" height="474" /></a></p>
<p>&nbsp;</p>
<p>Mediante este método, el usuario es quien decidirá qué aplicación desea utilizar para ver el contenido multimedia de nuestra aplicación. Pero, ¿qué pasaría si lo que necesitamos es reproducir ese video dentro de nuestra aplicación y no a través de un <em>Intent</em>?</p>
<p>Existe una librería que me encontré en estos días y que me ha parecido bastante útil para lograr esto que te comento. ¿List@ para conocerla?</p>
<p><span id="more-3385"></span>La librería en cuestión se llama <em>android-youtube-player</em>, un proyecto <em>open source</em> que puedes encontrar en <a href="http://code.google.com/p/android-youtube-player/" target="_blank">este link</a>. El equipo detrás de esta librería es <em><a href="http://keyeslabs.com/joomla/" target="_blank">KeyesLabs</a></em>. Básicamente, el objetivo de este proyecto es proporcionar una <em>Activity</em> que nos permita reproducir un video de Youtube en cualquier dispositivo sin necesariamente tener instalada alguna otra aplicación que reproduzca video.</p>
<p>Para implementar la funcionalidad de la librería es necesario descargarnos el archivo <em>openyoutubeactivity-1.1.jar</em> desde <a href="http://code.google.com/p/android-youtube-player/downloads/list" target="_blank">este link</a>.</p>
<p>1. Para efectos demostrativos de cómo utilizar la librería, he creado un nuevo proyecto Android con la versión 2.2 llamado <em>YoutubePlayer</em>.</p>
<p>2. En la carpeta raíz de mi proyecto he creado un directorio llamado <em>lib</em> en dónde he copiado el archivo <em>.jar</em> que me descargué previamente.</p>
<p style="text-align: center;"><a title="Videos de Youtube en Android" href="http://androideity.com/wp-content/uploads/2012/05/youtube_02.png" target="_blank"><img class="aligncenter  wp-image-3393" style="margin-top: 10px; margin-bottom: 10px;" title="Videos de Youtube en Android" src="http://androideity.com/wp-content/uploads/2012/05/youtube_02.png" alt="" width="480" height="222" /></a></p>
<p>3. En Eclipse, es necesario dar clic derecho sobre el nombre de mi proyecto y seleccionar <em>Refresh</em> para que me actualice los cambios que le hice a esta carpeta desde el explorador de archivos de mi computadora.</p>
<p>4. Posteriormente tendré que agregar la referencia de la librería en mi proyecto, por lo cuál doy clic derecho nuevamente sobre el nombre del proyecto y selecciono la opción <em>Properties &gt; Java Build Path &gt; Add JARs&#8230;</em> y elijo el archivo <em>.jar</em> del directorio <em>lib</em>.</p>
<p>Con esto, ya tendré todo listo para utilizar las clases de la librería con el proyecto que esté desarrollando.</p>
<p style="text-align: center;"><a title="Videos de Youtube en Android" href="http://androideity.com/wp-content/uploads/2012/05/youtube_03.png" target="_blank"><img class="aligncenter size-full wp-image-3394" style="margin-top: 10px; margin-bottom: 10px;" title="Videos de Youtube en Android" src="http://androideity.com/wp-content/uploads/2012/05/youtube_03.png" alt="" width="280" height="292" /></a></p>
<p>5. Este proyecto cuenta con su propia documentación que puedes consultar <a href="http://code.google.com/p/android-youtube-player/wiki/OpenYouTubePlayerActiviyInstructions" target="_blank">aquí</a>. Se nos explica claramente los casos en los que la librería sería una opción válida a utilizar, entre los cuáles están:</p>
<ul>
<li>Cuando necesites reproducir contenido de video sin incluir dicho recurso en tu aplicación ya que eso haría pesado tu proyecto y no es lo más óptimo.</li>
<li>Cuando necesites que el usuario pueda volver rápidamente a tu aplicación después de haber reproducido el video.</li>
<li>Cuando quieras ahorrarte el trabajo de construir una aplicación especializada en reproducir videos de Youtube.</li>
</ul>
<p>Partiendo de esto, el siguiente paso es conocer qué parámetros necesita la librería para poder hacer su trabajo. Como lo dije líneas arriba, la librería consta de una <em>activity </em>que mandaremos a llamar a través de un Intent pero con la particularidad de que no nos dará la opción de elegir una aplicación externa, sino que el usuario verá que el video lo reproduce la propia aplicación. El parámetro que necesita esta <em>activity</em> es el ID del video. En las URL&#8217;s de Youtube podemos identificar este atributo como la cadena que sigue de <em>&#8220;v=&#8221;</em>. Por ejemplo, en esta URL: &#8220;<em>http://www.youtube.com/watch?v=_JkkkdH6zTQ</em>&#8220;, la ID corresponde a: &#8220;<em>_JkkkdH6zTQ</em>&#8220;.</p>
<p>Por esa razón, vamos a diseñar una pantalla que nos pida un ID válido para que podamos mandar a llamar a la <em>activity</em> de la librería y podamos verla en acción.</p>
<p>6. Modifico entonces el archivo <em>res &gt; layout &gt; main.xml</em> para que tenga el siguiente código:</p>
<p style="text-align: center;"><a title="Videos de Youtube en Android" href="http://androideity.com/wp-content/uploads/2012/05/youtube_04.png" target="_blank"><img class="aligncenter  wp-image-3396" style="margin-top: 10px; margin-bottom: 10px;" title="Videos de Youtube en Android" src="http://androideity.com/wp-content/uploads/2012/05/youtube_04.png" alt="" width="493" height="457" /></a></p>
<p>Las cadenas de texto que utilizo en esta pantalla son las siguientes y las he agregado en el archivo <em>res &gt; values &gt; strings.xml</em>:</p>
<p style="text-align: center;"><a title="Videos de Youtube en Android" href="http://androideity.com/wp-content/uploads/2012/05/youtube_05.png" target="_blank"><img class="aligncenter  wp-image-3397" style="margin-top: 10px; margin-bottom: 10px;" title="Videos de Youtube en Android" src="http://androideity.com/wp-content/uploads/2012/05/youtube_05.png" alt="" width="494" height="166" /></a></p>
<p> 7. En la actividad principal de nuestro proyecto vamos a llamar a <em>OpenYouTubePlayerActivity</em>, que es la actividad que se encarga de reproducir los videos. Esta actividad es la que viene incluida en la librería; el resto de las clases se utilizan para darle forma al funcionamiento de la misma. Entonces, nos resulta realmente sencillo construir la llamada. Mi código es el siguiente:</p>
<p style="text-align: center;"><a title="Videos de Youtube en Android" href="http://androideity.com/wp-content/uploads/2012/05/youtube_061.png" target="_blank"><img class="aligncenter  wp-image-3399" style="margin-top: 10px; margin-bottom: 10px;" title="Videos de Youtube en Android" src="http://androideity.com/wp-content/uploads/2012/05/youtube_061-1024x553.png" alt="" width="496" height="267" /></a></p>
<p>&nbsp;</p>
<p>Aquí lo único que estoy haciendo es instanciar mi <em>EditText</em> que es en dónde escribo directamente el código del video que quiero reproducir, y el <em>Button</em> que me ayudará a mandarle ese ID a <em>OpenYouTubePlayerActivity</em>. La parte importante del código son estas dos líneas:</p>
<p style="text-align: left; padding-left: 30px;"><em>Intent lVideoIntent = new Intent(null, Uri.parse(&#8220;ytv://&#8221;+videoId), MainActivity.this, OpenYouTubePlayerActivity.class);</em></p>
<p style="text-align: left; padding-left: 30px;"><em>startActivity(lVideoIntent);</em></p>
<p>En dónde creo el <em>Intent</em> utilizando el constructor que recibe cuatro parámetros: <em>action</em>, <em>uri</em>, <em>packageContext</em> y <em>cls</em>. (<a href="http://developer.android.com/reference/android/content/Intent.html#Intent(java.lang.String, android.net.Uri, android.content.Context, java.lang.Class&lt;?&gt;)" target="_blank">Ver documentación oficial)</a>.</p>
<p>8. Para que todo salga bien, necesito agregar algunos datos al <em>AndroidManifest.xml</em> tales como el registro de la actividad <em>OpenYouTubePlayerActivity</em> y los permisos de acceso a internet y a la información del estado de la WiFi. De tal forma que tu archivo manifest deberá verse como este:</p>
<p style="text-align: center;"><a title="Videos de Youtube en Android" href="http://androideity.com/wp-content/uploads/2012/05/youtube_07.png" target="_blank"><img class="aligncenter  wp-image-3403" style="margin-top: 10px; margin-bottom: 10px;" title="Videos de Youtube en Android" src="http://androideity.com/wp-content/uploads/2012/05/youtube_07.png" alt="" width="527" height="516" /></a></p>
<p>Es importante resaltar que dado que la actividad que estamos registrando no pertenece a ninguno de nuestros paquetes, es necesario escribir el nombre completo con los espacios de nombres de la librería para que nuestra aplicación no nos lance un error al ejecutarla.</p>
<p>Otro detalle es que le hemos habilitado la orientación <em>landscape</em> para que el usuario vea de forma más cómoda el video.</p>
<p>9. Procedemos a ejecutar la aplicación y tendremos como resultado lo siguiente:</p>
<p style="text-align: center;"><a title="Videos de Youtube en Android" href="http://androideity.com/wp-content/uploads/2012/05/youtube_08.png" target="_blank"><img class="aligncenter  wp-image-3404" style="margin-top: 10px; margin-bottom: 10px;" title="Videos de Youtube en Android" src="http://androideity.com/wp-content/uploads/2012/05/youtube_08.png" alt="" width="288" height="480" /></a></p>
<p>&nbsp;</p>
<p style="text-align: center;"><a title="Videos de Youtube en Android" href="http://androideity.com/wp-content/uploads/2012/05/youtube_09.png" target="_blank"><img class="aligncenter  wp-image-3405" style="margin-top: 10px; margin-bottom: 10px;" title="Videos de Youtube en Android" src="http://androideity.com/wp-content/uploads/2012/05/youtube_09.png" alt="" width="480" height="288" /></a></p>
<p>&nbsp;</p>
<p>Leyendo en la parte de la Wiki de este proyecto, vi que varios usuarios han tenido problemas para agregar la librería y utilizarla directamente del archivo Jar. Si llegas a tener algún problema también o bien, quieres personalizar los controles del reproductor te recomiendo descargarte el código fuente del proyecto a través de SVN. La sección <em>Source</em> del proyecto la puedes encontrar <a href="http://code.google.com/p/android-youtube-player/source/checkout" target="_blank">aquí</a> junto con el link del repo para poder tener las clases que conforman las librerías.</p>
<p>La clase <em>OpenYouTubeActivity</em> es la que tendrás que modificar para personalizar los controles y otras cosas que necesite tu proyecto. Por último, te recomiendo que cuando agregues estas clases a tu proyecto lo hagas asignándoles un paquete propio para que te sea siempre más sencillo identificar el código correspondiente a un &#8220;módulo&#8221; específico de funcionalidad.</p>
<p>Espero que el uso de esta librería te sea de utilidad, recuerda también siempre agradecer y reconocer el trabajo de los demás cuando utilices una librería de terceros. <img src='http://androideity.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>&nbsp;</p>
<p style="text-align: center;"><strong>¿Te gustó este post? ¡Compártelo!</strong></p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://androideity.com/2012/05/13/reproducir-videos-de-youtube-desde-tu-app-android/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>La importancia del MVC en Android</title>
		<link>http://androideity.com/2012/05/10/la-importancia-del-mvc-en-android/#utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=la-importancia-del-mvc-en-android</link>
		<comments>http://androideity.com/2012/05/10/la-importancia-del-mvc-en-android/#comments</comments>
		<pubDate>Thu, 10 May 2012 17:42:40 +0000</pubDate>
		<dc:creator>Condesa</dc:creator>
				<category><![CDATA[Programación]]></category>
		<category><![CDATA[conceptos básicos]]></category>
		<category><![CDATA[conociendo Android]]></category>
		<category><![CDATA[desarrollo en android]]></category>
		<category><![CDATA[MVC]]></category>
		<category><![CDATA[tips]]></category>

		<guid isPermaLink="false">http://androideity.com/?p=3378</guid>
		<description><![CDATA[<a href="http://androideity.com/2012/05/10/la-importancia-del-mvc-en-android/"><img align="left" hspace="5" width="100" height="100" src="http://androideity.com/wp-content/uploads/2012/05/modelovistacontrolador-150x150.png" class="alignleft wp-post-image tfe" alt="" title="MVC en Android" /></a>Estás iniciándote en el desarrollo móvil y te preguntas: &#8220;¿Por dónde empiezo? ¿Qué debo saber? ¿Cómo debo programar?&#8221;. Yo parto de una primera premisa &#8220;El desarrollo móvil NO es fácil pero tampoco es imposible&#8221;. Lo más importante al inicio, aparte &#8230; <a href="http://androideity.com/2012/05/10/la-importancia-del-mvc-en-android/">Sigue leyendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><a title="MVC en Android" href="http://androideity.com/wp-content/uploads/2012/05/modelovistacontrolador.png" target="_blank"><img class="aligncenter size-full wp-image-3383" style="margin-top: 10px; margin-bottom: 10px;" title="MVC en Android" src="http://androideity.com/wp-content/uploads/2012/05/modelovistacontrolador.png" alt="" width="578" height="280" /></a></p>
<p>Estás iniciándote en el desarrollo móvil y te preguntas: <em>&#8220;¿Por dónde empiezo? ¿Qué debo saber? ¿Cómo debo programar?&#8221;</em>.</p>
<p>Yo parto de una primera premisa <strong>&#8220;El desarrollo móvil NO es fácil pero tampoco es imposible&#8221;</strong>. Lo más importante al inicio, aparte de irte familiarizando con las herramientas y con los lenguajes que puedes utilizar del abanico de opciones disponibles, es estar al tanto de las arquitecturas que te permitirán crear buenas aplicaciones no sólo desde el enfoque de <em>performance</em> sino también desde un enfoque técnico.</p>
<p>El día de hoy vengo a platicarte de la arquitectura que se utiliza en el desarrollo móvil, su importancia y por qué si aún no la conoces debes considerar seriamente empaparte de ella para cambiar tus prácticas de programación.</p>
<p><span id="more-3378"></span>En Android utilizamos el patrón de arquitectura llamado <strong>Modelo Vista Controlador (MVC)</strong> cuya principal bondad consiste en separar los datos de una aplicación, la interfaz de usuario y la lógica de negocios en tres componentes distintos que se relacionarán para al final tener como resultado nuestra aplicación.</p>
<p>De esta forma podemos seccionar de forma más fácil nuestro equipo de trabajo y dedicarnos a desarrollar nuestros componentes de tal forma que construyamos módulos o librerías con funcionalidades específicas que incluso podríamos reutilizar en proyectos posteriores y no simplemente en el proyecto actual. Para lograr esto, el diseño de la arquitectura de nuestra aplicación juega un papel importante y la capacidad de abstracción que tengamos desarrollada.</p>
<p>Por ejemplo, yo me podría dedicar a desarrollar una librería que me permita hacer conexiones con la API de Twitter. En mis clases puedo diseñar todas las funciones que me ayudarán a lograr las llamadas al protocolo OAuth, aquellas que me permitan twittear, recuperar información de tweets, followers, trending topics, etc. Esta librería, con un buen diseño y abstracción podría ser útil para todos los proyectos que necesiten conectarse con Twitter.</p>
<p>Volvámonos un poco teóricos y expliquemos de qué se tratan los componentes de este modelo:</p>
<p style="text-align: center;"><a title="MVC en Android" href="http://androideity.com/wp-content/uploads/2012/05/mvc.png" target="_blank"><img class="aligncenter  wp-image-3381" style="margin-top: 10px; margin-bottom: 10px;" title="MVC en Android" src="http://androideity.com/wp-content/uploads/2012/05/mvc.png" alt="" width="574" height="385" /></a></p>
<ul>
<li><strong>Modelo.</strong> Nos referimos con modelo a las representaciones que construiremos basadas en la información con la que operará nuestra aplicación. En Java, el modelo viene siendo análogo a los <em>beans</em> que tienen la particularidad de ser reutilizables y nos ayudan a cumplir con el proverbio de oro <em><strong>&#8220;Don´t Repeat Yourself&#8221; (DRY)</strong></em> haciendo a nuestras aplicaciones escalables. En esta parte del modelo también juega la decisión de qué modelo para almacenar información utilizaré. ¿Base de datos? ¿Web services? El modelo que elijas depende obviamente de las necesidades de información de tu aplicación. Actualmente tenemos tutoriales de <a title="Manejo de bases de datos en Android I" href="http://androideity.com/2011/10/12/manejo-de-bases-de-datos-en-android-i/" target="_blank">SQLite</a> y <a title="Consumiendo Web Service SOAP-JSON con Android I" href="http://androideity.com/2011/11/16/consumiendo-web-service-soap-json-con-android-i/" target="_blank">WebServices</a> que te pueden ayudar.</li>
<li><strong>Vista.</strong> La vista no es más que la interfaz con la que va a interactuar el usuario. En Android, las interfaces las construimos en XML. Suelo utilizar mucho la analogía de que esta parte es realmente parecida a lo que hacemos en el desarrollo web con los CSS. Contruimos nuestro esqueleto en XML que equivale al HTML de un sitio. Posteriormente, con ayuda de estilos, que también los escribimos en XML, podemos empezar a darle formato de colores, posiciones, formato, etc. a nuestro esqueleto. Esto equivale a los CSS. Si vienes de un ambiente web, aprovecha ese conocimiento para aplicarlo a crear aplicaciones Android. Si quieres saber más acerca de estilos, checa <a title="Aplicar estilos y temas en Android" href="http://androideity.com/2011/09/14/aplicar-estilos-y-temas-en-android/" target="_blank">este tutorial</a>.</li>
<li><strong>Controlador.</strong> Finalmente nos topamos con el controlador que son todas esas clases que nos ayudarán a darle vida a esas interfaces bonitas que ya construimos y nos permitirán desplegar y consumir información de/para el usuario. Estos controladores se programan en lenguaje Java y son el core de la aplicación.</li>
</ul>
<p>¿Puedes ver la ventaja? Así es, podemos tener perfiles especializados en construir cada uno de estos componentes y tener un resultado de calidad en cada uno y al final obtener una buena aplicación. El truco para que todo salga bien es ser disciplinados para poder ser programadores ordenados, eso es vital en la aplicación de esta arquitectura. Por experiencia, te puedo decir que si te esfuerzas en construir una buena arquitectura de aplicación te ahorrarás muchos dolores de cabeza después y te evitarás tener que duplicar líneas de código que hacen lo mismo, podrás escalar fácilmente tu aplicación, agregar funcionalidades nuevas sin tanto embrollo y ¿por qué no?, facilitar el comienzo de nuevos proyectos.</p>
<p>Para empezar a aplicar esta arquitectura debes saber también su flujo:</p>
<ol>
<li>Todo parte cuando el usuario interactúa con tu aplicación, el jugador actual es la vista. (El usuario quiere mandar un Tweet).</li>
<li>El controlador recibe la notificación de la acción solicitada. (Por medio de un handler verificará si el usuario está logueado o no en su cuenta de Twitter).</li>
<li>El modelo es llamado para ser modificado. (Podemos accesar al caché de tweets que se tenían desde la última vez que el usuario abrió la aplicación y se conectó a Internet y agregar el nuevo tweet).</li>
<li>Una vez que tenemos los nuevos tweets y la publicación que quiere hacer el usuario, el controlador nuevamente toma partida para llamar a la vista correcta que desplegará el Timeline actualizado.</li>
<li>¡Listo! El usuario ya tiene la nueva interfaz para seguir interactuando con la aplicación y volver a iniciar el ciclo cuando solicite otra acción.</li>
</ol>
<p>Otra de las cosas que te ayudan a seguir este modelo es tener ordenado tu proyecto. Utiliza las convenciones de los lenguajes que utilices y las buenas prácticas para que sea más fácil acoplar a tus compañeros de equipo (no siempre uno solo se echa el paquete de hacer una aplicación y menos aún si es una compleja). Te aconsejo empezar con cosas tan sencillas como el nombramiento de paquetes, clases y variables, y después organizar los recursos que vayas a utilizar delegando siempre a cada componente lo que le corresponde.</p>
<p>En la web puedes encontrar muchos recursos que puedes leer para ver ejemplos de la aplicación de esta arquitectura. No es algo nuevo pero algunos no la conocen.  Sin importar que encuentres un ejemplo para web, recuerda que en la programación únicamente cambia el lenguaje, la lógica y la metodología es la que se preserva.</p>
<p>Si aún no utilizas esta arquitectura para construir tus aplicaciones Android creo que es un buen momento para tomarlo en cuenta y empezar a aplicar. <img src='http://androideity.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>&nbsp;</p>
<p style="text-align: center;"><strong>¿Te fue útil este post? ¡Compártelo!</strong></p>
<p style="text-align: center;"><strong></strong></p>
<p>Referencia teórica: <a href="http://es.wikipedia.org/wiki/Modelo_Vista_Controlador" target="_blank">Wikipedia</a></p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://androideity.com/2012/05/10/la-importancia-del-mvc-en-android/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Utilizando el componente SlidingDrawer de Android</title>
		<link>http://androideity.com/2012/05/06/utilizando-el-componente-slidingdrawer-de-android/#utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=utilizando-el-componente-slidingdrawer-de-android</link>
		<comments>http://androideity.com/2012/05/06/utilizando-el-componente-slidingdrawer-de-android/#comments</comments>
		<pubDate>Sun, 06 May 2012 22:19:26 +0000</pubDate>
		<dc:creator>Condesa</dc:creator>
				<category><![CDATA[Programación]]></category>
		<category><![CDATA[conceptos básicos]]></category>
		<category><![CDATA[desarrollo en android]]></category>
		<category><![CDATA[diseño en Android]]></category>
		<category><![CDATA[gui]]></category>
		<category><![CDATA[tutorial]]></category>

		<guid isPermaLink="false">http://androideity.com/?p=3356</guid>
		<description><![CDATA[<a href="http://androideity.com/2012/05/06/utilizando-el-componente-slidingdrawer-de-android/"><img align="left" hspace="5" width="100" height="100" src="http://androideity.com/wp-content/uploads/2012/05/slidingdrawer-150x150.png" class="alignleft wp-post-image tfe" alt="" title="SlidingDrawer" /></a>Siguiendo con los tutoriales que les pueden ayudar a agregar widgets muy atractivos y funcionales en sus aplicaciones, el día de hoy les vengo a platicar de SlidingDrawer, un componente nativo del SDK de Android. Para que te des una &#8230; <a href="http://androideity.com/2012/05/06/utilizando-el-componente-slidingdrawer-de-android/">Sigue leyendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><a title="SlidingDrawer" href="http://androideity.com/wp-content/uploads/2012/05/slidingdrawer.png" target="_blank"><img class="aligncenter size-full wp-image-3374" style="margin-top: 10px; margin-bottom: 10px;" title="SlidingDrawer" src="http://androideity.com/wp-content/uploads/2012/05/slidingdrawer.png" alt="" width="578" height="280" /></a></p>
<p>Siguiendo con los tutoriales que les pueden ayudar a agregar widgets muy atractivos y funcionales en sus aplicaciones, el día de hoy les vengo a platicar de <strong>SlidingDrawer</strong>, un componente nativo del SDK de Android. Para que te des una idea del widget del que estoy hablando, aquí te va una imagen:</p>
<p style="text-align: center;"><a title="SlidingDrawer" href="http://androideity.com/wp-content/uploads/2012/05/slidingdrawer01.png" target="_blank"><img class="aligncenter size-full wp-image-3357" style="margin-top: 10px; margin-bottom: 10px;" title="SlidingDrawer" src="http://androideity.com/wp-content/uploads/2012/05/slidingdrawer01.png" alt="" width="328" height="489" /></a></p>
<p>El menú que aparecía en las primeras versiones de Android se puede &#8220;duplicar&#8221; en funcionalidad con el componente que conoceremos el día de hoy. Para empezar a ver cómo implementar este componente he creado un nuevo proyecto llamado <em>SlidingDrawerTest</em> con la versión 2.2 de Android.</p>
<p><span id="more-3356"></span></p>
<p>1. El primer paso es conocer qué necesitamos para armar la parte visual del <em>SlidingDrawer</em> y para ello resulta bueno echarle siempre un vistazo a lo que nos dice la <a href="http://developer.android.com/reference/android/widget/SlidingDrawer.html" target="_blank">documentación oficial</a>. Este componente puede tener un scroll vertical u horizontal, nuestra selección dependerá obviamente del resultado visual que queramos obtener.</p>
<p>Este widget se compone de dos partes importantes: un <em>handle</em> y un <em>content</em>. El primero corresponde a la imagen/pestaña que dispara los eventos de ocultar y mostrar el contenido; el segundo es el contenido que se mostrará cuando el componente se encuentre en su estado &#8220;abierto&#8221;. Sabiendo esto, podemos empezar a bosquejar qué recursos de imagen y de widgets en XML necesitaremos agregar a nuestra aplicación.</p>
<p>El caso que me llevó a utilizar este componente fue que necesitaba desplegar un Scroll de imágenes que en su estado normal estuviera oculto y que al dar clic sobre una pequeña pestaña se mostraran las imágenes. A continuación te comparto un borrador de lo que al final tendremos con nuestro ejemplo:</p>
<p style="text-align: center;"><a title="SlidingDrawer" href="http://androideity.com/wp-content/uploads/2012/05/slidingdrawer02.jpg" target="_blank"><img class="aligncenter  wp-image-3358" style="margin-top: 10px; margin-bottom: 10px;" title="SlidingDrawer" src="http://androideity.com/wp-content/uploads/2012/05/slidingdrawer02.jpg" alt="" width="600" height="400" /></a></p>
<p>Así que para empezar voy a agregar los recursos de imagen necesarios para poder concluir mi ejemplo. Los recursos que voy a utilizar los puedes descargar desde <a href="http://dl.dropbox.com/u/12316307/recursos_slidingdrawer.zip" target="_blank">este link</a>.</p>
<p>Una vez que descomprimas el archivo, estas imágenes deberás pegarlas en el directorio <em>res &gt; drawable</em> de tu proyecto.</p>
<p>2. Para ir armando la interfaz de usuario te aconsejo que siempre trates de descomponer tu bosquejo en partes sencillas para que puedas trabajar de forma más cómoda el diseño en XML. De acuerdo al bosquejo que te compartí arriba, vamos a empezar por crear el layout de cada una de las imágenes que quiero mostrar en el scroll. Para ello, he creado un archivo llamado <em>imagen_scroll.xml</em> que tiene el siguiente código:</p>
<p style="text-align: center;"> <a title="SlidingDrawer" href="http://androideity.com/wp-content/uploads/2012/05/slidingdrawer03.png" target="_blank"><img class="aligncenter  wp-image-3360" style="margin-top: 10px; margin-bottom: 10px;" title="SlidingDrawer" src="http://androideity.com/wp-content/uploads/2012/05/slidingdrawer03.png" alt="" width="670" height="641" /></a></p>
<p>El resultado visual de este layout es darle formato a cada una de las imágenes que me interesen agregar a un scroll horizontal que se mostrará cuando el <em>SlidingDrawer</em> se abra. El código de arriba debe darte algo como esto:</p>
<p style="text-align: center;"><a title="SlidingDrawer" href="http://androideity.com/wp-content/uploads/2012/05/slidingdrawer04.png" target="_blank"><img class="aligncenter size-full wp-image-3361" style="margin-top: 10px; margin-bottom: 10px;" title="SlidingDrawer" src="http://androideity.com/wp-content/uploads/2012/05/slidingdrawer04.png" alt="" width="178" height="182" /></a></p>
<p>3. El siguiente paso será diseñar la parte del layout que corresponde al <em>SlidingDrawer</em>. Para ello he modificado el archivo <em>main.xml</em> para que contenga el siguiente código:</p>
<p style="text-align: center;"><a title="SlidingDrawer" href="http://androideity.com/wp-content/uploads/2012/05/slidingdrawer05.png" target="_blank"><img class="aligncenter  wp-image-3363" style="margin-top: 10px; margin-bottom: 10px;" title="SlidingDrawer" src="http://androideity.com/wp-content/uploads/2012/05/slidingdrawer05.png" alt="" width="587" height="335" /></a></p>
<p> He definido primero un <em>LinearLayout</em> que abarque todo el espacio de la pantalla y le he definido un atributo <em>android:gravity</em> con <em>bottom|fill_horizontal</em> para que el <em>SlidingDrawer</em> se vaya hasta la parte inferior de la pantalla como lo bosquejé en un principio. El componente <em>SlidingDrawer</em> tiene asignado una ID para que pueda manipularlo desde mi activity y también tiene declarados dos ID&#8217;s más que corresponden al <em>handle</em> y al <em>content</em> que anidará más adelante.</p>
<p>4. Para la parte del <em>handle</em> voy a definir un <em>LinearLayout</em> que contenga la imagen que corresponde al tab que yo quiera según el diseño de mi aplicación. En este paso utilizaremos una de las imágenes que agregamos en el primer paso. Por lo tanto el código que te muestro a continuación lo escribirás dentro de las pestañas <em>&lt;SlidingDrawer&gt;&#8230;&lt;/SlidingDrawer&gt;</em>:</p>
<p style="text-align: center;"><a title="SlidingDrawer" href="http://androideity.com/wp-content/uploads/2012/05/slidingdrawer09.png" target="_blank"><img class="aligncenter  wp-image-3368" style="margin-top: 10px; margin-bottom: 10px;" title="SlidingDrawer" src="http://androideity.com/wp-content/uploads/2012/05/slidingdrawer09.png" alt="" width="436" height="297" /></a></p>
<p>Como podrás observar, es al <em>LinearLayout</em> el componente al cuál le mando a llamar el ID <em>handle</em> que ya había definido el componente. Posteriormente le asigno un ID al <em>ImageView</em> para poder manipularlo desde el código.</p>
<p>5. Para terminar esta parte, voy a agregar, seguido del código anterior, la declaración de los componentes que corresponden al <em>content</em> del <em>slidingDrawer</em>. El código es el siguiente:</p>
<p style="text-align: center;"><a title="SlidingDrawer" href="http://androideity.com/wp-content/uploads/2012/05/slidingdrawer07.png" target="_blank"><img class="aligncenter  wp-image-3365" style="margin-top: 10px; margin-bottom: 10px;" title="SlidingDrawer" src="http://androideity.com/wp-content/uploads/2012/05/slidingdrawer07.png" alt="" width="491" height="486" /></a></p>
<p>En este caso, es un <em>HorizontalScrollView</em> el que llevará la referencia al ID <em>content</em>. Un <em>HorizontalScrollView</em> únicamente puede contener un elemento hijo de forma directa, por lo que le anido un <em>LinearLayout</em> que me ayudará a agregar todas las imágenes que necesite mostrar en el scroll. Como este simplemente es un demo, insertaré de forma &#8220;manual&#8221; las imágenes. En un caso real, estas imágenes podrían agregarse en tiempo de ejecución a través de un Web Service, una Base de datos o cualquier otro método que estemos utilizando para recuperar una serie de imágenes.</p>
<p>Como en un paso anterior hicimos el layout de cada una de las imágenes que contiene el scroll, podemos insertar este diseño dentro de otro con la etiqueta <em>&lt;include&#8230;&gt;</em>. Esta práctica es muy parecida a la utilizada en diseño web en dónde puedes trabajar trozos de la interfaz que se repetirá en más de una página y así no tener que escribir el mismo código muchas veces. En el desarrollo móvil es igual y resulta muy útil y mantenible esta práctica.</p>
<p>6. Ahora que ya tenemos nuestra interfaz lista podemos ejecutar nuestro ejemplo y ver el resultado visual que es el siguiente:</p>
<p style="text-align: center;"><a title="SlidingDrawer" href="http://androideity.com/wp-content/uploads/2012/05/slidingdrawer08.png" target="_blank"><img class="aligncenter  wp-image-3367" style="margin-top: 10px; margin-bottom: 10px;" title="SlidingDrawer" src="http://androideity.com/wp-content/uploads/2012/05/slidingdrawer08.png" alt="" width="540" height="400" /></a></p>
<p>7.  Pues al parecer casi todo quedó bien. El detalle que nos falta trabajar es la imagen de la pestaña. Regularmente queremos que la imagen de la pestaña cambie para indicar su estado. Para ello, contamos con tres métodos que podemos implementar en nuestro componente <em>SlidingDrawer</em> y son los siguientes:</p>
<ul>
<li><em>OnDrawerCloseListener</em>. Que se ejecuta cuando el contenido del componente está oculto.</li>
<li><em>OnDrawerOpenListener</em>. Que se ejecuta cuando el contenido del componente se muestra y pasa a estar abierto.</li>
<li><em>OnDrawerScrollListener.</em> Que se ejecuta cuando el scroll está en proceso.</li>
</ul>
<p>8. Entonces, para cambiar la imagen de la pestaña tenemos que implementar los métodos <em>OnDrawerCloseListener</em> y <em>OnDrawerOpenListener</em>. Para ello, nos vamos a nuestra activity y escribimos el siguiente código:</p>
<p style="text-align: center;"><a title="SlidingDrawer" href="http://androideity.com/wp-content/uploads/2012/05/slidingdrawer10.png" target="_blank"><img class="aligncenter  wp-image-3370" style="margin-top: 10px; margin-bottom: 10px;" title="SlidingDrawer" src="http://androideity.com/wp-content/uploads/2012/05/slidingdrawer10.png" alt="" width="539" height="559" /></a></p>
<p>Para poder implementar los métodos es necesario tener una referencia al componente <em>SlidingDrawer</em>; por esa razón, he declarado una variable de esta clase llamada <em>mySlidingDrawer</em>. Después, como nuestro interés se centra en cambiar la imagen de la pestaña, entonces debemos crear otra variable de tipo <em>ImageView</em> que apunte a la imagen que representa la pestaña.</p>
<p>En el método <em>onCreate()</em> simplemente recuperamos las referencias según los Id&#8217;s que les hayas asignado a tus componentes. Por último, implementamos los métodos aplicando los listeners a la variable <em>mySlidingDrawer</em>. Cuida mucho que tengas las sentencias <em>import</em> necesarias para que tu código no marque errores. Ahora simplemente utilizamos el método <em>setImageResource</em> de la <em>ImageView</em> para cambiar la imagen de la pestaña. Con esto, volvemos a correr el ejemplo y veremos que este detalle ya está resuelto:</p>
<p style="text-align: center;"><a title="SlidingDrawer" href="http://androideity.com/wp-content/uploads/2012/05/slidingdrawer11.png" target="_blank"><img class="aligncenter  wp-image-3372" style="margin-top: 10px; margin-bottom: 10px;" title="SlidingDrawer" src="http://androideity.com/wp-content/uploads/2012/05/slidingdrawer11.png" alt="" width="540" height="400" /></a></p>
<p> Por último, si quieres que adicional al efecto de deslizar que ya presenta este componente quisieras que también se habilitara mostrar el contenido del <em>SlidingDrawer</em> al dar un clic sobre la pantalla puedes agregarlo sin problemas agregando el atributo <em>android:allowSingleTap=true</em>.</p>
<p>Este componente es muy útil y vistoso, espero que te sea de utilidad este tutorial para mejorar cada vez más los diseños de tus aplicaciones.</p>
<p>&nbsp;</p>
<p style="text-align: center;"><strong>¿Te gustó este post? ¡Compártelo!</strong></p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://androideity.com/2012/05/06/utilizando-el-componente-slidingdrawer-de-android/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Modern Combat 2 en tu Android</title>
		<link>http://androideity.com/2012/05/05/modern-combat-2-en-tu-android/#utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=modern-combat-2-en-tu-android</link>
		<comments>http://androideity.com/2012/05/05/modern-combat-2-en-tu-android/#comments</comments>
		<pubDate>Sat, 05 May 2012 17:18:11 +0000</pubDate>
		<dc:creator>jaime</dc:creator>
				<category><![CDATA[Videojuegos]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[GameLoft]]></category>
		<category><![CDATA[Juegos Android]]></category>
		<category><![CDATA[video juegos]]></category>

		<guid isPermaLink="false">http://androideity.com/?p=3336</guid>
		<description><![CDATA[<a href="http://androideity.com/2012/05/05/modern-combat-2-en-tu-android/"><img align="left" hspace="5" width="100" height="100" src="http://androideity.com/wp-content/uploads/2012/05/Modern-Combat-Android-0-150x150.png" class="alignleft wp-post-image tfe" alt="" title="Modern Combat Android" /></a>Twitter: @JaimeYesidLeon  En Androideity queremos traerte solo los mejores juegos para Android, aquellos que están esperando que sean jugados y llevados a su máxima capacidad, es por eso que hoy te acercamos esta recomendación que fue uno de los mejores &#8230; <a href="http://androideity.com/2012/05/05/modern-combat-2-en-tu-android/">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/05/Modern-Combat-Android-0.png"><img class="aligncenter size-full wp-image-3338" style="margin-top: 20px; margin-bottom: 20px;" title="Modern Combat Android" src="http://androideity.com/wp-content/uploads/2012/05/Modern-Combat-Android-0.png" alt="" width="576" height="413" /></a></p>
<p> En Androideity queremos traerte solo los mejores juegos para Android, aquellos que están esperando que sean jugados y llevados a su máxima capacidad, es por eso que hoy te acercamos esta recomendación que fue uno de los mejores juegos en el momento de su estreno ya que no tenía muchos competidores en el ecosistema Android y los dispositivos en los que podía correr no llenaba una lista muy larga, pero con el avance de la tecnología y la gran oferta de dispositivos con sistema operativo Android que hay hoy en el mercado, Modern Combat es una experiencia de juego que no debes dejar pasar. Es cierto que ya tenemos la entrega 3 de este juego, la cual analizaremos en su debido momento, pero queremos mostrarte porque se habló tanto de este juego cuando salió al mercado.</p>
<p><span id="more-3336"></span></p>
<p>Los juegos que están hoy en día llenando nuestros televisores con personajes de acción, misiones a cumplir y enemigos a derrotar, tienen una historia que nos llena de nostalgia cuando recordamos aquellos momentos en donde las gráficas no eran lo importante, sino las emociones que despertaban estos juegos tipo FPS o también llamados tipo “Shooter”. Tal vez si eres muy joven no tuviste la oportunidad de ver como eran los juegos en 3 dimensiones anteriormente, los cuales fueron la base para juegos como Modern Combat, así que te invitamos a que veas un poco de Wolfenstein, un juego que ya tiene sus años, pero que levantaba muchas emociones en su momento:</p>
<p><iframe width="620" height="465" src="http://www.youtube.com/embed/C00n4rDUMNo?fs=1&#038;feature=oembed" frameborder="0" allowfullscreen></iframe></p>
<p>Si viste el video que te invitamos, te podrás dar cuenta que la temática es muy similar al juego que hoy te traemos, Modern Combat 2 de la empresa Gamelof que presenta en su página oficial el juego de la siguiente manera:</p>
<p><em>Termina</em><em> </em><em>lo</em><em> </em><em>que</em><em> </em><em>comenzaste.</em></p>
<p><em>En</em><em> </em><em>Modern</em><em> </em><em>Combat</em><em> </em><em>2:</em><em> </em><em>Black</em><em> </em><em>Pegasus,</em><em> </em><em>completa</em><em> </em><em>la</em><em> </em><em>misión</em><em> </em><em>desvelada</em><em> </em><em>en</em><em> </em><em>la</em><em> </em><em>primera</em><em> </em><em>parte</em><em> </em><em>de</em><em> </em><em>uno</em><em> </em><em>de</em><em> </em><em>los</em><em> </em><em>FPS</em><em> </em><em>más</em><em> </em><em>aclamados</em><em> </em><em>para</em><em> </em><em>Android,</em><em> </em><em>esta</em><em> </em><em>vez</em><em> </em><em>con</em><em> </em><em>frentes</em><em> </em><em>por</em><em> </em><em>todo</em><em> </em><em>el</em><em> </em><em>mundo.</em></p>
<p><em>Modern</em><em> </em><em>Combat</em><em> </em><em>2:</em><em> </em><em>Black</em><em> </em><em>Pegasus</em><em> </em><em>mejora</em><em> </em><em>el</em><em> </em><em>juego</em><em> </em><em>ya</em><em> </em><em>ejemplar</em><em> </em><em>del</em><em> </em><em>primer</em><em> </em><em>juego</em><em> </em><em>de</em><em> </em><em>Modern</em><em> </em><em>Combat</em><em> </em><em>con</em><em> </em><em>una</em><em> </em><em>asombrosa</em><em> </em><em>inmersión</em><em> </em><em>en</em><em> </em><em>una</em><em> </em><em>experiencia</em><em> </em><em>de</em><em> </em><em>guerra</em><em> </em><em>moderna</em><em> </em><em>y</em><em> </em><em>con</em><em> </em><em>uno</em><em> </em><em>de</em><em> </em><em>los</em><em> </em><em>modos</em><em> </em><em>multijugador</em><em> </em><em>FPS</em><em> </em><em>más</em><em> </em><em>completos</em><em> </em><em>para</em><em> </em><em>Android.</em></p>
<p>Y el video de presentación oficial del juego es el siguiente:</p>
<p><iframe width="620" height="349" src="http://www.youtube.com/embed/yMMPDSkk7Ao?fs=1&#038;feature=oembed" frameborder="0" allowfullscreen></iframe></p>
<p>No necesita mucha explicación este juego, cuentas con diferentes armas para luchar en diferentes misiones que te plantean a lo largo de los diferentes continentes, pero si eres de Colombia, el último capitulo te será muy familiar, así que si sabes a que nos referimos compártelo en los comentarios a ver si acertaste. Pero no solo se queda en las misiones, también tienen la posibilidad de jugar en línea tanto por internet como en red WiFi con amigos que tengas cerca, creando tus propios sesiones en los diferentes escenarios.</p>
<p style="text-align: center;"><a href="http://androideity.com/wp-content/uploads/2012/05/Modern-Combat-Android-1.png"><img class="aligncenter size-full wp-image-3339" style="margin-top: 20px; margin-bottom: 20px;" title="Modern Combat Android" src="http://androideity.com/wp-content/uploads/2012/05/Modern-Combat-Android-1.png" alt="" width="448" height="298" /></a></p>
<p> En la pantalla principal del juego encontrarás el joystick para desplazar al personaje principal por los diferentes escenarios, el botón de disparar, el de apuntar, el de agacharse, el de pausa, así como las diferentes opciones de armas, y las granadas o los gases lacrimógenos para dispersarse y distraer a tus oponentes. Para mover la vista principal debes desplazar tu dedo en la parte derecha de la pantalla y cuando te encuentras muy cerca a un oponente aparece la opción de acuchillar a tu oponente. Así que tienes mas de 7 controles que debes tener en cuenta para jugar y cumplir todas las misiones.</p>
<p style="text-align: center;"><a href="http://androideity.com/wp-content/uploads/2012/05/Modern-Combat-Android-2.png"><img class="aligncenter size-full wp-image-3340" style="margin-top: 20px; margin-bottom: 20px;" title="Modern Combat Android" src="http://androideity.com/wp-content/uploads/2012/05/Modern-Combat-Android-2.png" alt="" width="448" height="298" /></a></p>
<p> Lo que es más destacable de este grandioso juego es su modo multijugador en el cual puede jugar en línea hasta con 10 usuarios compañeros, y 10 oponentes, en diferentes misiones como rescata la bandera, batalla por equipos y desactivar la bomba. Sencillamente debes crear una cuenta en Gameloft, en donde en primera instancia tienes nivel 1 y a medida que vallas derrotando oponentes,  y ganando misiones, vas subiendo tu nivel y ganando mejores armas, de las 15 diferentes que tienes disponibles. No puedes dejar de probar este modo on-line porque es lo mejor de este juego, y siempre encontraras una sesión activa, o sino puedes crear la propia e invitar a tus amigos para que se unan. Mi nombre de usuario es JaimeYesidLeon, si nos encontramos y luchamos juntos.</p>
<p style="text-align: center;"><a href="http://androideity.com/wp-content/uploads/2012/05/Modern-Combat-Android-3.png"><img class="aligncenter size-full wp-image-3341" style="margin-top: 20px; margin-bottom: 20px;" title="Modern Combat Android" src="http://androideity.com/wp-content/uploads/2012/05/Modern-Combat-Android-3.png" alt="" width="448" height="298" /></a></p>
<p> El juego está calificado en la Play Store en 4.0, juego que lo pone entre los mejores de su categoría; hay que tener en cuenta que los problemas van a surgir si no tienes tu teléfono libre de cache, y si no tienes un buen espacio de memoria libre, además la memoria <strong><em>RAM</em></strong> del móvil debe estar libre en su mayor medida, y con esto nos referimos a que no estén muchas aplicaciones corriendo al tiempo. Para que tu juego funcione ok debe tener por lo menos Android 2.1, y al menos 600MB en memoria libre para la descarga de los datos adicionales. Los comentarios en las calificaciones en general son muy buenos, aunque también se encontrarán problemas inevitables:</p>
<p style="text-align: center;"><a href="http://androideity.com/wp-content/uploads/2012/05/Modern-Combat-Android-4.png"><img class="aligncenter size-full wp-image-3337" style="margin-top: 20px; margin-bottom: 20px;" title="Modern Combat Android" src="http://androideity.com/wp-content/uploads/2012/05/Modern-Combat-Android-4.png" alt="" width="448" height="248" /></a></p>
<p> <strong>Observaciones</strong><strong> </strong><strong>personales</strong></p>
<p>Después de comprar este genial juego, haber cumplido todas las misiones y estar jugando en línea por un muy buen tiempo, tengo que decir que es un juego excepcional, tan solo el intro hace que quieras cumplir todas las misiones a cabalidad lo más pronto posible; entras directamente en la historia que traes desde la primera entrega, además la manera en que se desarrolla el juego hace que te enfoques en la acción pura, te ponen de una vez en el campo de batalla y nada de entrenamientos aburridos, de una a lanzarte a cumplir tus misiones.</p>
<p>Los gráficos son magníficos no tienen nada que discutir, son muy realistas y acordes a cada misión que te es asignada, además el ambiente es bastante bueno animado con buenos efectos de guerra en vivo, y enemigos muy bien diferenciados. Y que tal el modo multijugador que te mostramos:</p>
<p><iframe width="620" height="349" src="http://www.youtube.com/embed/uQ05HS6MC4A?fs=1&#038;feature=oembed" frameborder="0" allowfullscreen></iframe></p>
<p>Como te decíamos, lo mejor del juego es su modo multijugador, eso sí es la guerra en vivo, no tienes chance alguno, es salir al campo a ayudar a tu equipo a derrotar a los malosos del equipo contrario, o rescatando la bandera que te han capturado, o cuando estás solo debes luchar contra cualquiera que se te aparezca en frente; y que decir cuando te reúnes con tus amigos y formas un grupo especial, es una locura completa que no quieres dejar de jugar.</p>
<p>Así que no dejes de vivir una experiencia de un juego muy bien logrado que te hará derrochar adrenalina y vencer al que se te pase por el frente, te dejamos el enlace para lo vayas directo a descargarlo.</p>
<p><strong>Descargalo directamente:</strong></p>
<p style="text-align: center;"><a title="Modern Combat Google Play" href="https://play.google.com/store/apps/details?id=com.gameloft.android.ANMP.GloftBPHM.ML&amp;feature=search_result#?t=W251bGwsMSwxLDEsImNvbS5nYW1lbG9mdC5hbmRyb2lkLkFOTVAuR2xvZnRCUEhNLk1MIl0." target="_blank"><img class="aligncenter size-full wp-image-3347" style="margin-top: 20px; margin-bottom: 20px;" title="Google-Play" src="http://androideity.com/wp-content/uploads/2012/05/Google-Play2.jpg" alt="" width="375" height="146" /></a></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://androideity.com/2012/05/05/modern-combat-2-en-tu-android/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>La herramienta draw9patch del SDK de Android</title>
		<link>http://androideity.com/2012/04/26/la-herramienta-draw9patch-del-sdk-de-android/#utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=la-herramienta-draw9patch-del-sdk-de-android</link>
		<comments>http://androideity.com/2012/04/26/la-herramienta-draw9patch-del-sdk-de-android/#comments</comments>
		<pubDate>Thu, 26 Apr 2012 22:45:07 +0000</pubDate>
		<dc:creator>Condesa</dc:creator>
				<category><![CDATA[Programación]]></category>
		<category><![CDATA[conociendo Android]]></category>
		<category><![CDATA[desarrollo en android]]></category>
		<category><![CDATA[herramientas]]></category>
		<category><![CDATA[sdk]]></category>

		<guid isPermaLink="false">http://androideity.com/?p=3316</guid>
		<description><![CDATA[<a href="http://androideity.com/2012/04/26/la-herramienta-draw9patch-del-sdk-de-android/"><img align="left" hspace="5" width="100" height="100" src="http://androideity.com/wp-content/uploads/2012/04/9patch09-150x150.png" class="alignleft wp-post-image tfe" alt="" title="9patch09" /></a>El SDK de Android nos proporciona muchas herramientas que nos ayudarán a hacer más fácil la tarea de crear aplicaciones Android. La mayoría de las veces me he encontrado con las dudas comunes de &#8220;¿Cómo mejoro el diseño de mis &#8230; <a href="http://androideity.com/2012/04/26/la-herramienta-draw9patch-del-sdk-de-android/">Sigue leyendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><a title="Imagen 9-patch" href="http://androideity.com/wp-content/uploads/2012/04/9patch09.png" target="_blank"><img class="aligncenter size-full wp-image-3331" style="margin-top: 10px; margin-bottom: 10px;" title="9patch09" src="http://androideity.com/wp-content/uploads/2012/04/9patch09.png" alt="" width="578" height="280" /></a></p>
<p>El SDK de Android nos proporciona muchas herramientas que nos ayudarán a hacer más fácil la tarea de crear aplicaciones Android. La mayoría de las veces me he encontrado con las dudas comunes de &#8220;¿Cómo mejoro el diseño de mis aplicaciones?&#8221;. Esta es una pregunta compleja porque involucra muchos <em>skills</em> y conocer cómo darle ese <em>look&amp;feel</em> que vaya con la idea de lo que hace nuestra aplicación.</p>
<p>En el desarrollo de cualquier aplicación móvil hay que tomar en cuenta siempre tener un diseñador en nuestro equipo que nos construya el arte de la aplicación y quien nos genere también los recursos (imágenes en su mayoría) que utilizaremos en las interfaces. Si bien esto es básico, también lo es conocer cómo preparar esas imágenes para que se muestren lo mejor posible en las distintas resoluciones y tamaños de pantalla de los dispositivos Android en donde correrá nuestra aplicación.</p>
<p><span id="more-3316"></span></p>
<p>Por esa razón, hoy te presento una herramienta del SDK de Android que te ayudará a que tus imágenes puedan conservar su calidad sin importar el tamaño de pantalla de tus dispositivos.</p>
<p>Esta herramienta se llama <strong>draw9patch</strong> y nos ayudará a generar archivos <strong>9-patch</strong> a partir de imágenes PNG. Pero, ¿qué son los archivos <strong>9-patch</strong>? Un gráfico <strong>9-patch</strong> es básicamente es una imagen de mapa de bits extensible, es decir, un tipo de imagen que Android puede cambiar de tamaño automáticamente para ajustarse a la vista a la que se le ha sido asignado como background.</p>
<p>Para que esto vaya quedando más claro, pasemos al ejemplo para que puedas aterrizar los alcances de esta herramienta.</p>
<p>1. Actualmente tengo un un proyecto llamado <em>Imagen9Patch</em> con la versión Android 2.1.</p>
<p>2. En la carpeta <em>drawable</em> he agregado dos imágenes que me servirán como fondo para un botón (para cuando se encuentre en su estado normal y cuando sea presionado por el usuario). Estas imágenes las puedes descargar desde <a href="http://dl.dropbox.com/u/12316307/drawable.rar" target="_blank">este link</a>. (En caso de no tener la carpeta <em>drawable</em>, tendrás que crearla en tu proyecto).</p>
<p>3. Para definir la imagen que se desplegará como fondo del botón según el estado del mismo, he creado un archivo XML dentro de la misma carpeta de <em>drawable</em> cuyo nombre es <em>fondo_boton.xml</em> y cuyo código puedes ver a continuación:</p>
<p style="text-align: center;"> <a title="Imagen 9-patch" href="http://androideity.com/wp-content/uploads/2012/04/9patch011.png" target="_blank"><img class="aligncenter size-full wp-image-3321" style="margin-top: 10px; margin-bottom: 10px;" title="9patch01" src="http://androideity.com/wp-content/uploads/2012/04/9patch011.png" alt="" width="707" height="212" /></a></p>
<p>4. Una vez definido esto, he agregado un archivo de estilos dentro de la carpeta <em>values</em>. Mi archivo se llama <em>styles.xml</em> y su contenido es el siguiente:</p>
<p style="text-align: center;"><a title="Imagen 9-patch" href="http://androideity.com/wp-content/uploads/2012/04/9patch02.png" target="_blank"><img class="aligncenter size-full wp-image-3322" style="margin-top: 10px; margin-bottom: 10px;" title="9patch02" src="http://androideity.com/wp-content/uploads/2012/04/9patch02.png" alt="" width="599" height="233" /></a></p>
<p>5. Por último, he modificado el archivo <em>main.xml</em> de la carpeta <em>res &gt; layout</em> para agregar los cuatro botones en la interfaz de usuario. El código de este archivo es el siguiente:</p>
<p style="text-align: center;"><a title="Imagen 9-patch" href="http://androideity.com/wp-content/uploads/2012/04/9patch03.png" target="_blank"><img class="aligncenter size-full wp-image-3323" style="margin-top: 10px; margin-bottom: 10px;" title="9patch03" src="http://androideity.com/wp-content/uploads/2012/04/9patch03.png" alt="" width="627" height="463" /></a></p>
<p>**Cada uno de los botones tiene un texto, por ello, por cada botón hay un elemento de cadena de texto dentro del archivo <em>strings.xml</em> del directorio <em>res &gt; values</em>.</p>
<p>6. El resultado es el siguiente:</p>
<p style="text-align: center;"><a title="Imagen 9-patch" href="http://androideity.com/wp-content/uploads/2012/04/9patch04.png" target="_blank"><img class="aligncenter size-full wp-image-3324" style="margin-top: 10px; margin-bottom: 10px;" title="9patch04" src="http://androideity.com/wp-content/uploads/2012/04/9patch04.png" alt="" width="479" height="175" /></a></p>
<p>Como puedes ver, los bordes de las imágenes se ven borrosas porque al parecer la imagen es más chica para el tamaño de los botones. La solución &#8220;más sencilla&#8221; sería pedirle a nuestro diseñador una imagen más grande para que el fondo de los botones mejorara su calidad en la pantalla pero hay otra solución: Utilizar imágenes <strong>9-patch</strong>.</p>
<p>Para crear estas imágenes será necesario abrir la herramienta <strong>Draw9Patch</strong> que se encuentra en el directorio /<strong><em>tools</em></strong> del SDK de Android. Se trata de un archivo <em><strong>.bat</strong></em>. Lo ejecutas y enseguida verás la siguiente pantalla:</p>
<p style="text-align: center;"><a title="Imagen 9-patch" href="http://androideity.com/wp-content/uploads/2012/04/9patch05.png" target="_blank"><img class="aligncenter size-large wp-image-3325" style="margin-top: 10px; margin-bottom: 10px;" title="9patch05" src="http://androideity.com/wp-content/uploads/2012/04/9patch05-1024x602.png" alt="" width="620" height="364" /></a></p>
<p>El primer paso es cargar la imagen que queremos convertir. Para ello, podemos arrastrar y soltar la imagen dentro de la ventana o bien ir a la opción <em>File &gt; Open 9-patch&#8230; </em>y elegir la imagen deseada.</p>
<p>Yo he elegido cargar la imagen <em>button.png</em> del ejemplo arriba mencionado. Cuando carguemos la imagen la pantalla se nos mostrará como sigue:</p>
<p><a href="http://androideity.com/wp-content/uploads/2012/04/9patch06.png"><img class="aligncenter size-large wp-image-3327" title="9patch06" src="http://androideity.com/wp-content/uploads/2012/04/9patch06-1024x601.png" alt="" width="620" height="363" /></a></p>
<p>En la parte principal tenemos nuestra imagen y nuestra área de trabajo donde aplicaremos los cambios necesarios. En la parte derecha se nos muestra la vista previa de cómo reaccionará nuestra imagen cuando el elemento se &#8220;estire&#8221; a lo ancho o a lo largo de la pantalla. Recuerda que estas imágenes las estamos ocupando como fondo de un botón, pero también pueden ser el fondo de un <em>TextView</em> o de cualquier otro elemento. En la parte inferior tenemos algunas herramientas como el zoom que nos permitirán tener mayor precisión al trabajar la imagen que hemos cargado.</p>
<p>Ahora bien, el chiste de la herramienta consiste en marcar líneas fuera del elemento y sobre un espacio que necesitemos que se expanda para ayudar a que la imagen no se vea pixelada. Cada vez que agreguemos una línea sobre la imagen podemos ver el resultado en la vista previa de la herramienta. Por ejemplo:</p>
<p style="text-align: center;"><a title="Imagen 9-patch" href="http://androideity.com/wp-content/uploads/2012/04/9patch07.png" target="_blank"><img class="aligncenter size-large wp-image-3328" style="margin-top: 10px; margin-bottom: 10px;" title="9patch07" src="http://androideity.com/wp-content/uploads/2012/04/9patch07-1024x604.png" alt="" width="620" height="365" /></a></p>
<p> En este caso he agregado cuatro líneas que representan el espacio que se repetirá para que las esquinas no se tengan que pixelear cuando el fondo se estire en un componente. Para poder visualizar las zonas que estará repitiendo Android cuando redimensione la imagen bastará con presionar el botón <em>Show bad patches/Hide bad patches</em> como te muestro a continuación:</p>
<p style="text-align: center;"><a title="Imagen 9-patch" href="http://androideity.com/wp-content/uploads/2012/04/9patch08.png" target="_blank"><img class="aligncenter size-large wp-image-3329" style="margin-top: 10px; margin-bottom: 10px;" title="9patch08" src="http://androideity.com/wp-content/uploads/2012/04/9patch08-1024x604.png" alt="" width="620" height="365" /></a></p>
<p>Cabe mencionar que las líneas negras que dibujamos son de un pixel, cuando queramos borrar alguna presionamos <em>Shift</em> y damos clic sobre la porción de la línea a borrar que se representa por cada uno de los cuadros que conforman nuestra área de trabajo. Sencillo, ¿cierto?.</p>
<p>Cuando ya estemos satisfechos con el resultado que se muestra en la vista previa podemos pasar a guardar la imagen con la opción <em>File &gt; Save 9-patch&#8230;</em> En este caso yo las llamaré tal cuál se llama la imagen original en PNG. Esta primera imagen entonces llevará el nombre de <em>button.9.png</em>.</p>
<p>Haré exactamente el mismo procedimiento para la segunda imagen para obtener <em>button_over.9.png</em>.</p>
<p>Cuando ya tenga las dos imágenes pasaré a agregarlas a mi proyecto. Para ello, deberás eliminar primero las imágenes que tienes actualmente en la carpeta drawable y posteriormente agregar las imágenes <strong>9-patch</strong>.</p>
<p>Ahora volvemos a ejecutar la aplicación y veremos cómo nuestra interfaz ya ha mejorado notablemente. Los botones ahora no se ven deformes y los bordes de los mismos tienen un mejor aspecto.</p>
<p style="text-align: center;"><a title="Imagen 9-patch" href="http://androideity.com/wp-content/uploads/2012/04/SC20120426-173306.png" target="_blank"><img class="aligncenter size-full wp-image-3330" style="margin-top: 10px; margin-bottom: 10px;" title="9-patch08" src="http://androideity.com/wp-content/uploads/2012/04/SC20120426-173306.png" alt="" width="480" height="202" /></a></p>
<p>Pues bien, este es el funcionamiento básico del uso de esta herramienta y que podemos utilizar en escenarios mucho más complej0s para lidiar con el rollo de las resoluciones de pantalla y también cuando tenemos elementos que variarán su tamaño según el contenido que tengan.</p>
<p>Espero que te sirva este tip, ya tienes una herramienta más para mejorar el aspecto de tus aplicaciones.</p>
<p>&nbsp;</p>
<p style="text-align: center;"><strong>¿Te gustó este post? ¡Compártelo!</strong></p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://androideity.com/2012/04/26/la-herramienta-draw9patch-del-sdk-de-android/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Juega Avatar en tu Android</title>
		<link>http://androideity.com/2012/04/14/juega-avatar-en-tu-android/#utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=juega-avatar-en-tu-android</link>
		<comments>http://androideity.com/2012/04/14/juega-avatar-en-tu-android/#comments</comments>
		<pubDate>Sat, 14 Apr 2012 18:25:28 +0000</pubDate>
		<dc:creator>jaime</dc:creator>
				<category><![CDATA[Videojuegos]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[Avatar]]></category>
		<category><![CDATA[GameLoft]]></category>
		<category><![CDATA[Juegos Android]]></category>

		<guid isPermaLink="false">http://androideity.com/?p=3254</guid>
		<description><![CDATA[<a href="http://androideity.com/2012/04/14/juega-avatar-en-tu-android/"><img align="left" hspace="5" width="100" height="100" src="http://androideity.com/wp-content/uploads/2012/04/Avatar-Android-0-150x150.png" class="alignleft wp-post-image tfe" alt="" title="Avatar Android" /></a>Twitter: @JaimeYesidLeon  Debo admitir que la mayoría de juegos para Android que recomendábamos en Androideity son geniales pero son casi exclusivamente dirigido a hombres, ya que la mayoría son de lucha y autos, a excepción de Angry Birds que está &#8230; <a href="http://androideity.com/2012/04/14/juega-avatar-en-tu-android/">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/04/Avatar-Android-0.png"><img class="aligncenter size-full wp-image-3256" style="margin-top: 20px; margin-bottom: 20px;" title="Avatar Android" src="http://androideity.com/wp-content/uploads/2012/04/Avatar-Android-0.png" alt="" width="559" height="333" /></a></p>
<p> Debo admitir que la mayoría de juegos para Android que recomendábamos en Androideity son geniales pero son casi exclusivamente dirigido a hombres, ya que la mayoría son de lucha y autos, a excepción de Angry Birds que está dirigido a todo tipo de público, así que hoy traemos un juego que no está precisamente dirigido a las mujeres pero sí a todo aquel que desee pasar unas largas horas de entretenimiento y pasar un rato muy agradable en las laderas y selvas de Pandora, sigue leyendo que de seguro no te arrepentirás.</p>
<p><span id="more-3254"></span></p>
<p>En el mundo del cine hay miles de películas de diferentes géneros, estilos y temáticas, pero son mucho menos aquellas que generan tanta expectativa antes de ser estrenadas, y ese es el caso de Avatar, cuya película generó una atención impresionante por parte de los medios en todo el mundo a tal punto que mucha gente se asustaba de lo que podía generar esta película después de verla. Y es que James Cameron es un sello de éxito en el mundo del cine y con tantos rumores que se generaron detrás del estreno de Avatar todo el mundo esperaba que esta película cambiara el cine por completo, pero después de que ya pasó toda esta avalancha y la vimos nos dimos cuenta que sí es una gran película pero que no logró cambiar el cine como se creía. Te traemos el trailer oficial de esta película para que recuerdes un poco:</p>
<p><iframe width="620" height="349" src="http://www.youtube.com/embed/kbA9TfGphOI?fs=1&#038;feature=oembed" frameborder="0" allowfullscreen></iframe></p>
<p>Sin duda alguna esta película es genial, y por eso el juego no podía tardar en llegar a nuestras consolas PS3 y Xbox donde consiguió llamar la atención de los fanáticos del género de aventura y acción de los videojuegos. Y es que si viste la película sabrás que las animaciones gráficas llevadas al cine serían fácilmente adaptable a las consolas debido a la manera en que se desarrolló la película- Mira este video que encontré en donde hablan sobre este juego para las consolas y el PC:</p>
<p><iframe width="620" height="349" src="http://www.youtube.com/embed/jAOB7XjoKiM?fs=1&#038;feature=oembed" frameborder="0" allowfullscreen></iframe></p>
<p>Como pudiste darte cuenta en el video, Avatar en videojuego tiene muchas cosas para ofrecernos, y también ha llegado la versión para dispositivos Android para ofrecernos horas de juego y entretenimiento puro. Gameloft se ha dado cuenta del potencial de Android en el entretenimiento y con el siguiente texto nos invita a jugar:</p>
<p><em>Adéntrate en el espectacular mundo de James Cameron&#8217;s Avatar™ y comienza un viaje de redención y descubrimiento, dos décadas antes de los acontecimientos de la película. Como capitán Ryan Lorenz, te convertirás en el primer Avatar y deberás transmitir tu consciencia al primer cuerpo híbrido de Na&#8217;vi y humano. ¿Podrás comprender la transformación que estás a punto de vivir? ¿Usarás tus poderes para salvar a los Na&#8217;vi o trabajarás con los humanos para destruir su mundo?</em></p>
<p><iframe width="620" height="465" src="http://www.youtube.com/embed/iPiRRlP1e6c?fs=1&#038;feature=oembed" frameborder="0" allowfullscreen></iframe></p>
<p>Como se menciona en la pagina de Gameloft, este juego no representa exactamente la película ya que se desarrolla 20 años atrás de la misma, es decir que el protagonista del juego es el hermano que murió y que fue el primer Avatar en explorar el mundo de Pandora, así que tú serás este personaje llegando al pueblo de los Navi y ayudarlos en contra de los humanos que quieren destruir su tierra y para esto te enfrentaras a los humanos, a los animales propios de Pandora avanzando hasta llegar al árbol sagrado, pero ya estando aquí se te asignarán misiones especiales que tendrás que cumplir para avanzar en el juego.</p>
<p style="text-align: center;"><a href="http://androideity.com/wp-content/uploads/2012/04/Avatar-Android-1.png"><img class="aligncenter size-full wp-image-3257" style="margin-top: 20px; margin-bottom: 20px;" title="Avatar Android" src="http://androideity.com/wp-content/uploads/2012/04/Avatar-Android-1.png" alt="" width="448" height="269" /></a></p>
<p>En esta imagen encuentras los diferentes controles e indicadores que usarás a lo largo del juego, el joystick en la parte izquierda, en la parte derecha baja encuentras 3 botones aquí representados el primero con unas flechas hacia arriba que será el que usas para saltar, después encuentras un botón que tiene una figura como de lanza y es con el cual luchas, golpeas, lanzas flechas y disparas, pero cuando te encuentras en una situación en la que tu personaje debe caer o agacharse entonces la imagen de este botón cambia a unas flechas que apuntan hacia abajo o si debes tener acceso al algún lugar o tener interacción con las plantas revitalizadoras entonces cambia a la forma de una mano, y el tercer botón que encuentras en esta parte te sirve para cambiar las armas que tienes a tu disposición, como lo son el garrote, el arco y las ametralladoras que tienes para atacar a tus oponentes.</p>
<p style="text-align: center;"><a href="http://androideity.com/wp-content/uploads/2012/04/Avatar-Android-2.png"><img class="aligncenter size-full wp-image-3258" style="margin-top: 20px; margin-bottom: 20px;" title="Avatar Android" src="http://androideity.com/wp-content/uploads/2012/04/Avatar-Android-2.png" alt="" width="448" height="269" /></a></p>
<p> En la parte izquierda superior de la imagen encuentras el nivel de vida que tienes y que desciende cuando te atacan o cuando caes de lugares muy altos, pero si te fijas bien tienes un especie de botón el cual es el de pausa en donde entras a ver el mapa del lugar en donde te encuentras, así como las misiones que debes cumplir y la explicación del juego mismo. Para terminar en la parte derecha superior encuentras un símbolo que usas para sacar el máximo de tu poder al estilo Goku en Dragon Ball.</p>
<p style="text-align: center;"><a href="http://androideity.com/wp-content/uploads/2012/04/Avatar-Android-3.png"><img class="aligncenter size-full wp-image-3259" style="margin-top: 20px; margin-bottom: 20px;" title="Avatar Android" src="http://androideity.com/wp-content/uploads/2012/04/Avatar-Android-3.png" alt="" width="448" height="278" /></a></p>
<p>El juego tiene 15 niveles que sobrepasar para llegar al final del juego, en cada uno tienes que llegar de un punto A hasta un punto B sorteando los diferentes inconvenientes que se te presenten en el camino, pero el capitulo 7 y en el 15 te detienes en el árbol sagrado y debes cumplir con diferentes misiones y encargos que te hacen, así que estos son los capítulos del juego que son mas largos. Pero además en el juego tendrás interacción con los caballos y aves propios de Pandora que viste en la película haciendo que no se vuelva tan monótono y sea más interactivo.</p>
<p style="text-align: center;"><a href="http://androideity.com/wp-content/uploads/2012/04/Avatar-Android-4.png"><img class="aligncenter size-full wp-image-3260" style="margin-top: 20px; margin-bottom: 20px;" title="Avatar Android" src="http://androideity.com/wp-content/uploads/2012/04/Avatar-Android-4.png" alt="" width="448" height="267" /></a></p>
<p> No tenemos calificaciones ni comentarios de los usuarios porque no se encuentra en el Android Market, para poder adquirir este juego tendrás que ir directamente a la página de Gameloft y hacerte del mismo. De los requerimientos no sabemos mucho, pero debes tener al menos unos 800Mbytes en memoria libres para usar al momento de descargar el juego y los datos del mismo. Como mínimo de seguro tu versión del sistema debe ser 2.1 o mayor para que no tengas problemas en el momento de la descarga.</p>
<p>&nbsp;</p>
<p><strong>Observaciones personales </strong></p>
<p>Después de comprar este juego y terminarlo, tengo que decir que me ha gustado muchísimo, es de esos que te dan ganas de jugarlo a cada rato, de superarlo y de seguir con una segunda parte al tener una gran dosis de aventura, retos no muy difíciles de sortear y con mucha variedad en sus ambientes, sobre todo al final de la partida.</p>
<p>Por ser un juego en alta definición sus imágenes son realmente sobresalientes y de mucho colorido, tanto los personajes como los ambientes hacen que te sientas en el mundo que vimos en la película, sin olvidar la trama que lleva detrás.</p>
<p style="text-align: center;"><a href="http://androideity.com/wp-content/uploads/2012/04/Avatar-Android-5.png"><img class="aligncenter size-full wp-image-3261" title="Avatar Android" src="http://androideity.com/wp-content/uploads/2012/04/Avatar-Android-5.png" alt="" width="448" height="269" /></a></p>
<p> Su trama hace que sea un juego dirigido a todo público, mujeres, niños, jóvenes, adultos, gamers apasionados y todo aquel que desee pasar un rato agradable de entretenimiento con su móvil, pero lo mejor de todo esta al final del juego, así que no debes dejar de terminar los 15 niveles porque de seguro la gente de Gameloft no está de brazos cruzados y traerá una segunda parte de este genial juego.</p>
<p>Hemos hecho un video con mucho cariño sobre este fabuloso juego que espero te guste y te animes a probarlo:</p>
<p><iframe width="620" height="465" src="http://www.youtube.com/embed/-_xhmDjtRXc?fs=1&#038;feature=oembed" frameborder="0" allowfullscreen></iframe></p>
<p>Los puntos en contra son pocos, pero tenemos que mencionar que no hay la posibilidad de jugar niveles anteriores al que te encuentras, ósea que si vas en el capitulo 8 y quieres jugar el 3 de nuevo porque te ha gustado mucho pues no lo puedes hacer, y si completas todos los 15 niveles llegando hasta el final pues debes continuar con una nueva partida desde el nivel 1 perdiendo la autonomía del juego y te obligan a llevar un hilo completo sin opción de variar, eso no me gustó para nada.</p>
<p>Como en la buenas películas lo malo siempre es el final, así como en los juegos y Avatar para Android sigue este mismo error, tiene un final que a mi modo de ver deja mucho que desear; tengo que admitir que el último nivel es el mejor de todos pero el final lo deja a uno preguntándose, “¿Qué pasó?” Entiendo que tal vez era por seguir la línea de la película, pero no deja de ser un punto en contra.</p>
<p style="text-align: center;"><a href="http://androideity.com/wp-content/uploads/2012/04/Avatar-Android-6.png"><img class="aligncenter size-full wp-image-3255" style="margin-top: 20px; margin-bottom: 20px;" title="Avatar Android" src="http://androideity.com/wp-content/uploads/2012/04/Avatar-Android-6.png" alt="" width="448" height="269" /></a></p>
<p> Como puedes ver, no tiene muchas cosas que reprochar este juego y una de esas pocas cosas es que no lo encuentras en el Android Market. ¿Por qué? No sé, eso lo responderá la gente de Gameloft y sus razones tendrá, por eso debes ir directamente a la página de ellos y comprarlo, cuando lo compré me costo tan solo 2 dólares americanos, debido a una promoción que tenían.</p>
<p style="text-align: center;"><a title="Gameloft" href="http://www.gameloft.es/juegos-android/avatar/?adid=27351" target="_blank"><img class="aligncenter size-full wp-image-3270" style="margin-top: 20px; margin-bottom: 20px;" title="Gameloft" src="http://androideity.com/wp-content/uploads/2012/04/Gameloft.jpg" alt="" width="267" height="189" /></a></p>
<p>Como siempre espero que te guste nuestra recomendación, y si tienes comentarios al respecto escríbenos, que en Androideity estamos siempre prestos a escucharte.</p>
]]></content:encoded>
			<wfw:commentRss>http://androideity.com/2012/04/14/juega-avatar-en-tu-android/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>SMS en Android usando Eclipse</title>
		<link>http://androideity.com/2012/04/03/sms-en-android-usando-eclipse/#utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=sms-en-android-usando-eclipse</link>
		<comments>http://androideity.com/2012/04/03/sms-en-android-usando-eclipse/#comments</comments>
		<pubDate>Tue, 03 Apr 2012 16:21:21 +0000</pubDate>
		<dc:creator>jaime</dc:creator>
				<category><![CDATA[Programación]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[conociendo Android]]></category>
		<category><![CDATA[desarrollo en android]]></category>
		<category><![CDATA[SMS Android]]></category>
		<category><![CDATA[tutorial]]></category>

		<guid isPermaLink="false">http://androideity.com/?p=3223</guid>
		<description><![CDATA[<a href="http://androideity.com/2012/04/03/sms-en-android-usando-eclipse/"><img align="left" hspace="5" width="100" height="100" src="http://androideity.com/wp-content/uploads/2012/04/SMS-Android-150x150.png" class="alignleft wp-post-image tfe" alt="" title="SMS Android" /></a>Twitter: @JaimeYesidLeon Cuando estamos programando aplicaciones para un dispositivo móvil como un Android, contamos con una variedad de recursos que enriquecerán nuestras aplicaciones si las usamos en conjunto con nuestra creatividad e imaginación. Dentro de estos recursos uno de los &#8230; <a href="http://androideity.com/2012/04/03/sms-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"><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/04/SMS-Android.png"><img class="aligncenter size-full wp-image-3224" style="margin-top: 20px; margin-bottom: 20px;" title="SMS Android" src="http://androideity.com/wp-content/uploads/2012/04/SMS-Android.png" alt="" width="576" height="347" /></a></p>
<p>Cuando estamos programando aplicaciones para un dispositivo móvil como un Android, contamos con una variedad de recursos que enriquecerán nuestras aplicaciones si las usamos en conjunto con nuestra creatividad e imaginación. Dentro de estos recursos uno de los que me gustan mucho son los mensajes SMS, que te ayudarán mucho si en determinado momento no tienes la posibilidad de estar conectado a Internet y necesitas comunicarte con el mundo exterior, así que te traemos una explicación muy sencilla que te ayudará a conocer como se pueden enviar, recibir y manejar mensajes SMS automáticamente en un dispositivo Android. <span id="more-3223"></span></p>
<p style="text-align: center;"><a href="http://androideity.com/wp-content/uploads/2012/04/SMS-Android-1.png"><img class="aligncenter size-full wp-image-3225" style="margin-top: 20px; margin-bottom: 20px;" title="SMS Android" src="http://androideity.com/wp-content/uploads/2012/04/SMS-Android-1.png" alt="" width="448" height="290" /></a></p>
<p>Los mensajes de texto han ido desapareciendo en los dispositivos móviles inteligentes, ya que aplicaciones como Skype, Whatsapp, Messenger Live y muchísimas otras son mejores a la hora de entablar una conversación mediante texto escrito; el único inconveniente que tienen estas aplicaciones, es que las personas interesadas en comunicarse deben tener una conexión a Internet, cosa que no ocurre con los mensajes de texto SMS y ni si quiera la persona que recibe el mensaje debe tener una carga de tiempo para recibir el mensaje, lo cual lo hace propicio para aplicaciones especiales cuando no podamos estar conectados a Internet, como por ejemplo hacer una aplicación que cada tanto el dispositivo móvil envíe las coordenadas del GPS a una central de control para estar haciendo seguimiento por ejemplo a un carro transportador de mercancía, o por ejemplo enviar un mensaje a tu restaurante favorito para que vayan preparando tu platillo favorito y que se encuentre listo cuando llegues, en fin las posibilidades son grandísimas, solo es que las apliques a tu necesidad y hagas magia programando.</p>
<p style="text-align: center;"><a href="http://androideity.com/wp-content/uploads/2012/04/SMS-Android-2.png"><img class="aligncenter size-full wp-image-3226" style="margin-top: 20px; margin-bottom: 20px;" title="SMS Android" src="http://androideity.com/wp-content/uploads/2012/04/SMS-Android-2.png" alt="" width="448" height="176" /></a></p>
<p>Sabemos que por medio de un Intent puedes enviar un SMS a través de la aplicación que viene por defecto el móvil, pero lo que te explicaremos es una manera en la cual manejar estos SMS sin necesidad de usar este servicio, así que vamos a hacer un ejemplo muy sencillo en el cual aprenderemos la manera de poder enviar un mensaje de texto con tan solo oprimir un botón, aunque no significa que sea la única manera, solo que es la más fácil, tu puedes cambiar ese botón por otro evento del móvil como por ejemplo dependiendo la hora, o dependiendo del lugar en el que te encuentres, o dependiendo de la temperatura de tu móvil, eso lo decides tu, nosotros lo hacemos con un botón para la explicación  pero con tu imaginación lo aplicarás a tus necesidades. Pero no solo eso, también haremos que nuestra aplicación lea los mensajes SMS y lo visualice en un Toast, lo cual nos sirve por ejemplo cuando estamos con ese <a href="http://androideity.com/category/videojuegos/" target="_blank">video-juego</a> que tanto nos gusta y no queremos cerrarlo para ir a ver que mensaje me ha llegado,  así se visualiza inmediatamente en mi dispositivo.</p>
<p style="text-align: center;"><a href="http://androideity.com/wp-content/uploads/2012/04/SMS-Android-3.png"><img class="aligncenter size-full wp-image-3227" style="margin-top: 20px; margin-bottom: 20px;" title="SMS Android" src="http://androideity.com/wp-content/uploads/2012/04/SMS-Android-3.png" alt="" width="355" height="336" /></a></p>
<p> Tenemos que recalcar que cuando estés manejando en tu aplicación los SMS o mensajes de texto, estos le generan un recargo al usuario del móvil, así que es muy importante que sepas usar de la mejor manera este recurso y hacerle entender de la manera más fácil al usuario de tu aplicación los costos que acarrea usar los mensajes SMS, debido a que el uso sin control o un error no previsto puede causar un gasto significativamente alto al usuario del dispositivo. Por tal razón hacemos énfasis en que Androideity no se hace responsable por mal uso que se le de a los conceptos aprendidos en este artículo, tan solo llevamos la información para que la aprendas a manejar de la manera mas correcta y la pueda usar en tus aplicaciones, pero no seremos responsables si llegan a surgir aplicaciones mal intencionadas que desean quitarle dinero a las personas buenas.</p>
<p>Aclarado todo y explicado todo lo que vamos ha hacer, entonces manos a la obra:</p>
<ol start="1">
<li>Crear un proyecto nuevo llamándolo como quieras, nosotros lo hemos llamado SMS, con el paquete que llamamos com.androideity.sms y con la versión de Android 2.3 y creamos la actividad principal llamándola MainActivity.</li>
</ol>
<p style="text-align: center;"><a href="http://androideity.com/wp-content/uploads/2012/04/SMS-Android-4.png"><img class="aligncenter size-full wp-image-3228" style="margin-top: 20px; margin-bottom: 20px;" title="SMS Android" src="http://androideity.com/wp-content/uploads/2012/04/SMS-Android-4.png" alt="" width="336" height="374" /></a></p>
<p> 2. El layout para esta aplicación va a ser muy sencillo, solo necesitamos un botón que vamos a usar para pulsar y que automáticamente envíe el SMS; asi que el layout seria algo como el siguiente:</p>
<p style="text-align: center;"><a href="http://androideity.com/wp-content/uploads/2012/04/SMS-Android-5.png"><img class="aligncenter size-full wp-image-3229" style="margin-top: 20px; margin-bottom: 20px;" title="SMS Android" src="http://androideity.com/wp-content/uploads/2012/04/SMS-Android-5.png" alt="" width="448" height="177" /></a></p>
<p> 3.  El código que debe ir nuestra actividad principal MainActivity.java empieza importando las librerías necesarias destacando aquella que se llama android.telephony.SmsManager debido a que con esta nuestro programa manejara los mensajes SMS que enviemos. También crearemos e instanciaremos el botón que usaremos para enviar nuestro mensaje, con lo que el código va quedando de la siguiente manera:</p>
<p style="text-align: center;"><a href="http://androideity.com/wp-content/uploads/2012/04/SMS-Android-6.png"><img class="aligncenter size-full wp-image-3230" style="margin-top: 20px; margin-bottom: 20px;" title="SMS Android" src="http://androideity.com/wp-content/uploads/2012/04/SMS-Android-6.png" alt="" width="448" height="283" /></a></p>
<p> 4. Continuamos configurando el botón con el método setOnClickListener para que cada vez que oprimamos el botón sea escuchado y llame a un método que llamamos sendSMS al cual le pasamos 2 parámetros en formato String, uno es el numero del teléfono del móvil al cual vamos a enviar el SMS y el otro es el mensaje que enviaremos. Quedando el segmento de código de la siguiente manera:</p>
<p style="text-align: center;"><a href="http://androideity.com/wp-content/uploads/2012/04/SMS-Android-7.png"><img class="aligncenter size-full wp-image-3231" style="margin-top: 20px; margin-bottom: 20px;" title="SMS Android" src="http://androideity.com/wp-content/uploads/2012/04/SMS-Android-7.png" alt="" width="448" height="167" /></a></p>
<p>5. Para terminar con el código de esta actividad, creamos el método que llamamos sendSMS, en el cual creamos un objeto SmsManager llamado sms y con el método sendTextMessage de este objeto enviaremos nuestro mensaje, finalmente quedando el código así:</p>
<p style="text-align: center;"><a href="http://androideity.com/wp-content/uploads/2012/04/SMS-Android-8.png"><img class="aligncenter size-full wp-image-3232" style="margin-top: 20px; margin-bottom: 20px;" title="SMS Android" src="http://androideity.com/wp-content/uploads/2012/04/SMS-Android-8.png" alt="" width="448" height="175" /></a></p>
<p> Debemos aclarar que este método le hace falta la verificación de envío, ya que de esta manera  no sabemos si realmente el mensaje fue enviado, eso lleva un poco más de elementos que de ser necesario los explicaremos en otro post, además no nos aparece la aplicación del móvil que normalmente vemos cuando vamos a enviar un SMS, simplemente es un mensaje “fantasma” que se envía automáticamente sin ninguna notificación o registro del envío, así que eso lo debes tener muy en cuenta cuando realices tu aplicación.</p>
<p>Ya tenemos nuestra parte del envío de SMS, ahora veremos la parte para recibir mensajes, para esto creamos una nueva actividad a la cual llamaremos SMSReceiver.java y  la cual no tendrá layout asociado pero tendrá que extenderse de la clase BroadcastReceiver la cual habilita a nuestra aplicación a recibir <em>intents</em> de otras aplicaciones usando el método sendBroadcast(). Y para poder manejar estos <em>intents</em> debemos crear un manejador o <em>Bundle</em> que nos facilita la tarea ya que los mensajes SMS son enviados en un formato llamado PDU (por sus siglas en ingles <em>protocol</em><em> data</em><em> unit</em>) y necesitamos una método especial llamado createFromPdu() que usaremos intrínsecamente con el bundle.</p>
<p>6.  Ya explicado lo anterior necesitaremos las sentencias import que hagan posible la recepción de los SMS dentro de los que son mas destacados son,  android.content.BroadcastReceiver para escuchar los SMS y android.os.Bundle para el manejo de los SMS, los demás importes ya los conoces, así que el código de nuestra actividad SMSReceiver.java inicia de la siguiente manera:</p>
<p style="text-align: center;"><a href="http://androideity.com/wp-content/uploads/2012/04/SMS-Android-9.png"><img class="aligncenter size-full wp-image-3233" style="margin-top: 20px; margin-bottom: 20px;" title="SMS Android" src="http://androideity.com/wp-content/uploads/2012/04/SMS-Android-9.png" alt="" width="448" height="190" /></a></p>
<p> 7. Para recibir los SMS necesitaremos un solo método muy sencillo llamado onReceiver() al cual se le pasan 2 parámetros, uno es el contexto y el otro es un intent; dentro de este método creamos el objeto bundle pasándole los extras que necesitamos,  asi como otro objeto SmsMessage llamado msgs el cual estará null o vacio y es donde se almacenara cada SMS que llegue a nuestro dispositivo y por ultimo también crearemos un String llamado str que usaremos en el Toast para mostrar nuestro mensaje en formato de texto, así que el código sigue de la siguiente manera:</p>
<p style="text-align: center;"><a href="http://androideity.com/wp-content/uploads/2012/04/SMS-Android-10.png"><img class="aligncenter size-full wp-image-3234" style="margin-top: 20px; margin-bottom: 20px;" title="SMS Android" src="http://androideity.com/wp-content/uploads/2012/04/SMS-Android-10.png" alt="" width="448" height="157" /></a></p>
<p> 8. Ahora vamos a escribir el código que se activa cuando ha llegado un mensaje SMS, empezando por evaluar si el bundle no está vacío, creamos un objeto pdu (el cual ya explicamos),  e instanciamos nuestro objecto msgs con el largo total del SMS que nos ha llegado, para que podamos saber que tantos caracteres debemos leer y mostrar al momento de crear nuestro String str, asi que el código sigue quedando así:</p>
<p style="text-align: center;"><a href="http://androideity.com/wp-content/uploads/2012/04/SMS-Android-13.png"><img class="aligncenter size-full wp-image-3238" style="margin-top: 20px; margin-bottom: 20px;" title="SMS Android" src="http://androideity.com/wp-content/uploads/2012/04/SMS-Android-13.png" alt="" width="448" height="175" /></a></p>
<p> 9. Ahora creamos nuestro String con una sentencia  for que va evaluando el largo del SMS y va creando primero la dirección de quien ha enviado el mensaje, con el texto previo “SMS de:”,  después crea el cuerpo del mensaje que ha llegado, terminado con un salto de línea. Y para terminar con el código de esta clase, creamos un Toast que nos mostrara el String str cada vez que nos llegue un mensaje, así que el final del código seria el siguiente:</p>
<p style="text-align: center;"><a href="http://androideity.com/wp-content/uploads/2012/04/SMS-Android-11.png"><img class="aligncenter size-full wp-image-3235" style="margin-top: 20px; margin-bottom: 20px;" title="SMS Android" src="http://androideity.com/wp-content/uploads/2012/04/SMS-Android-11.png" alt="" width="448" height="235" /></a></p>
<p>10. Para que nuestra aplicación funcione correctamente necesitamos indicar en el manifiesto de nuestra aplicación que necesitamos el permiso para enviar y recibir SMS asi como declarar que nuestra actividad SMSReceiver.java es del tipo receiver, lo que indica que no debe estar corriendo en nuestra pantalla para que se encuentre activa y realice su tarea correspondiente, para esto en nuestro archivo SMS Manifiest debe verse de la siguiente manera si asignaste los mismos nombres que nosotros usamos:</p>
<p style="text-align: center;"><a href="http://androideity.com/wp-content/uploads/2012/04/SMS-Android-12.png"><img class="aligncenter size-full wp-image-3236" style="margin-top: 20px; margin-bottom: 20px;" title="SMS Android" src="http://androideity.com/wp-content/uploads/2012/04/SMS-Android-12.png" alt="" width="448" height="293" /></a></p>
<p> Con esto ya terminamos nuestra aplicación, en la cual intentamos no ser muy extensos viendo lo más importante del manejo de SMS y esperando que no sea muy larga para ser estudiada, así que espero que te sirva para que tus desarrollos tengan mas recursos y puedas contar con más herramientas de trabajo y podamos aportar a nuestro querido sistema Android a crecer. Pero esto no queda aquí, como en cada uno de nuestros ejemplos te mostraremos como hacer esta aplicación y como funciona en la vida real, todos mostrado en un video para ti y para aquellos que nos buscan en Youtube.</p>
<p><iframe width="620" height="349" src="http://www.youtube.com/embed/1brr6Om0cyY?fs=1&#038;feature=oembed" frameborder="0" allowfullscreen></iframe></p>
<p>Espero que te sea de ayuda este tema para tus futuras aplicaciones, espera pronto nuevos temas sobre esta fabulosa plataforma Android.</p>
<p>Nota: 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 />
Nota 2: No te dejamos el código porque queremos que gastes teclado y aprendas escribiendo. Pero si necesitas algún código mostrado en este post, con mucho gusto te lo haré llegar.</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://androideity.com/2012/04/03/sms-en-android-usando-eclipse/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Tutorial de Widget &#8211; Segunda Parte!</title>
		<link>http://androideity.com/2012/03/25/tutorial-de-widget-segunda-parte/#utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=tutorial-de-widget-segunda-parte</link>
		<comments>http://androideity.com/2012/03/25/tutorial-de-widget-segunda-parte/#comments</comments>
		<pubDate>Sun, 25 Mar 2012 16:02:02 +0000</pubDate>
		<dc:creator>sebastiancipolat</dc:creator>
				<category><![CDATA[Aplicaciones]]></category>
		<category><![CDATA[Diseño]]></category>
		<category><![CDATA[Programación]]></category>

		<guid isPermaLink="false">http://androideity.com/?p=3183</guid>
		<description><![CDATA[<a href="http://androideity.com/2012/03/25/tutorial-de-widget-segunda-parte/"><img align="left" hspace="5" width="100" height="100" src="http://androideity.com/wp-content/uploads/2012/03/widgtuto2-150x150.png" class="alignleft wp-post-image tfe" alt="" title="widgtuto2" /></a>Hola como les prometi les traigo la segunda parte del tutorial de widget antes de seguir es recomendable que vuelvan a leer la primer parte en esta ocasion con los conocimiento adquiridos haremos un widget dinamico que pueda reaccionar a &#8230; <a href="http://androideity.com/2012/03/25/tutorial-de-widget-segunda-parte/">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/03/widgtuto2.png"><img class="aligncenter size-full wp-image-3184" style="margin-top: 5px; margin-bottom: 5px;" title="widgtuto2" src="http://androideity.com/wp-content/uploads/2012/03/widgtuto2.png" alt="" width="578" height="280" /></a></p>
<p>Hola como les prometi les traigo la segunda parte del tutorial de widget antes de seguir es recomendable que vuelvan a leer la <a href="http://androideity.com/2012/03/10/aprende-a-crear-tus-propios-widget/" target="_blank">primer parte</a><br />
en esta ocasion con los conocimiento adquiridos haremos un widget dinamico que pueda reaccionar a la interaccion con el usuario y se actualizea nuestra orden en lugar de esperar a que se actualize solo.</p>
<p><span id="more-3183"></span></p>
<p>El widget que haremos hoy sera el sig.</p>
<p><a href="http://androideity.com/wp-content/uploads/2012/03/widget2web.png"><img class="aligncenter size-full wp-image-3186" title="screenshot widget" src="http://androideity.com/wp-content/uploads/2012/03/widget2web.png" alt="screenshot widget" width="239" height="320" /></a></p>
<p>&nbsp;</p>
<p>Basicamente es un switch que al estar prendido o apagado prendera una luz de bajo, es un ejemplo</p>
<p>muy simple pero que servira para aprender conceptos nuevos que serviran de base para futuras creaciones.</p>
<p>En si se tratan de 2 layout que al tocar sobre el widget este se actualizara y cambiara al otro.</p>
<p><span style="color: #99cc00;"><strong>Manos a la obra!</strong></span></p>
<p>Antes de empezar con el codigo debemos saber algunas cosas.</p>
<ul>
<li style="text-align: left;"><strong>RemoteViews</strong></li>
</ul>
<p>Como les conte en la primera parte en un widget el layout esta basada en un tipo especial de componente llamados <a title="remoteviews " href="http://developer.android.com/reference/android/widget/RemoteViews.html">RemoteViews</a></p>
<p>Segun la documentacion oficial es una clase que describe una jerarquía de vistas que se pueden mostrar en otro proceso.</p>
<p>La jerarquía es inflada desde un archivo layout, esta clase proporciona algunas operaciones básicas para modificar el contenido de dicha jerarquia.</p>
<p>Basicamente permite acceder a una vista y realizar modificaciones.</p>
<p><span style="color: #808080;">RemoteViews remoteViews = new RemoteViews(context.getPackageName(), R.layout.main);</span></p>
<p><span style="color: #000000;">se la &#8216;infla&#8217; con el paquete context.getPackageName() y el layout a mostrar.</span><br />
<span style="color: #000000;">Tambien posee metodos para modificar contenidos de componentes como</span></p>
<p><span style="color: #999999;">remoteViews.setTextViewText(R.id.ID_textview,&#8221;valor a mostrar&#8221;); modifica el texto de un TextView.</span></p>
<ul>
<li><strong>AppWidgetManager</strong></li>
</ul>
<p>Permite actualizar el estado de un widget obtener informacion acerca de AppWidget providers instalados y el estado de otro widgets.</p>
<p>mas informacion <a href="http://developer.android.com/reference/android/appwidget/AppWidgetManager.html">aqui</a>.</p>
<p>ermite actualizar el estado de un widget obtener informacion acerca de AppWidget providers instalados y el estado de otro widgets.</p>
<p><span style="color: #808080;">AppWidgetManager appWidgetManager;</span></p>
<ul>
<li><strong><span style="color: #000000;">ComponentName</span></strong></li>
</ul>
<div>
<p>Identifica a un componente especifico de una aplicaciòn disponible (Activity, Service, BroadcastReceiver, or ContentProvider)<br />
Son requeridas dos pieza de informacion para identificar a un componente:<br />
Necesita 2 parametros: el paquete y el nombre de la clase</p>
<p><span style="color: #808080;">ComponentName thisWidget = new ComponentName(context, nombre_clase.class); </span></p>
<p>Una vez sabido todo esto podemos actualizar el widget nosotros mismo en lugar de esperar que se actualize solo.</p>
</div>
<div>De la clase usaremos AppWidgetManager el metodo updateAppWidget del cual necesitamos 2 cosas la referencia al widget provista por ComponentName y<br />
el remoteview a mostrar.</div>
<div></div>
<div><span style="color: #808080;">appWidgetManager.updateAppWidget(thisWidget, remoteViews); </span></div>
<div>
<p>Ahora ya sabiendo todas estas cosas podemos realizar el widget que les comente anteriormente.</p>
<p>La estructura del proyecto es la siguiente:</p>
<p><a href="http://androideity.com/wp-content/uploads/2012/03/proj2web.png"><img class="aligncenter size-full wp-image-3193" title="proyecto" src="http://androideity.com/wp-content/uploads/2012/03/proj2web.png" alt="proyecto" width="331" height="552" /></a></p>
<p>&nbsp;</p>
<p>Los layouts main_off y main_on son lo siguientes:</p>
<p>main_on.xml</p>
<p style="text-align: center;"><a href="http://androideity.com/wp-content/uploads/2012/03/layout2web.png"><img class="aligncenter size-full wp-image-3194" style="margin-top: 5px; margin-bottom: 5px;" title="layout" src="http://androideity.com/wp-content/uploads/2012/03/layout2web.png" alt="layout" width="588" height="203" /></a></p>
<p>La unica diferencia con main_off.xml es en</p>
<p>android:background=&#8221;@drawable/swoff1&#8243;</p>
<p>las imagenes pueden descargarlas de aqui <a href="http://androideity.com/wp-content/uploads/2012/03/swon1.png">swon1</a>  <a href="http://androideity.com/wp-content/uploads/2012/03/swoff1.png">swoff1</a></p>
<p>Androidmanifest</p>
<p><a href="http://androideity.com/wp-content/uploads/2012/03/manifest2web.png"><img class="aligncenter size-full wp-image-3195" title="manifest" src="http://androideity.com/wp-content/uploads/2012/03/manifest2web.png" alt="manifest" width="660" height="375" /></a></p>
<p>&nbsp;</p>
<p>widget_provider.xml</p>
<p><a href="http://androideity.com/wp-content/uploads/2012/03/widgetprov2web.png"><img class="aligncenter size-full wp-image-3196" title="widget_provider.xml" src="http://androideity.com/wp-content/uploads/2012/03/widgetprov2web.png" alt="widget_provider.xml" width="662" height="158" /></a></p>
<p>A continuaciòn esta el codigo completo lean los comentarios en el codigo y al ejecutarlo tambien recomiendo seguir el logcat para</p>
<p><span style="color: #000000;"> poder entender mejor el funcionamiento al final explicare algunas parte de forma mas detallada.</span></p>
</div>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">android.app.PendingIntent</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">android.appwidget.AppWidgetManager</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">android.appwidget.AppWidgetProvider</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">android.content.ComponentName</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">android.content.Context</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">android.content.Intent</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">android.content.SharedPreferences</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">android.os.Bundle</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">android.util.Log</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">android.widget.RemoteViews</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> Miwidget <span style="color: #000000; font-weight: bold;">extends</span> AppWidgetProvider<span style="color: #009900;">&#123;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000000; font-weight: bold;">static</span> <span style="color: #000000; font-weight: bold;">final</span> <span style="color: #003399;">String</span> ACTION_cambiarlayout <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;a_cambiarlayout&quot;</span><span style="color: #339933;">;</span>  
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #003399;">String</span> shprefreg<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;MSG_switch_status&quot;</span><span style="color: #339933;">;</span> 
&nbsp;
	 @Override
	    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> onUpdate<span style="color: #009900;">&#40;</span><span style="color: #003399;">Context</span> context, AppWidgetManager appWidgetManager,
	    <span style="color: #000066; font-weight: bold;">int</span><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> appWidgetIds<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
&nbsp;
		 <span style="color: #666666; font-style: italic;">/*Accedemos al shared preference  shprefreg  y tratamos de leer, si hay algun error
		   mensaje tomara el valor &quot;error&quot; lo que indicara que no existe dentro de los shared preference
		   'MSG_switch_status' con lo cual lo creamos y añadimos  como valor off*/</span>
&nbsp;
		 SharedPreferences prefs <span style="color: #339933;">=</span>context.<span style="color: #006633;">getSharedPreferences</span><span style="color: #009900;">&#40;</span>shprefreg, <span style="color: #003399;">Context</span>.<span style="color: #006633;">MODE_PRIVATE</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		 <span style="color: #003399;">String</span> mensaje <span style="color: #339933;">=</span> prefs.<span style="color: #006633;">getString</span><span style="color: #009900;">&#40;</span>shprefreg, <span style="color: #0000ff;">&quot;error&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
		 <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>mensaje<span style="color: #339933;">==</span><span style="color: #0000ff;">&quot;error&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span> 
&nbsp;
		<span style="color: #666666; font-style: italic;">//si cuando intenta leer es error añade un registro.</span>
         SharedPreferences.<span style="color: #006633;">Editor</span> editor <span style="color: #339933;">=</span> prefs.<span style="color: #006633;">edit</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
         editor.<span style="color: #006633;">putString</span><span style="color: #009900;">&#40;</span>shprefreg, <span style="color: #0000ff;">&quot;off&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">//Estado apagado</span>
         editor.<span style="color: #006633;">commit</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
         Log.<span style="color: #006633;">e</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot; SharedPreferences error read&quot;</span>, <span style="color: #0000ff;">&quot;&quot;</span><span style="color: #339933;">+</span>mensaje<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
         Log.<span style="color: #006633;">e</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot; SharedPreferences W -&amp;gt;&quot;</span>, <span style="color: #0000ff;">&quot;off&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
         mensaje<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;off&quot;</span><span style="color: #339933;">;</span>
&nbsp;
         <span style="color: #009900;">&#125;</span><span style="color: #000000; font-weight: bold;">else</span><span style="color: #009900;">&#123;</span>
        	 <span style="color: #666666; font-style: italic;">//No hubo error, ya existia .</span>
             Log.<span style="color: #006633;">e</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot; SharedPreferences read ok&quot;</span>, <span style="color: #0000ff;">&quot;&quot;</span><span style="color: #339933;">+</span>mensaje<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
         <span style="color: #009900;">&#125;</span>
		 <span style="color: #666666; font-style: italic;">//Actualizamos el widget con el estado leido previamente</span>
    	 actualizarWidget<span style="color: #009900;">&#40;</span>context, appWidgetManager, mensaje<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> 
&nbsp;
		   <span style="color: #009900;">&#125;</span>
&nbsp;
	 <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">static</span> <span style="color: #000066; font-weight: bold;">void</span> actualizarWidget<span style="color: #009900;">&#40;</span><span style="color: #003399;">Context</span> context,AppWidgetManager appWidgetManager, <span style="color: #003399;">String</span> value<span style="color: #009900;">&#41;</span>
	<span style="color: #009900;">&#123;</span>	
&nbsp;
       RemoteViews remoteViews <span style="color: #339933;">;</span> 
&nbsp;
       ComponentName thisWidget<span style="color: #339933;">;</span>
&nbsp;
       <span style="color: #000066; font-weight: bold;">int</span> lay_id<span style="color: #339933;">=</span><span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span>
&nbsp;
       <span style="color: #666666; font-style: italic;">//Asignamos el layout a la variable lay_id segun el parametro recibido por value</span>
       <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>value.<span style="color: #006633;">equals</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;on&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
    	   <span style="color: #666666; font-style: italic;">//ON</span>
    	    lay_id<span style="color: #339933;">=</span> R.<span style="color: #006633;">layout</span>.<span style="color: #006633;">main_on</span><span style="color: #339933;">;</span>
    	          <span style="color: #009900;">&#125;</span>
&nbsp;
       <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>value.<span style="color: #006633;">equals</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;off&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
    	   <span style="color: #666666; font-style: italic;">//off</span>
    	    lay_id<span style="color: #339933;">=</span> R.<span style="color: #006633;">layout</span>.<span style="color: #006633;">main_off</span><span style="color: #339933;">;</span>
&nbsp;
       <span style="color: #009900;">&#125;</span>
          <span style="color: #666666; font-style: italic;">//Vamos a acceder a la vista y cambiar el layout segun lay_id</span>
          remoteViews <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> RemoteViews<span style="color: #009900;">&#40;</span>context.<span style="color: #006633;">getPackageName</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>, lay_id<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
          <span style="color: #666666; font-style: italic;">//identifica a nuestro widget</span>
		  thisWidget <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> ComponentName<span style="color: #009900;">&#40;</span>context, Miwidget.<span style="color: #000000; font-weight: bold;">class</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
		   <span style="color: #666666; font-style: italic;">//Creamos un intent a nuestra propia clase</span>
		   Intent intent <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> Intent<span style="color: #009900;">&#40;</span>context, Miwidget.<span style="color: #000000; font-weight: bold;">class</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		   <span style="color: #666666; font-style: italic;">//seleccionamos la accion ACTION_cambiarlayout</span>
           intent.<span style="color: #006633;">setAction</span><span style="color: #009900;">&#40;</span>ACTION_cambiarlayout<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> 
&nbsp;
           PendingIntent pendingIntent <span style="color: #339933;">=</span> PendingIntent.<span style="color: #006633;">getBroadcast</span><span style="color: #009900;">&#40;</span>context, <span style="color: #cc66cc;">0</span>, intent, <span style="color: #cc66cc;">0</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
           <span style="color: #666666; font-style: italic;">/*Equivalente a setOnClickListener de un boton comun lo asocio con
           el layout1 ya que al tocar este se ejecutara la accion
           y con pendingIntent */</span>
&nbsp;
           remoteViews.<span style="color: #006633;">setOnClickPendingIntent</span><span style="color: #009900;">&#40;</span>R.<span style="color: #006633;">id</span>.<span style="color: #006633;">layout1</span>, pendingIntent<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
           <span style="color: #666666; font-style: italic;">//actualizamos el widget</span>
           appWidgetManager.<span style="color: #006633;">updateAppWidget</span><span style="color: #009900;">&#40;</span>thisWidget, remoteViews<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
	 @Override
     <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> onReceive<span style="color: #009900;">&#40;</span><span style="color: #003399;">Context</span> context, Intent intent<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		 <span style="color: #666666; font-style: italic;">//Controlamos que la accion recibida sea la nuestra</span>
         <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>intent.<span style="color: #006633;">getAction</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">equals</span><span style="color: #009900;">&#40;</span>ACTION_cambiarlayout<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
         <span style="color: #666666; font-style: italic;">//Leemos nuevamente SharedPreferences</span>
		 SharedPreferences prefs <span style="color: #339933;">=</span> context.<span style="color: #006633;">getSharedPreferences</span><span style="color: #009900;">&#40;</span>shprefreg, <span style="color: #003399;">Context</span>.<span style="color: #006633;">MODE_PRIVATE</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		 <span style="color: #003399;">String</span> mensaje <span style="color: #339933;">=</span> prefs.<span style="color: #006633;">getString</span><span style="color: #009900;">&#40;</span>shprefreg, <span style="color: #0000ff;">&quot;error&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		 SharedPreferences.<span style="color: #006633;">Editor</span> editor <span style="color: #339933;">=</span> prefs.<span style="color: #006633;">edit</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
		 <span style="color: #003399;">String</span> new_status<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;&quot;</span><span style="color: #339933;">;</span>
&nbsp;
         Log.<span style="color: #006633;">e</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;! :)  status onReceive! &quot;</span>, mensaje<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
         <span style="color: #666666; font-style: italic;">/* Si el estado que leimos es on definimos que el nuevo sea off y lo grabamos en  SharedPreferences
          * realizamos lo mismo con off pero usando on
          * El valor grabado lo utilizaremos para determinar el layout a cargar*/</span>
&nbsp;
         <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>mensaje.<span style="color: #006633;">equals</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;on&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
&nbsp;
        	 editor.<span style="color: #006633;">putString</span><span style="color: #009900;">&#40;</span>shprefreg , <span style="color: #0000ff;">&quot;off&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
             editor.<span style="color: #006633;">commit</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
             new_status<span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;off&quot;</span><span style="color: #339933;">;</span>
&nbsp;
         <span style="color: #009900;">&#125;</span>
         <span style="color: #000000; font-weight: bold;">else</span> <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>mensaje.<span style="color: #006633;">equals</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;off&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
        	 editor.<span style="color: #006633;">putString</span><span style="color: #009900;">&#40;</span>shprefreg , <span style="color: #0000ff;">&quot;on&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
             editor.<span style="color: #006633;">commit</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
             new_status<span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;on&quot;</span><span style="color: #339933;">;</span>
&nbsp;
        	 <span style="color: #009900;">&#125;</span>
            <span style="color: #666666; font-style: italic;">//Actualizamos el estado del widget.</span>
             AppWidgetManager widgetManager <span style="color: #339933;">=</span>AppWidgetManager.<span style="color: #006633;">getInstance</span><span style="color: #009900;">&#40;</span>context<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
             actualizarWidget<span style="color: #009900;">&#40;</span> context,widgetManager ,new_status<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
         <span style="color: #009900;">&#125;</span>
&nbsp;
          <span style="color: #000000; font-weight: bold;">super</span>.<span style="color: #006633;">onReceive</span><span style="color: #009900;">&#40;</span>context, intent<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
     <span style="color: #009900;">&#125;</span>
&nbsp;
	 <span style="color: #009900;">&#125;</span></pre></div></div>

<pre><span style="color: #000000;">Una vez que hallan leido el codigo es necesario explicar algunas cosas.</span>
 <span style="color: #000000;">El funcionamiento del widget es muy simple en el update (osea cada vez que se actualiza) lo que hace es al iniciar leer del</span>
 <span style="color: #000000;">Shared Preferences (si no saben </span>como funcionan lean <a href="http://developer.android.com/reference/android/content/SharedPreferences.html">esto</a>), si no encuentra el registro buscado lo crea si no lo lee y toma
 de la variable mensaje el layout a cargar el cual lo pasa al metodo
 actualizarWidget(context, appWidgetManager, mensaje);
 A este metodo vamos a verlo paso a paso:
 <span style="color: #888888;">public static void actualizarWidget(Context context,AppWidgetManager appWidgetManager, String value)</span>
 Como les comente anteriormente los vamos a utilizar para actualizar el widget.
 <span style="color: #888888;">RemoteViews remoteViews ;</span>
 <span style="color: #888888;">ComponentName thisWidget;</span>
 Con el parametro recibido en value
 determina cual de los 2 layout va a utilizar
 <span style="color: #888888;">int lay_id=0;</span>
 <span style="color: #888888;">if (value.equals("on")){</span>
 <span style="color: #888888;"> //ON</span>
 <span style="color: #888888;"> lay_id= R.layout.main_on;</span>
 <span style="color: #888888;"> }</span></pre>
<p><span style="color: #888888;">if (value.equals(&#8220;off&#8221;)){</span><br />
<span style="color: #888888;"> //off</span><br />
<span style="color: #888888;"> lay_id= R.layout.main_off;</span><br />
<span style="color: #888888;"> }</span><br />
Luego vamos a acceder a la vista y determinar el layout segun lay_id<br />
<span style="color: #888888;">remoteViews = new RemoteViews(context.getPackageName(), lay_id);</span><br />
creamos referencia a nuestro widget<br />
<span style="color: #888888;">thisWidget = new ComponentName(context, Miwidget.class);</span><br />
Ahora creamos un intent a nuestra propia clase, nos llamaremos nosotros mismos.<br />
<span style="color: #888888;">Intent intent = new Intent(context, Miwidget.class);</span><br />
seleccionamos la accion <span style="color: #99cc00;">ACTION_cambiarlayout</span> la cual al recibirla en onReceive realizaremos<br />
<span style="color: #888888;">intent.setAction(ACTION_cambiarlayout);</span><br />
Lo siguiente en combinacion con el onReceive equivale a setOnClickListener de un boton comun el cual lo asocio con<br />
el layout1 ya que al tocar este se ejecutara la accion y con pendingIntent<br />
<span style="color: #808080;">PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, intent, 0</span>);<br />
que es un pending intent? <a href="http://developer.android.com/reference/android/app/PendingIntent.html" target="_blank">aqui</a><br />
Nos llamaremos nosotros mismo por lo cual usamos el intent y determinamos sobre a cual elemento se realiza<br />
la pulsacion o sea el &#8216;click&#8217; en este caso usaremos el layout1 ya que queremos que funcione al tocar todos el widget</p>
<p><span style="color: #808080;">remoteViews.setOnClickPendingIntent(R.id.layout1, pendingIntent);</span><br />
Actualizamos el widget<br />
appWidgetManager.updateAppWidget(thisWidget, remoteViews);<br />
En el <span style="color: #99cc00;">onReceive()</span><br />
<span style="color: #808080;">public void onReceive(Context context, Intent intent)</span><br />
Para nuestra accion ACTION_cambiarlayout if (intent.getAction().equals(ACTION_cambiarlayout))<br />
realizamos lo sig.<br />
Leemos nuevamente SharedPreferences y obtenemos en que posicion se encuentr el switch</p>
<p><span style="color: #808080;">SharedPreferences prefs = context.getSharedPreferences(shprefreg, Context.MODE_PRIVATE);</span><br />
<span style="color: #808080;">String mensaje = prefs.getString(shprefreg, &#8220;error&#8221;);</span><br />
<span style="color: #808080;">SharedPreferences.Editor editor = prefs.edit();</span><br />
<span style="color: #808080;">String new_status=&#8221;";</span><br />
Si el estado que leimos es &#8216;on&#8217; definimos que el nuevo sea &#8216;off &#8216;y lo grabamos en SharedPreferences<br />
realizamos lo mismo con off pero usando on<br />
El valor grabado lo utilizaremos para determinar el layout a cargar cuando vuelva a ejecutarse el onUpdate</p>
<pre><span style="color: #888888;">if (mensaje.equals("on")){</span>
<span style="color: #888888;">editor.putString(shprefreg , "off");</span>
<span style="color: #888888;">editor.commit();</span>
<span style="color: #888888;">Log.e("! shprefreg write -&gt; ", "off");</span>
<span style="color: #888888;">new_status= "off";</span>
<span style="color: #888888;">}</span>
<span style="color: #888888;">else if (mensaje.equals("off")){</span>
<span style="color: #888888;">editor.putString(shprefreg , "on");</span>
<span style="color: #888888;">editor.commit();</span>
<span style="color: #888888;">Log.e("! shprefreg write -&gt; ", "on");</span>
<span style="color: #888888;">new_status= "on";</span>
<span style="color: #888888;">}</span></pre>
<p>Actualizamos el estado del widget pasando en el parametro new_status el layout a utilizar<br />
AppWidgetManager widgetManager =AppWidgetManager.getInstance(context);<br />
actualizarWidget( context,widgetManager ,new_status);<br />
Con lo que aprendimos hoy podemos realizar widget mas complejos.<br />
Les dejo un widget que hice el cual es un comunicador como en star trek que al presionarlo emite el sonido caracteristico de este<br />
pueden bajarse el proyecto de eclipse de <a href="http://code.google.com/p/anotadroid/downloads/detail?name=StarTrek%20%20TNG%20Comm%20Badge%20Widget%20.zip">aqui</a>.</p>
<p><a href="http://androideity.com/wp-content/uploads/2012/03/stksnapshot1.png"><img class="aligncenter size-medium wp-image-3199" title="stksnapshot1" src="http://androideity.com/wp-content/uploads/2012/03/stksnapshot1-226x300.png" alt="" width="226" height="300" /></a></p>
<p>&nbsp;</p>
<p>Comparto con ustedes el codigo fuente que use en este ejemplo:</p>
<h2><span style="color: #ff9900;">&gt;<strong><a title="Descargar src" href="http://code.google.com/p/sebastian-cipolat-android-project/downloads/detail?name=Segunda-parte.rar"><span style="color: #ff9900;">Link de Descarga</span></a></strong>&lt;</span></h2>
<p>&nbsp;</p>
<p>Esto fue todo por hoy en la siguiente entrega avanzaremos mas todavia.</p>
<p>Como siempre si tienen alguna consulta o sugerencia utilizen el cuadro de comentarios de bajo.</p>
<p>Hasta la proxima!.</p>
<p>Sebastian.</p>
]]></content:encoded>
			<wfw:commentRss>http://androideity.com/2012/03/25/tutorial-de-widget-segunda-parte/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
	</channel>
</rss>

