<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss 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/" version="2.0">

<channel>
	<title>Androcode</title>
	
	<link>http://androcode.es</link>
	<description>Programación, Tecnología, ¡Android!</description>
	<lastBuildDate>Thu, 16 May 2013 10:54:12 +0000</lastBuildDate>
	<language>es-ES</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.5</generator>
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/Androcode" /><feedburner:info xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" uri="androcode" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
		<title>Android Studio, el nuevo IDE para Android</title>
		<link>http://androcode.es/2013/05/android-studio-el-nuevo-ide-para-android/</link>
		<comments>http://androcode.es/2013/05/android-studio-el-nuevo-ide-para-android/#comments</comments>
		<pubDate>Thu, 16 May 2013 09:09:40 +0000</pubDate>
		<dc:creator>FedeProEx</dc:creator>
				<category><![CDATA[Artículos]]></category>
		<category><![CDATA[Noticias]]></category>
		<category><![CDATA[Android]]></category>
		<category><![CDATA[Articulos]]></category>
		<category><![CDATA[Google I/O]]></category>
		<category><![CDATA[Herramientas]]></category>
		<category><![CDATA[Novedades]]></category>
		<category><![CDATA[Programación]]></category>

		<guid isPermaLink="false">http://androcode.es/?p=4063</guid>
		<description><![CDATA[Tras la primera jornada del Google I/O los desarrolladores nos hemos llevado una sorpresa mayúscula, al menos yo, con la presentación de este nuevo IDE. Google nos presenta Android Studio, un IDE basado en IntelliJ IDEA Community Edition y que promete simplificar las tareas de desarrollo. Hace tiempo que muchos desarrolladores android me hablaron de &#8230; </p><p><a class="more-link block-button" href="http://androcode.es/2013/05/android-studio-el-nuevo-ide-para-android/">Continuar leyendo</a>]]></description>
				<content:encoded><![CDATA[<p>Tras la primera jornada del Google I/O los desarrolladores nos hemos llevado una sorpresa mayúscula, al menos yo, con la presentación de este nuevo IDE. Google nos presenta <strong>Android Studio</strong>, un IDE basado en<em> IntelliJ IDEA Community Edition</em> y que promete simplificar las tareas de desarrollo.</p>
<p><img class="aligncenter size-full wp-image-4082" alt="androcode_studio" src="http://androcode.es/wp-content/uploads/2013/05/androcode_studio.png" width="662" height="290" /></p>
<p><span id="more-4063"></span></p>
<p><a style="color: #074d7c;cursor: pointer" href="http://androcode.es/wp-content/uploads/2013/05/laptop600.png"><img class="wp-image-4074 alignright" alt="laptop600" src="http://androcode.es/wp-content/uploads/2013/05/laptop600.png" width="360" height="254" /></a></p>
<p style="text-align: justify">Hace tiempo que muchos desarrolladores android me hablaron de las bondades de IntelliJ IDEA pero no fue hasta hace poco cuando me decidí a empezar a usarlo.</p>
<p style="text-align: justify">Sobra decir que la experiencia ha sido buenísima y así lo he trasladado cada vez que he tenido la oportunidad. No merece la pena entrar en comparaciones Eclipse / IntelliJ, simplemente juegan en otra liga (que no se sientan ofendidos los amantes del IDE creado por IBM). Pero vayamos por partes, ¿qué tiene este Android Studio que lo hace mejor?</p>
<h2>Sistema de construcción</h2>
<p>¡Por fin! gritarán algunos y es que si has programado en Eclipse habrás sentido el dolor de cabeza que puede causar empaquetar un proyecto android con este IDE. Android necesitaba un nuevo sistema de construcción y los chicos de Google han decidido optar por <a href="http://www.gradle.org/">Gradle</a>. Tengo que decir que no tengo gran experiencia con este sistema de construcción pero hay varias características que me gustan bastante:</p>
<ul>
<li>Utiliza un DSL (Lenguaje Específico de Dominio) basado en Groovy (nada de XMLs complejos)</li>
<li>Nos permite añadirlo a nuestros servidores de integración continua</li>
<li>Construcción por convención (al estilo Maven)</li>
<li>Compatible con dependencias Maven</li>
</ul>
<p>La construcción de android se consigue gracias a un plugin del que podemos consultar toda la documentación a través del <a href="http://tools.android.com/tech-docs/new-build-system/user-guide">siguiente enlace</a>.</p>
<h2>Ayudas para la codificación</h2>
<p>Cuando te haces con el manejo descubres que el editor de código de Android Studio tiene unas características únicas que facilitan considerablemente el desarrollo. La edición es más fluida, la refactorización más potente y un análisis de código que nos ayudará a mejorar considerablemente nuestro código.</p>
<p>Hay que decir que muchas de las características del IDE Android Studio ya estaban incluidas en IntelliJ IDEA pero de ahora en adelante hablaremos de Android Studio.</p>
<h3>Previsualización de recursos</h3>
<p>Una de las características que más me gustan es la de poder previsualizar los recursos. Por ejemplo si estamos en un drawable, podemos poner el cursor sobre el identificador, pulsar Ctrl + Q (comando para ver la documentación) y visualizar de un plumazo los drawables a distintos recursos.</p>
<p><a href="http://androcode.es/wp-content/uploads/2013/05/android_studio_01.png"><img class="wp-image-4066 aligncenter" alt="android_studio_01" src="http://androcode.es/wp-content/uploads/2013/05/android_studio_01.png" width="550" height="459" /></a></p>
<p>Algo parecido ocurre con los colores en el editor XML. Si ponemos un color nos aparecerá en la parte izquierda dicho color y al pulsar sobre él se nos mostrará un selector de color.</p>
<p><a href="http://androcode.es/wp-content/uploads/2013/05/android_studio_03.png"><img class="wp-image-4068 aligncenter" alt="android_studio_03" src="http://androcode.es/wp-content/uploads/2013/05/android_studio_03.png" width="511" height="427" /></a></p>
<h3>Generación de recursos</h3>
<p>Android Studio incluye diálogos para facilitar la generación de recursos para distintas configuraciones. Uno de los mejores ejemplos es a la hora de crear un string. Podemos seleccionar el cualificador de región y se nos mostrará una lista de países que podemos ir seleccionando. Esto resulta tremendamente útil porque incorpora todos los cualifiadores con sus variantes así que no tendremos que recordarlos de memoria.</p>
<p><a href="http://androcode.es/wp-content/uploads/2013/05/android_studio_02.png"><img class="wp-image-4067 aligncenter" alt="android_studio_02" src="http://androcode.es/wp-content/uploads/2013/05/android_studio_02.png" width="550" height="479" /></a></p>
<h3>Detección de errores</h3>
<p>Este IDE incorpora de forma transparente una herramienta de análisis de código que nos ayuda a mejorar la calidad del mismo. Además se realiza de forma automática, de forma que conforme vas escribiendo te va indicando posibles fallos o mejoras que puedes corregir en el código. Métodos sin utilizar, lógica demasiado compleja o condiciones que nunca van a darse serán detectadas por el IDE y nos permitirá con un &#8220;par de clicks&#8221; corregir dichos problemas.</p>
<p>Además este sistema de análisis lo han personalizado para que trabaje también sobre partes específicas de Android. Por ejemplo, el método getSystemService recibe un String como parámetro, así que en principio podríamos poner cualquier cadena. Si hacemos esto, el entorno nos mostrará un aviso de los posibles valores que deberían pasarse a dicho método.</p>
<p><a href="http://androcode.es/wp-content/uploads/2013/05/android_studio_04.png"><img class="wp-image-4069 aligncenter" alt="android_studio_04" src="http://androcode.es/wp-content/uploads/2013/05/android_studio_04.png" width="550" height="164" /></a></p>
<h3>Refactorización</h3>
<p>La refactorización es mucho más potente en Android Studio. Ahora podemos cambiar el nombre de una imagen y automáticamente se cambiará el nombre del identificador. A la inversa funcionaría exactamente igual. IntelliJ posee un sistema de refactorización muy avanzado y Android Studio se beneficia de eso.</p>
<h2>Ayudas para el diseño</h2>
<p>La parte de diseño es quizás la que pueda quedarse algo más corta con respecto al IDE anterior. No obstante es una herramienta con muchas posibilidades y que en el estado actual cubre la mayoría de las opciones de las que disponíamos antes e incluye cosas que mejoran lo anterior.</p>
<p>La previsualización de los layouts está bastante cuidada, marcando los elementos sobre los que estamos trabajando y permitiendo elegir entre distintos dispotivos, configuraciones, temas, etc.</p>
<table>
<tbody>
<tr>
<td><a href="http://androcode.es/wp-content/uploads/2013/05/android_studio_05.png"><img class="alignnone  wp-image-4070" alt="android_studio_05" src="http://androcode.es/wp-content/uploads/2013/05/android_studio_05.png" width="202" height="440" /></a></td>
<td><a href="http://androcode.es/wp-content/uploads/2013/05/android_studio_06.png"><img class="alignnone size-full wp-image-4071" alt="android_studio_06" src="http://androcode.es/wp-content/uploads/2013/05/android_studio_06.png" width="202" height="440" /></a></td>
<td><a href="http://androcode.es/wp-content/uploads/2013/05/android_studio_07.png"><img class="alignnone size-full wp-image-4072" alt="android_studio_07" src="http://androcode.es/wp-content/uploads/2013/05/android_studio_07.png" width="202" height="440" /></a></td>
</tr>
</tbody>
</table>
<h2>Acceso a los servicios de Google</h2>
<p>Google ha hecho especial hincapié en facilitar el uso de sus servicios en nuestras aplicaciones. Lo hemos podido ver en las presentaciones del  <a href="http://developer.android.com/google/gcm/index.html">Google Cloud Messaging</a> (GCM) o en la presentación de <a href="https://developers.google.com/games/">Google Play Games</a>. Con Android Studio quieren facilitar el acceso a todas estas herramientas desde nuestro entorno de desarrollo. Han empezado integrando los servicios del GCM y han introducido un nuevo plugin (<a href="http://developer.android.com/sdk/installing/installing-adt.html#tmgr">ADT Translation Manager Plugin</a>) para la traducción de nuestras aplicaciones e integrado con el servicio de traducción de la Google Play Developer Console.</p>
<p>Para finalizar, ¿qué mejor que <strong>Tor Norbye</strong> mostrándonos las principales características del <strong>Android Studio</strong>?</p>
<div style="text-align: center"><span class='embed-youtube' style='text-align:center; display: block;'><iframe class='youtube-player' type='text/html' width='560' height='315' src='http://www.youtube.com/embed/e0fXuyL0xVU?version=3&#038;rel=0&#038;fs=1&#038;showsearch=0&#038;showinfo=1&#038;iv_load_policy=1&#038;wmode=transparent' frameborder='0'></iframe></span></div>
<p>Por supuesto existen muchas más características que no hemos visto pero que iremos descubriendo con el uso por tanto os recomiendo que lo probéis y decidáis por vosotros mismos.</p>
<p><strong>Importante:</strong> Como puede verse en la imagen que encabeza el artículo se trata de una versión <em>preview</em>. Esto quiere decir que no será todo lo estable que deseamos y que esta versión no se recomienda para un entorno de producción. En Windows por ejemplo da problemas, pero podemos solucionarlo (gracias a <a href="https://twitter.com/DavidGNavas">@DavidGNavas</a> por el enlace) con lo que proponen en <a href="http://www.cypressnorth.com/blog/mobile-application-development/android-studio-not-working-in-windows-7-or-8-fixed/">esta página</a>.</p>
<p><a href="http://developer.android.com/sdk/installing/studio.html"><img class="size-full wp-image-4073 aligncenter" alt="android_studio_download" src="http://androcode.es/wp-content/uploads/2013/05/android_studio_download.png" width="297" height="50" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://androcode.es/2013/05/android-studio-el-nuevo-ide-para-android/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Charla en Imaginática sobre buenas prácticas en el desarrollo Android</title>
		<link>http://androcode.es/2013/04/charla-en-imaginatica-sobre-buenas-practicas-en-el-desarrollo-android/</link>
		<comments>http://androcode.es/2013/04/charla-en-imaginatica-sobre-buenas-practicas-en-el-desarrollo-android/#comments</comments>
		<pubDate>Tue, 30 Apr 2013 09:59:47 +0000</pubDate>
		<dc:creator>Sloy</dc:creator>
				<category><![CDATA[Noticias]]></category>
		<category><![CDATA[ActionBar]]></category>
		<category><![CDATA[Android]]></category>
		<category><![CDATA[Buenas prácticas]]></category>
		<category><![CDATA[Charla]]></category>
		<category><![CDATA[Diseño]]></category>
		<category><![CDATA[Evento]]></category>
		<category><![CDATA[Imaginática]]></category>
		<category><![CDATA[Interfaz]]></category>
		<category><![CDATA[Librerias]]></category>

		<guid isPermaLink="false">http://androcode.es/?p=4045</guid>
		<description><![CDATA[Cada dos años se celebran en Sevilla las jornadas de Imaginática en la Escuela de Ingeniería Informática, en las que se organizan charlas y actividades relacionadas con nuevas tecnologías. Este año Androcode estará allí. Mi compañero Fede y yo mismo daremos una charla sobre buenas prácticas en el desarrollo con Android. Repasaremos las principales recomendaciones &#8230; </p><p><a class="more-link block-button" href="http://androcode.es/2013/04/charla-en-imaginatica-sobre-buenas-practicas-en-el-desarrollo-android/">Continuar leyendo</a>]]></description>
				<content:encoded><![CDATA[<p>Cada dos años se celebran en Sevilla las jornadas de Imaginática en la Escuela de Ingeniería Informática, en las que se organizan charlas y actividades relacionadas con nuevas tecnologías. Este año <a href="http://imaginatica.org/2013/?p=780"><strong>Androcode estará allí</strong></a>. Mi compañero <a href="http://androcode.es/author/fedeproex/">Fede</a> y yo mismo daremos una charla sobre buenas prácticas en el desarrollo con Android.</p>
<p><img class="aligncenter size-full wp-image-4051" alt="androcode_imaginatica" src="http://androcode.es/wp-content/uploads/2013/04/androcode_imaginatica.png" width="662" height="290" /></p>
<p>Repasaremos las principales recomendaciones para hacer aplicaciones coherentes con el ecosistema Android, aprovechando todos los recursos a nuestra disposición, y que resulten en una experiencia de usuario lo más placentera posible. Básicamente, os conteremos las claves para hacer <strong>buenas</strong> aplicaciones. No será de alto nivel técnico, por lo que puede ser apta para cualquiera interesado en el mundo de las aplicaciones móviles.<span id="more-4045"></span></p>
<p>La charla será en la ETSII el <strong>sábado 4</strong> de mayo, en el aula A1.16 de <strong>10:00</strong> a 11:30. Podéis inscribiros en <a href="http://imaginatica.org/2013/?p=874">esta página</a> para confirmar vuestra asistencia. La inscripción no es obligatoria pero sí recomendable, pues los inscritos tendrán preferencia en cuanto a aforo, recibirán una mochila del evento, entrarán en el sorteo de un iPod Shuffle y, si sois estudiantes de la escuela, es necesario para que os den créditos de libre configuración (aún no confirmado). Además, desde el jueves hay gran cantidad de charlas, muchas relacionadas con tecnologías móviles. Echad un ojo al horario oficial <a href="http://imaginatica.org/2013/?page_id=581">aquí</a>.</p>
<p>Según nos han dicho la charla la grabarán en vídeo, aunque no nos han confirmado si se retransmitirán en directo o no. En cualquier caso nos aseguraremos de facilitaros todo el material que podamos tras la charla.</p>
<p>No lo dudéis, pasad a vernos si estáis cerca. Esperamos que lo que os enseñemos os ayude a hacer vuestras aplicaciones más geniales. Estaremos por allí el resto de la mañana y podemos extender la conversación si alguno quisiera <img src='http://androcode.es/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>Enlaces:<br />
<a href="http://imaginatica.org/2013/?p=780">Presentación de nuestra charla</a><br />
<a href="http://imaginatica.org/2013/?page_id=581">Horario de charlas y talleres de las jornadas</a><br />
<a href="http://imaginatica.org/2013/?p=874">Página de inscripción (opcional)</a></p>
]]></content:encoded>
			<wfw:commentRss>http://androcode.es/2013/04/charla-en-imaginatica-sobre-buenas-practicas-en-el-desarrollo-android/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>10 herramientas fuera de Eclipse para trabajar con Android (2/2)</title>
		<link>http://androcode.es/2013/04/10-herramientas-fuera-de-eclipse-para-trabajar-con-android-2/</link>
		<comments>http://androcode.es/2013/04/10-herramientas-fuera-de-eclipse-para-trabajar-con-android-2/#comments</comments>
		<pubDate>Mon, 22 Apr 2013 10:00:55 +0000</pubDate>
		<dc:creator>Fernando F. Gallego</dc:creator>
				<category><![CDATA[Recursos]]></category>
		<category><![CDATA[Android]]></category>
		<category><![CDATA[Herramientas]]></category>
		<category><![CDATA[Librerias]]></category>

		<guid isPermaLink="false">http://androcode.es/?p=3767</guid>
		<description><![CDATA[Y ya estamos de vuelta después de las vacaciones de Semana Santa con la segunda parte del post sobre herramientas interesantes para trabajar con android desde fuera de Eclipse. Prometí 10 herramientas, divididas en dos partes, pero hoy os voy a presentar 6, para qué veaís lo generoso que soy&#8230; Android Bootstrap Con Android bootstrap &#8230; </p><p><a class="more-link block-button" href="http://androcode.es/2013/04/10-herramientas-fuera-de-eclipse-para-trabajar-con-android-2/">Continuar leyendo</a>]]></description>
				<content:encoded><![CDATA[<p>Y ya estamos de vuelta después de las vacaciones de Semana Santa con la segunda parte del post sobre herramientas interesantes para trabajar con android desde fuera de Eclipse. Prometí 10 herramientas, divididas en dos partes, pero hoy os voy a presentar 6, para qué veaís lo generoso que soy&#8230;</p>
<h2>Android Bootstrap</h2>
<p>Con <a title="android bootstrap" href="http://www.androidbootstrap.com/" target="_blank">Android bootstrap</a> puedes obtener un paquete con una base para tu aplicación ya preparado con sólo decirle el nombre que quieres para tu app y el nombre de paquete que le vas a dar, después te genera un zip donde ya viene integrada una implementación de Fragments, Fragment Pager, Account Manager, <a href="https://github.com/jayway/maven-android-plugin">android-maven-plugin</a>,<a href="https://github.com/square/dagger">Dagger</a>, <a href="http://www.actionbarsherlock.com/">ActionBarSherlock 4</a>,<a href="http://viewpagerindicator.com/">ViewPagerIndicator</a>, <a href="https://github.com/kevinsawicki/http-request">http-request</a>, <a href="http://code.google.com/p/google-gson/">GSON</a>,<a href="http://code.google.com/p/robotium/">Robotium</a> para tests de integración, API Consumption con una API en <a href="http://www.parse.com/">Parse.com</a> y mucho más.<span id="more-3767"></span></p>
<p><a href="http://androcode.es/wp-content/uploads/2013/03/ScreenShot005.png"><img class="alignnone size-full wp-image-4012" alt="android bootstrap" src="http://androcode.es/wp-content/uploads/2013/03/ScreenShot005.png" width="554" height="232" /></a></p>
<p><a title="android bootstrap" href="http://www.androidbootstrap.com/" target="_blank">http://www.androidbootstrap.com/</a></p>
<h2>Android Kickstartr</h2>
<p><a title="android kickstartr" href="http://androidkickstartr.com/" target="_blank">Android kicktstartr</a> es otra herramienta similar a la anterior con la diferencia de que en este caso podemos seleccionar las librerías que incluirá el paquete que nos descarguemos, desde una interfaz web, listas para ser usadas directamente. Cabe destacar que nos permite elegir si usamos Eclipse como IDE o no, si queremos una configuración de ProGuard para ofuscar el código o si queremos usar Maven. Entre las librerías que podemos incluir se encuentran <a title="http://androidannotations.org/" href="http://androidannotations.org/" target="_blank">AndroidAnnotations</a>, <a title="http://actionbarsherlock.com/" href="http://actionbarsherlock.com/" target="_blank">ActionBarSherlock</a>, <a title="http://nineoldandroids.com/" href="http://nineoldandroids.com/" target="_blank">NineOldAndroids</a>, <a title="http://acra.ch/" href="http://acra.ch/" target="_blank">ACRA </a>o <a title="https://github.com/roboguice/roboguice" href="https://github.com/roboguice/roboguice" target="_blank">Roboguice</a>. Incluso el tipo de navegación de la action bar entre pestañas, desplegable o nada.</p>
<p><a href="http://androcode.es/wp-content/uploads/2013/03/header1.png"><img class="alignnone size-full wp-image-4013" alt="kickstartr" src="http://androcode.es/wp-content/uploads/2013/03/header1.png" width="710" height="246" /></a></p>
<p><a title="android kickstartr" href="http://androidkickstartr.com/" target="_blank">http://androidkickstartr.com/</a></p>
<h2>Fluid UI</h2>
<p><a title="fluid ui" href="http://www.fluidui.com/" target="_blank">Fluid UI</a> es una herramienta web para diseñar interfaces gráficos de usuario con plantillas para diversas plataformas móviles, incluyendo android 2 y android 4. Mediante el ratón podemos arrastrar y soltar componentes que son practicamente idénticos a los que encontraremos en la plataforma correspondiente. Tenemos la posibilidad de personalizar textos, colores y alineamientos, así como crear enlaces entre pantallas para luego, en el modo interactivo, poder hacer clic en los componentes y que nos lleven a otras pantallas. Tiene varios planes de precios y una cuenta gratuita que incluye un proyecto de hasta 10 pantallas y 10 Mb de subida de archivos.</p>
<p><a href="http://androcode.es/wp-content/uploads/2013/03/ScreenShot004.png"><img class="alignnone size-full wp-image-4005" alt="fluidUI" src="http://androcode.es/wp-content/uploads/2013/03/ScreenShot004.png" width="889" height="833" /></a></p>
<p><a title="fluidui" href="http://www.fluidui.com/" target="_blank">http://www.fluidui.com/</a></p>
<h2>Sensor simulator</h2>
<p><a title="sensor simulator" href="https://code.google.com/p/openintents/wiki/SensorSimulator" target="_blank">Sensor simulator</a> es otra herramienta que debería venir por defecto con Eclipse y el ADT. Nos permite simular los sensores del teléfono en un emulador, que obviamente no tiene estos sensores, de modo que podemos probar aplicaciones que los requieran y ver si funcionan correctamente gracias a esta útil herramienta. Entre los sensores que se pueden simular están el accelerómetro, giroscopio, temperatura, presión, proximidad, campo magnético, etc. Además también permite grabar los valores de un dispositivo real y luego reproducirlos en el emulador. Es de código abierto por lo que podemos ver cómo está hecho o aportar nuestro granito de arena al proyecto.</p>
<p><a href="http://androcode.es/wp-content/uploads/2013/03/all_small1.png"><img class="alignnone size-full wp-image-4014" alt="sensor simulator" src="http://androcode.es/wp-content/uploads/2013/03/all_small1.png" width="600" height="321" /></a></p>
<p><a title="sensor simulator" href="https://code.google.com/p/openintents/wiki/SensorSimulator" target="_blank">https://code.google.com/p/openintents/wiki/SensorSimulator</a></p>
<h2>NinePatchEditor</h2>
<p>¿No te gusta la herramienta draw9patch que viene con las herramientas de android? ¿Buscas algo más potente? Entonces <a title="http://weblookandfeel.com/nine-patch-editor/" href="http://weblookandfeel.com/nine-patch-editor/" target="_blank">Nine Patch Editor</a> es lo que buscas. Es una aplicación en java para crear nuestros nine patch  a partir de imágenes png normales pero vitaminado con una serie de gías visuales tales como reglas, guías y dimensiones que junto a la previsualización libre nos dan mucha flexibilidad a la hora de conseguir que nuestros nine patch se vean perfectamente en cualquier tamaño y con cualquier contenido, sin que se nos deformen las partes que queremos conservar. Sin duda un gran avance respecto a la herramienta que viene por defecto con las Android Developer Tools</p>
<p><a href="http://androcode.es/wp-content/uploads/2013/03/editor1.png"><img class="alignnone size-full wp-image-4007" alt="nine patch editor" src="http://androcode.es/wp-content/uploads/2013/03/editor1.png" width="974" height="550" /></a></p>
<p><a title="http://weblookandfeel.com/nine-patch-editor/" href="http://weblookandfeel.com/nine-patch-editor/" target="_blank">http://weblookandfeel.com/nine-patch-editor/</a></p>
<h2>ShareKM</h2>
<p><a title="ShareKM" href="https://sites.google.com/site/droidskm/" target="_blank">ShareKM</a> es un descubrimiento reciente y me ha cambiado la vida, te permite escribir y usar el ratón en tu android conectado al PC de forma tan sencilla que sólo hay que llevar el ratón a un borde del monitor para que &#8220;entre&#8221; en tu teléfono y puedas manejarlo con el ratón o escribir con el teclado del ordenador. Además puedes usar los botones del ratón como si fueran las teclas atrás o menú. Mirad el siguiente vídeo y alucinad&#8230;</p>
<span class='embed-youtube' style='text-align:center; display: block;'><iframe class='youtube-player' type='text/html' width='425' height='355' src='http://www.youtube.com/embed/-C-SOEqr6-8?version=3&#038;rel=1&#038;fs=1&#038;showsearch=0&#038;showinfo=1&#038;iv_load_policy=1&#038;wmode=transparent' frameborder='0'></iframe></span>
<p><a href="https://sites.google.com/site/droidskm/">https://sites.google.com/site/droidskm/</a></p>
<h2>LogCat beautifier</h2>
<p>LogCat beautifier es una pequeña herramienta que hice un día de locura y que es bastante simple. Muchas veces te mandan o tienes que mandar una traza del logcat por email y te sale todo en negro y no se distingue fácilmente qué lineas son error, cuales son warnings, cuales no importan&#8230; así que con esta herramienta puedes colorear las líneas del log otra vez y así puedes enviarlas coloreadas o verlas mejor.</p>
<p><img alt="nyan logcat" src="http://4.bp.blogspot.com/-_7ypmac8JM8/T3G8unWMLvI/AAAAAAAABiY/ZpADmFYUGJM/s1600/image212%5B1%5D.png" width="288" height="288" /></p>
<p><a href="http://forgottenprojects.com/tools/android/logcat/">http://forgottenprojects.com/tools/android/logcat/</a></p>
<p>Y hasta aquí unas cuantas herramientas que ayudan en el desarrollo de aplicaciones, seguro que hay más utilidades interesantes o aparecen más en el futuro. Y si conocés más dignas de ser mencionadas, sólo tenéis que añadirlas a los comentarios de esta entrada.</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://androcode.es/2013/04/10-herramientas-fuera-de-eclipse-para-trabajar-con-android-2/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Generar ID único en la instalación de nuestras apps</title>
		<link>http://androcode.es/2013/04/generar-id-unico-en-la-instalacion-de-nuestras-apps/</link>
		<comments>http://androcode.es/2013/04/generar-id-unico-en-la-instalacion-de-nuestras-apps/#comments</comments>
		<pubDate>Fri, 19 Apr 2013 15:05:28 +0000</pubDate>
		<dc:creator>Kix2902</dc:creator>
				<category><![CDATA[Snippets]]></category>
		<category><![CDATA[seguridad]]></category>
		<category><![CDATA[snippet]]></category>

		<guid isPermaLink="false">http://androcode.es/?p=3991</guid>
		<description><![CDATA[Hace poco tuve que pelearme con la generación de un ID único para el dispositivo o la instalación que estoy ejecutando de mi aplicación y tras buscar mucho por Internet encontré varias opciones pero siempre con algún inconveniente que hacía imposible su uso real. Las distintas opciones que encontré (y sus inconvenientes) son estas: IMEI: &#8230; </p><p><a class="more-link block-button" href="http://androcode.es/2013/04/generar-id-unico-en-la-instalacion-de-nuestras-apps/">Continuar leyendo</a>]]></description>
				<content:encoded><![CDATA[<p>Hace poco tuve que pelearme con la generación de un ID único para el dispositivo o la instalación que estoy ejecutando de mi aplicación y tras buscar mucho por Internet encontré varias opciones pero siempre con algún inconveniente que hacía imposible su uso real.</p>
<p>Las distintas opciones que encontré <em>(y sus inconvenientes)</em> son estas:</p>
<ul>
<li><span style="line-height: 12px;"><em>IMEI:</em> Sólo disponible en dispositivos con SIM disponible. Necesita declarar permiso en el manifest.</span></li>
<li><em>Secure.ANDROID_ID:</em> Sólo existe desde Android 2.2 y con posibles valores duplicados entre dispositivos.</li>
<li><em>MAC del WiFi/BT:</em> Sólo funciona si está activo el receptor. Necesitamos pedir permiso en el manifest.</li>
<li><em>Build.SERIAL:</em> Disponible a partir de Android 2.3. Sólo obligatorio para dispositivos sin SIM.</li>
</ul>
<p>Como podéis ver no hay nada que directamente nos identifique el dispositivo o la instalación de forma única y, por tanto, que podamos usar como ID de la misma.</p>
<p>Tras mucho pelearme me crucé con un snippet de código que Reto Meier indicó en el Google I/O de 2011 como mejor aproximación para obtener dicha identificación y que no tiene ninguno de los inconvenientes que sí veíamos en las opciones anteriores.</p>
<p><span id="more-3991"></span></p>
<p>El snippet en concreto es este que os copio aquí debajo y que podéis pegar en cualquier clase de vuestro proyecto directamente ya que no necesita ningún permiso especial a declarar en el manifest y es compatible incluso con Android 1.0&#8230;</p>
<pre class="brush: java; gutter: true; first-line: 1">private static String uniqueID = null;
private static final String PREF_UNIQUE_ID = "PREF_UNIQUE_ID";

public synchronized static String id(Context context) {
	if (uniqueID == null) {
		SharedPreferences sharedPrefs = context.getSharedPreferences(PREF_UNIQUE_ID, Context.MODE_PRIVATE);
		uniqueID = sharedPrefs.getString(PREF_UNIQUE_ID, null);
		if (uniqueID == null) {
			uniqueID = UUID.randomUUID().toString();
			Editor editor = sharedPrefs.edit();
			editor.putString(PREF_UNIQUE_ID, uniqueID);
			editor.commit();
		}
	}
	return uniqueID;
}</pre>
<p>Y para obtener el código desde cualquier punto de nuestro proyecto tan solo debemos llamar al método <em>id()</em> pasándole un objeto de tipo <em>Context</em>, por ejemplo:</p>
<pre class="brush: java; gutter: true; first-line: 1">String deviceID = id(Activity.this);</pre>
<p>Y hasta aquí este pequeño snippet que seguro le dais un buen uso&#8230; <img src='http://androcode.es/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://androcode.es/2013/04/generar-id-unico-en-la-instalacion-de-nuestras-apps/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Cómo hacer una extensión para DashClock Widget</title>
		<link>http://androcode.es/2013/04/como-hacer-una-extension-para-dashclock-widget/</link>
		<comments>http://androcode.es/2013/04/como-hacer-una-extension-para-dashclock-widget/#comments</comments>
		<pubDate>Wed, 17 Apr 2013 08:23:00 +0000</pubDate>
		<dc:creator>Sloy</dc:creator>
				<category><![CDATA[Tutoriales]]></category>
		<category><![CDATA[APIs]]></category>
		<category><![CDATA[Codigo Fuente]]></category>
		<category><![CDATA[DashClock]]></category>
		<category><![CDATA[Programación]]></category>

		<guid isPermaLink="false">http://androcode.es/?p=3776</guid>
		<description><![CDATA[Probablemente en las últimas semanas habréis oído hablar del widget DashClock, y no es para menos. Este widget pensado para usar en la pantalla de bloqueo de Android Jelly Bean 4.2 fue sacado al público recientemente por Roman Nurik, uno de los diseñadores del equipo de Google. Es una muestra de como hacer aprovechar la &#8230; </p><p><a class="more-link block-button" href="http://androcode.es/2013/04/como-hacer-una-extension-para-dashclock-widget/">Continuar leyendo</a>]]></description>
				<content:encoded><![CDATA[<p>Probablemente en las últimas semanas habréis oído hablar del widget <a href="https://play.google.com/store/apps/details?id=net.nurik.roman.dashclock">DashClock</a>, y no es para menos. Este widget pensado para usar en la pantalla de bloqueo de Android Jelly Bean 4.2 fue sacado al público recientemente por <a href="https://plus.google.com/+RomanNurik"><strong>Roman Nurik</strong></a>, uno de los diseñadores del equipo de Google. Es una muestra de como hacer aprovechar la nueva función de widgets en la pantalla de bloqueo, de forma útil, minimalista y atractiva.</p>
<p><img class="alignright size-full wp-image-3965" alt="androcode_dashclock" src="http://androcode.es/wp-content/uploads/2013/04/androcode_dashclock.png" width="662" height="290" /></p>
<p>Pero hay una característica de este widget que a nosotros nos interesa especialmente: <strong>se pueden crear extensiones</strong>. Con relativamente poco esfuerzo podemos añadir funcionalidad al widget mediante aplicaciones externas, usando un sistema de módulos que el usuario puede añadir y quitar a su antojo. Hoy vamos a ver cómo podemos aprovechar la API de este magnífico widget.</p>
<p><span id="more-3776"></span></p>
<h1>Qué podemos hacer</h1>
<p>La API de extensiones del widget es bastante simple y está muy bien documentada. Pero veamos un resumen de lo que podremos hacer. Aunque como todo widget puede colocarse en el escritorio, vamos a considerar durante todo el tutorial que lo usamos en la pantalla de bloqueo, pues es para lo que está diseñado.</p>
<h3>Partes del widget y las extensiones</h3>
<p>El widget tiene 2 modos: contraído y expandido. Cuando está contraído muestra la hora y a su derecha un máximo de 3 extensiones, con su icono y un (muy) breve texto. Al expandirlo se mostrará en su lugar un botón para abrir las preferencias, y debajo de la hora saldrán todas las extensiones activas en una lista vertical con el icono, un título y un mensaje opcional.</p>
<p><img class="alignright size-large wp-image-3887" alt="lockscreen" src="http://androcode.es/wp-content/uploads/2013/04/lockscreen-1024x869.png" width="620" height="526" /></p>
<p>Las extensiones por lo tanto <strong>están compuestas por</strong>:</p>
<ul>
<li>Un <strong>icono</strong>, sencillo y monocolor.</li>
<li>Un <strong>estado</strong>, una cadena de pocos caracteres (3-4 aprox.). Si contiene un y sólo un salto de línea, el estado usará una fuente más pequeña y ocupará 2 líneas. Aunque el autor recomienda evitarlo si es posible.</li>
<li>Un <strong>título</strong>, que se usará en la forma expandida. Similar al estado, pero más largo. Puede contener varias líneas, aunque el widget limitará las que se muestran.</li>
<li>Un <strong>cuerpo</strong> o mensaje, que se mostrará debajo del título en la forma expandida. Su función es mostrar información secundaria o adicional. Puede contener múltiples líneas, aunque el widget limitará las que se muestran.</li>
<li>Un <strong>Intent</strong>, que se lanzará para abrir una actividad cuando se pulse en la extensión, tanto en la forma expandida como la contraída.</li>
<li>Una <strong>actividad</strong> de ajustes, para personalizar parámetros de la extensión si lo necesitamos. Se abre desde la propia pantalla de configuración del widget.</li>
</ul>
<p>Todos estos parámetros (salvo la actividad de ajustes) se recogen en la clase <a href="http://api.dashclock.googlecode.com/git/reference/com/google/android/apps/dashclock/api/ExtensionData.html"><strong>ExtensionData</strong></a>, que se usa para actualizar la información mostrada por el widget.</p>
<p>Por otra parte, los <strong>métodos y acciones más importantes</strong> que podemos usar y sobreescribir del widget son:</p>
<ul>
<li><strong>onInitialize</strong>(boolean isReconect): Se llama cuando la extensión establece conexión con el widget. Aquí debemos hacer cualquier tarea de inicialización antes de que el widget empiece a pedir información a la extensión.</li>
<li><b>onUpdateData</b>(int reason): Se llama cuando el widget solicita información actualizada a la extensión. Aquí haremos las operaciones oportunas y le pasaremos al widget la información actualizada que queramos mostrar. Por defecto se llama aproximadamente una vez cada hora, pero puede llamarse en otras circunstancias. El motivo de la petición se indica mediante una constante que se le pasa como parámetro.</li>
<li><strong>publishUpdate</strong>(ExtensionData data): A través de este método actualizamos la información mostrada en el Widget. Como parámetro le pasamos la información que vimos en el apartado anterior.</li>
<li>Dos métodos que en la mayoría de casos no serán necesarios: <strong>setUpdateWhenScreenOn</strong> y <strong>addWatchContentUris</strong>. El primero hace que se ejecute el onUpdateData al encender la pantalla, y el segundo lo hace cuando el contenido en una URI ha cambiado.</li>
</ul>
<p>Con esto deberíamos tener una idea general de lo que nos permite hacer el Widget y cómo podemos aprovecharlo en nuestra aplicación.</p>
<h1>Ejemplo: monitor de Twitter</h1>
<p>Veamos un ejemplo sencillo de cómo desarrollaríamos una extensión para DashClock. Haremos una extensión que consulte periódicamente los resultados de una búsqueda en Twitter concreta para monitorizar lo que se habla de ello: el nombre de nuestra web, de nuestra aplicación, una marca, una persona&#8230;</p>
<p><a href="http://androcode.es/wp-content/uploads/2013/04/ejemplo.png"><img class="aligncenter size-large wp-image-3988" alt="ejemplo" src="http://androcode.es/wp-content/uploads/2013/04/ejemplo-1024x685.png" width="620" height="414" /></a></p>
<p>Queremos que cuando encuentre nuevos Tweets nos aparezca una entrada en DashClock avisándonos. Lo ideal sería tener una aplicación completa haciendo las tareas y que ésta actualice el Widget cuando sea necesario, pero para el ejemplo nos limitaremos a hacerlo todo en la propia extensión.</p>
<p>El código completo de la aplicación está en un <a href="https://github.com/androcode-es/DashClock-Twitter-Monitor">repositorio de GitHub</a>, donde podéis consultar todos los detalles. A continuación voy a explicar las partes más significativas del código.</p>
<h2>1. Importar librería</h2>
<p>La API de DashClock viene en forma de <strong>librería jar</strong> que debemos importar en nuestro proyecto. Sólo hay que bajarla de la <a href="https://code.google.com/p/dashclock/downloads/list">página de descargas</a> alojada en Google Code, y añadirla a la carpeta <em><strong>libs</strong></em> del proyecto. Automáticamente debería añadirse al Build Path y ya estaremos listos para empezar a programar.</p>
<h2>2. Registrar la extensión en el AndroidManifest.xml</h2>
<p>En nuestro omnipresente <a href="https://github.com/androcode-es/DashClock-Twitter-Search/blob/master/AndroidManifest.xml">AndroidManifest.xml</a> añadimos una entrada de tipo service, pues eso es la extensión, como se muestra a continuación. Debemos asegurarnos de <strong>requerir el permiso</strong> READ_EXTENSION_DATA para que sólo DashClock pueda hacer uso de la extensión, además de varios campos meta-data para la <strong>versión del protocolo</strong> (de momento sólo hay 1), la <strong>descripción de la extensión</strong> (para mostrarse en la configuración del Widget), y la <strong>Activity de configuración</strong> de nuestra extensión (opcional).</p>
<pre class="brush: xml; gutter: true; first-line: 1">&lt;service
            android:name=".TwitterSearchExtension"
            android:icon="@drawable/ic_extension"
            android:label="@string/extension_title"
            android:permission="com.google.android.apps.dashclock.permission.READ_EXTENSION_DATA" &gt;
            &lt;intent-filter&gt;
                &lt;action android:name="com.google.android.apps.dashclock.Extension" /&gt;
            &lt;/intent-filter&gt;

            &lt;meta-data
                android:name="protocolVersion"
                android:value="1" /&gt;
            &lt;meta-data
                android:name="description"
                android:value="@string/extension_description" /&gt;
            &lt;!-- A settings activity is optional --&gt;
            &lt;meta-data
                android:name="settingsActivity"
                android:value=".ConfigActivity" /&gt;
        &lt;/service&gt;</pre>
<h2>3. Extender DashClockExtension e implementar métodos</h2>
<p>Ahora debemos extender la clase <strong>DashClockExtension</strong> y sobreescribir, como mínimo, el método <strong>onUpdateData</strong>. En <a href="https://github.com/androcode-es/DashClock-Twitter-Search/blob/master/src/es/androcode/dashclocktwittersearch/TwitterSearchExtension.java">nuestra clase</a> también sobreescribiremos el onInitialize, pero sólo lo haremos para inicialización de propiedades.</p>
<pre class="brush: java; gutter: true; first-line: 1">@Override
    protected void onInitialize(boolean isReconnect) {
        /*
         * Aquí llamaríamos a setUpdateWhenScreenOn(boolean) o addWatchContentUris(String[]) si quisiéramos usar dichas funciones.
         * En este caso no lo hacemos
         */
        mPrefs = PreferenceManager.getDefaultSharedPreferences(this);
    }

    @Override
    protected void onUpdateData(int reason) {
        String busqueda = mPrefs.getString(QUERY, "androcode");

        // Creamos el objeto ExtensionData que rellenaremos con los datos que queremos mostrar en el Widget
        ExtensionData data = new ExtensionData();
        data.icon(R.drawable.ic_extension);
        data.clickIntent(new Intent(ACTION_RESULTS));

        try {
            // Hacemos la búsqueda en Twitter. Esto es independiente de nuestra extensión
            JSONArray tweets = getNewTweets(busqueda);
            Integer cantidad = tweets.length();
            String cantidadMostrar = (cantidad &lt;= MAX_TWEETS) ? cantidad.toString() : MAX_TWEETS + "+";

            // Ahora sí, configuramos los datos del Widget
            data.status(cantidadMostrar);
            data.expandedTitle(getResources().getQuantityString(R.plurals.extension_content_title, cantidad, cantidadMostrar));
            data.expandedBody(String.format(getString(R.string.extension_content_body), busqueda));
            if (cantidad &lt; 1) {
                data.visible(false); // Mientras no haya información ocultamos la extensión para dejar sitio a otras
            } else {
                data.visible(true);
            }
        } catch (Exception e) {
            // Normalmente haríamos otra cosa al capturar la excepción, pero esto viene bien para debug
            data.visible(true)
                    .expandedTitle(e.getClass().getCanonicalName())
                    .expandedBody(e.getMessage())
                    .status("ERROR");
        }

        // Y finalmente le decimos al Widget que actualice los datos
        publishUpdate(data);
    }</pre>
<p>El método <strong>onUpdateData</strong> es bastante auto explicativo y está comentado. Pero repasemos brevemente lo que hace:</p>
<ul>
<li>Crea un nuevo objeto de tipo <strong>ExtensionData</strong>, que es el que debemos rellenar con los datos que queremos mostrar en el Widget y que ya vimos al principio del artículo. Le asigna el icono y un clickIntent, que se llamará cuando pulsemos la entrada de la extensión en el Widget. Más adelante veremos para qué.</li>
<li>Obtiene un array de JSON que contiene los Tweets resultantes de la búsqueda. El método encargado de esta tarea no se muestra arriba porque no es relevante en cuanto a lo que quiero enseñar con este ejemplo, pero puedes consultarlo completo <strong>aquí</strong>.</li>
<li>En el campo de estado de la extensión escribe el número de tweets nuevos encontrados. Recordad que éste debe ser un texto muy breve, debemos poner algo corto y relevante que se mostrará junto al icono de la extensión.</li>
<li>En el título y cuerpo expandidos escribe un texto indicando el número de resultados y la cadena que se buscó, respectivamente. Estos textos pueden ser más largos y descriptivos que el estado. Podríamos incluso poner en el cuerpo el contenido de los primeros Tweets si quisiéramos.</li>
<li>Establece como visible la extensión si hay más de 1 tweet nuevo. De lo contrario la oculta para no estorbar, siguiendo la premisa de &#8220;si no tienes nada bueno que decir, cállate&#8221;.</li>
<li>Además captura las posibles excepciones (lanzadas por los métodos de consulta de Twitter), y de ocurrir alguna la mostramos en la propia extensión. Esto <strong>NO</strong> lo deberíamos hacer jamás para una extensión de verdad. En este caso es útil para hacer debug durante el desarrollo, pero en producción deberíamos tratar la excepción de forma más cuidadosa.</li>
<li>Finalmente actualiza la información del Widget enviando los datos recogidos en nuestro ExtensionData mediante el método <strong>publishUpdate</strong>. Ahora el Widget se encarga del resto, y mostrará lo que le hemos mandado.</li>
</ul>
<h2>4. Activity de configuración y de respuesta</h2>
<p>Por último, y de forma opcional, vamos a crear dos actividades: una para configurar la extensión y otra para abrirla cuando pulsemos sobre la extensión en el Widget.</p>
<p><a href="http://androcode.es/wp-content/uploads/2013/04/settings.png"><img class="alignright  wp-image-3973" alt="settings" src="http://androcode.es/wp-content/uploads/2013/04/settings-300x139.png" width="180" height="83" /></a>La <a href="https://github.com/androcode-es/DashClock-Twitter-Search/blob/master/src/es/androcode/dashclocktwittersearch/ConfigActivity.java">primera</a> es muy simple, solamente tendrá un campo de texto donde configuraremos el texto que queremos que la extensión busque en Twitter. Haremos que automáticamente se guarde al salir de la Activity.</p>
<pre class="brush: java; gutter: true; first-line: 1">public class ConfigActivity extends Activity {

    private SharedPreferences mPrefs;
    private TextView mQuery;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_config);
        getActionBar().setDisplayHomeAsUpEnabled(true);

        mPrefs = PreferenceManager.getDefaultSharedPreferences(this);
        mQuery = (TextView) findViewById(R.id.query);

        // Coloca el texto que actualmente está guardado
        mQuery.setText(mPrefs.getString(TwitterSearchExtension.QUERY, "androcode"));
    }

    @Override
    protected void onPause() {
        super.onPause();
        mPrefs.edit()
                .putString(TwitterSearchExtension.QUERY, mQuery.getText().toString().trim()) //Guarda el texto para las búsquedas
                // Y elimina las referencias al último tweet consultado y último visto, puesto que la búsqueda es distinta.
                .putLong(TwitterSearchExtension.ULTIMO_TWEET_CONSULTADO, 0)
                .putLong(TwitterSearchExtension.ULTIMO_TWEET_VISTO, 0)
                .commit();
    }

    //...

}</pre>
<p>La <a href="https://github.com/androcode-es/DashClock-Twitter-Search/blob/master/src/es/androcode/dashclocktwittersearch/ResultsActivity.java">segunda</a> Activity será más bien de pega. Si este fuera un caso real y estuviésemos integrando nuestra aplicación ya existente con DashClock seguramente querríamos mostrar una Activity de nuestra aplicación donde mostremos la lista de resultados, para llevar control de los resultados leídos y no leídos, entre otras cosas. Pero en nuestro ejemplo, lo único que haremos será abrir el navegador con la página de Twitter correspondiente a la búsqueda. Además, guardamos el valor del último Tweet consultado por la extensión como &#8220;visto&#8221;, para hacer las próximas buscas a partir de él.</p>
<pre class="brush: java; gutter: true; first-line: 1">public class ResultsActivity extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        finish();

        SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);

        // Marcamos el último tweet consultado como último visto
        long ultimoConsultado = prefs.getLong(TwitterSearchExtension.ULTIMO_TWEET_CONSULTADO, 0);
        prefs.edit().putLong(TwitterSearchExtension.ULTIMO_TWEET_VISTO, ultimoConsultado).commit();

        // Abrimos la página de twitter, por hacer algo
        String query = prefs.getString(TwitterSearchExtension.QUERY, "androcode");
        startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("https://twitter.com/search?q=" + query)));
    }
}</pre>
<p>Por suerte DashClock lanza una petición de actualización sobre las extensiones tanto al pulsar sobre la extensión como al salir de los ajustes, por lo que no tenemos que preocuparnos de reiniciar los datos mostrados en ambos casos. Cuando justo después se ejecute el onUpdateData ya estaremos preparados para devolver los datos correctos.</p>
<h2>5. Resultado</h2>
<p>Y con esto podemos instalar la aplicación y añadir nuestra extensión a DashClock para conseguir lo que veis en la captura del principio. ¿A que no ha sido para tanto?</p>
<p><a href="https://play.google.com/store/apps/details?id=es.androcode.dashclock.twittermonitor"><img class="alignright size-full wp-image-3981" alt="Play Store" src="http://androcode.es/wp-content/uploads/2013/04/es_generic_rgb_wo_45.png" width="129" height="45" /></a>Como dije antes, el código completo de la aplicación se encuentra publicado en <a href="https://github.com/androcode-es/DashClock-Twitter-Monitor">este repositorio</a> de GitHub. Además, si quieres probarla sin tener que compilar el código, puedes descargarla desde el Play Store <a href="https://play.google.com/store/apps/details?id=es.androcode.dashclock.twittermonitor">aquí mismo</a>.</p>
<h1>Conclusión</h1>
<p>DashClock nos ofrece grandes posibilidades a lo desarrolladores, puesto que ningún usuario <del>en su sano juicio</del> pondrá un widget completo en su pantalla de bloqueo (o incluso en el escritorio) para algo tan simple como lo que hemos visto en el ejemplo, pero quizás sí les gustaría centralizar pequeños fragmentos de información en un sitio. Es la gran ventaja que nos ofrece la barra de notificaciones de Android frente a mostrar un cuadro de diálogo modal interrumpiendo nuestro trabajo, pero llevado al área de la pantalla de bloqueo. Personalmente, habría preferido que Android 4.2 trajera por defecto algo como DashClock (con una API un poco más potente), en vez de eso de poner widgets completos.</p>
<p>Espero que con este artículo os animéis a crear extensiones de utilidad. Y sobre todo, si tenéis aplicaciones que podrían hacer uso del Widget, integrarlas. Es una buena forma darle visibilidad a tu aplicación frente al resto, y seguro que tus usuarios agradecen tener esta opción.</p>
<p>Enlaces: <a href="https://play.google.com/store/apps/details?id=net.nurik.roman.dashclock">Descarga DashClock</a> | <a href="https://code.google.com/p/dashclock/wiki/API">Documentación oficial</a> | <a href="https://github.com/androcode-es/DashClock-Twitter-Monitor">Repositorio ejemplo</a></p>
]]></content:encoded>
			<wfw:commentRss>http://androcode.es/2013/04/como-hacer-una-extension-para-dashclock-widget/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>NFC (I): Explicación, tutorial básico y sorteo</title>
		<link>http://androcode.es/2013/04/nfc-i-explicacion-tutorial-basico-y-sorteo/</link>
		<comments>http://androcode.es/2013/04/nfc-i-explicacion-tutorial-basico-y-sorteo/#comments</comments>
		<pubDate>Mon, 15 Apr 2013 09:53:11 +0000</pubDate>
		<dc:creator>InmaculadaAlcon</dc:creator>
				<category><![CDATA[Artículos]]></category>
		<category><![CDATA[Tutoriales]]></category>
		<category><![CDATA[Codigo Fuente]]></category>
		<category><![CDATA[Concurso]]></category>
		<category><![CDATA[NFC]]></category>

		<guid isPermaLink="false">http://androcode.es/?p=3735</guid>
		<description><![CDATA[Hola a todos, en este post voy a tratar de explicar qué es NFC, algunos usos que tiene y una explicación fácil para programar un editor de textos en NFC muy sencillo. Además, estad atentos al final porque regalaremos unos tags NFC para que probéis cómo hacerlo El futuro y el presente de las microcomunicaciones. ¿Qué &#8230; </p><p><a class="more-link block-button" href="http://androcode.es/2013/04/nfc-i-explicacion-tutorial-basico-y-sorteo/">Continuar leyendo</a>]]></description>
				<content:encoded><![CDATA[<p>Hola a todos, en este post voy a tratar de explicar qué es NFC, algunos usos que tiene y una explicación fácil para programar un editor de textos en NFC muy sencillo. Además, estad atentos al final porque regalaremos unos tags NFC para que probéis cómo hacerlo <img src='http://androcode.es/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p><img class="alignright size-full wp-image-3913" alt="androcode_nfc" src="http://androcode.es/wp-content/uploads/2013/04/androcode_nfc.png" width="662" height="290" /></p>
<h1></h1>
<h1></h1>
<h1></h1>
<h1></h1>
<h1></h1>
<h1></h1>
<h1></h1>
<h1><span id="more-3735"></span></h1>
<h1>El futuro y el presente de las microcomunicaciones. ¿Qué es NFC y de dónde viene?</h1>
<p>Near Field Communication(NFC) es una tecnología de comunicación inalámbrica, de corto alcance y alta frecuencia que permite intercambio de datos entre dispositivos <strong>a menos de 10 cm</strong>.<br />
Funciona en la banda de 16.56MHz, la cuál es una frecuencia libre que se puede usar sin licencias con distintas velocidades de 106kbit/s, 212kbit/s o 424kbit/s.</p>
<p>Es una evolución del anterior RFID(ISO 14443), un dispositivo NFC puede comunicarse con cualquier tarjeta inteligente y lector existentes dentro del estándar ISO/IEC 14443. La principal diferencia es que el alcance es mucho menor, por lo que se <strong>necesita que los dispositivos estén a escasos centímetros durante un instante </strong>para la transmisión de información. Aunque podría parecernos una limitación, más bien es una ventaja ya que el usuario es consciente del acto que está haciendo y refleja la voluntad de usar este servicio.</p>
<p>Su desarrollo comienza en 2002 y sus promotores fueron Philips y Sony para conseguir compatibilidad con sus tecnologías Mifare y FeliCa respectivamente. A finales de 2003 se aprueba como el estándar ISO 18092 y ECMA-340. En 2004 Nokia, Philips y Sony crearon NFC Forum. En 2006 salió al mercado el primer dispositivo con NFC desarrollado por Nokia , el Nokia 6131. En 2010 Samsung lanzó el primer dispositivo con Android y NFC, el Samsung Nexus S.</p>
<h2><b>Usos de NFC<img class="alignright size-thumbnail wp-image-3950" alt="showcase" src="http://androcode.es/wp-content/uploads/2013/04/showcase-150x150.jpg" width="150" height="150" /></b></h2>
<ul>
<li><b>Conexión entre dispositivos: </b> Podemos vincular nuestro dispostivo Android con un altavoz inalámbrico, la TV, o el ordenador.</li>
<li><b>Pago por NFC:</b> Un ejemplo de esta aplicación puede ser Google Wallet. Una vez configurada tu tarjeta e identificada, sólo tenemos que realizar el pago acercando el dispositivo al lector y aceptar el pago. Esta opción la probé gracias a la MWC 2013 y me pareció de lo más simple, cómodo y eficaz para no tener que estar sacando la tarjeta, escribir el PIN&#8230; El dispositivo lo tenemos en la mano casi todo el día y es un simple gesto.</li>
<li><b>Compartir archivos:</b> Con la nueva versión de Android 4.1 Jelly Bean compartir archivos es fácil, simplemente con acercar dos dispositivos estos se vinculan automáticamente y podemos compartir fotos o información en general.</li>
<li><b>Tags de Información:</b> Durante la MWC nos encontramos muchos de estos Tags, con sólo acercar el dispositvo se nos abría la aplicación de GSMA con la información a tiempo real o una página web dónde encontrábamos la información, práctico y sencillo.</li>
<li><b>Más usos:</b> La posibilidad de usar NFC en la vida diaria es probablemente algo que haremos no en un tiempo muy lejano, esta tecnología tiene muchisimas posibilidades de uso común por su facilidad en el uso y la gran aceptación que está teniendo por los usuarios que poseen dispositivos con esta tecnología.</li>
</ul>
<h1>Desarrollo de un editor de etiquetas simple de NFC</h1>
<p>Ahora voy a explicar un simple código para poder crear mensajes en Tags. En un tutorial más avanzado hablaré de compartir entre dispositivos y otros ejemplos que surjan. Este es un &#8220;tuto&#8221; introductorio para que veáis qué fácil es el desarrollo de un editor de Tag NFC</p>
<p>Creamos un nuevo proyecto llamado <em>&#8220;es.androcode.nfc&#8221;</em> con una simple Activity llamada <em>MainActivity.<br />
</em>La parte más importante de nuestro proyecto además del Activity se encuentra en nuestro Manifest. La línea señalada es la que da permisos a la aplicación para usar el NFC de nuestro dispositivo.</p>
<p>Nuestro <strong>AndroidManifest.xml</strong> será como sigue:</p>
<pre class="brush: xml; gutter: true; first-line: 1; highlight: [23]">&lt;?xml version="1.0" encoding="utf-8"?&gt;
&lt;manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.androcode.nfc"
    android:versionCode="1"
    android:versionName="1.0" &gt;
    &lt;uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="17" /&gt;
    &lt;application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" &gt;
        &lt;activity
            android:name="com.androcode.nfc.MainActivity"
            android:label="@string/app_name" &gt;
            &lt;intent-filter&gt;
                &lt;action android:name="android.intent.action.MAIN" /&gt;
                &lt;category android:name="android.intent.category.LAUNCHER" /&gt;
            &lt;/intent-filter&gt;
        &lt;/activity&gt;
    &lt;/application&gt;
    &lt;uses-permission android:name="android.permission.NFC" /&gt;
&lt;/manifest&gt;</pre>
<p>Una vez creado el Manifest, vamos a crear el layout <strong>activity_main</strong> que será nuestra simple interfaz.</p>
<p>Un simple LinearLayout con un TextView, un EditText donde escribiremos el mensaje que queremos que almacene nuestro Tag y un botón para crear la acción de escribir en el Tag.</p>
<pre class="brush: xml; gutter: true; first-line: 1">&lt;?xml version="1.0" encoding="utf-8"?&gt;
&lt;LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" &gt;

    &lt;TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Write you message: "&gt;
    &lt;/TextView&gt;

    &lt;LinearLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_marginTop="20sp" &gt;

        &lt;EditText
            android:id="@+id/edit_message"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="2"
            android:hint="message" /&gt;

        &lt;Button
            android:id="@+id/button"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="Write!!" /&gt;
    &lt;/LinearLayout&gt;

&lt;/LinearLayout&gt;</pre>
<p>Ahora estamos listos para crear la <strong>Activity</strong> que explico a continuación del código.</p>
<pre class="brush: java; gutter: true; first-line: 1">package com.androcode.nfc;

import java.io.IOException;
import java.io.UnsupportedEncodingException;

import android.nfc.FormatException;
import android.nfc.NdefMessage;
import android.nfc.NdefRecord;
import android.nfc.NfcAdapter;
import android.nfc.Tag;
import android.nfc.tech.Ndef;
import android.os.Bundle;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;

@SuppressLint("NewApi")
public class MainActivity extends Activity {
	NfcAdapter adapter;
	PendingIntent pendingIntent;
	IntentFilter writeTagFilters[];
	boolean writeMode;
	Tag myTag;
	Context context;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //Definimos el layout a usar
        setContentView(R.layout.activity_main);
        context = this;
        //Los elementos que vamos a usar en el layout
        Button btnWrite = (Button)findViewById(R.id.button);
        final TextView message = (TextView)findViewById(R.id.edit_message);
        //setOnCLickListener hará la acción que necesitamos
        btnWrite.setOnClickListener(new OnClickListener() {
	@Override
	public void onClick(View v) {
	  try{
              //Si no existe tag al que escribir, mostramos un mensaje de que no existe.
              if(myTag == null){
		Toast.makeText(context, context.getString(R.string.error_notag), Toast.LENGTH_LONG).show();
	      }else{
               //Llamamos al método write que definimos más adelante donde le pasamos por
               //parámetro el tag que hemos detectado y el mensaje a escribir.
		write(message.getText().toString(),myTag);
	        Toast.makeText(context, context.getString(R.string.ok_write), Toast.LENGTH_LONG).show();
	     }
	   }catch(IOException e){
	Toast.makeText(context, context.getString(R.string.error_write),Toast.LENGTH_LONG).show();
		e.printStackTrace();
	}catch(FormatException e){
       Toast.makeText(context, context.getString(R.string.error_write), Toast.LENGTH_LONG).show();
	e.printStackTrace();
	}
     }
  });

        adapter = NfcAdapter.getDefaultAdapter(this);
        pendingIntent = PendingIntent.getActivity(this, 0, new Intent(this,getClass()).addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP), 0);
        IntentFilter tagDetected = new IntentFilter(NfcAdapter.ACTION_TAG_DISCOVERED);
        tagDetected.addCategory(Intent.CATEGORY_DEFAULT);
        writeTagFilters = new IntentFilter[]{tagDetected};
    }
    //El método write es el más importante, será el que se encargue de crear el mensaje 
    //y escribirlo en nuestro tag.
    private void write(String text, Tag tag) throws IOException, FormatException{
      //Creamos un array de elementos NdefRecord. Este Objeto representa un registro del mensaje NDEF	
      //Para crear el objeto NdefRecord usamos el método createRecord(String s)
      NdefRecord[] records = {createRecord(text)};
      //NdefMessage encapsula un mensaje Ndef(NFC Data Exchange Format). Estos mensajes están 
      //compuestos por varios registros encapsulados por la clase NdefRecord      
      NdefMessage message = new NdefMessage(records);
      //Obtenemos una instancia de Ndef del Tag
      Ndef ndef = Ndef.get(tag);
      ndef.connect();
      ndef.writeNdefMessage(message);
      ndef.close();
    }
    //Método createRecord será el que nos codifique el mensaje para crear un NdefRecord
    @SuppressLint("NewApi") private NdefRecord createRecord(String text) throws UnsupportedEncodingException{
    	String lang = "us";
    	byte[] textBytes = text.getBytes();
    	byte[] langBytes = lang.getBytes("US-ASCII");
    	int langLength = langBytes.length;
    	int textLength = textBytes.length;
    	byte[] payLoad = new byte[1 + langLength + textLength];

    	payLoad[0] = (byte) langLength;

    	System.arraycopy(langBytes, 0, payLoad, 1, langLength);
    	System.arraycopy(textBytes, 0, payLoad, 1+langLength, textLength);

    	NdefRecord recordNFC = new NdefRecord(NdefRecord.TNF_WELL_KNOWN, NdefRecord.RTD_TEXT, new byte[0], payLoad);

    	return recordNFC;

    }
    //en onnewIntent manejamos el intent para encontrar el Tag
    @SuppressLint("NewApi") protected void onNewIntent(Intent intent){
    	if(NfcAdapter.ACTION_TAG_DISCOVERED.equals(intent.getAction())){
    		myTag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);
    		Toast.makeText(this, this.getString(R.string.ok_detected) + myTag.toString(), Toast.LENGTH_LONG).show();

    	}
    }

    public void onPause(){
    	super.onPause();
    	WriteModeOff();
    }
    public void onResume(){
    	super.onResume();
    	WriteModeOn();
    }

    @SuppressLint("NewApi") private void WriteModeOn(){
    	writeMode = true;
    	adapter.enableForegroundDispatch(this, pendingIntent, writeTagFilters, null);
    }

    @SuppressLint("NewApi") private void WriteModeOff(){
		writeMode = false;
		adapter.disableForegroundDispatch(this);
    }
}</pre>
<p>Como Adapter usamos el <strong>NfcAdapter</strong> que viene por defecto en nuestro dispositivo con NFC.</p>
<p>El PendingIntent que usamos, le pasamos como Flag el Intent.FLAG_ACTIVITY_SINGLE_TOP para que la Activity no se cree de nuevo y se reutilice si ya está presente en la pila de actividades.<br />
Luego definimos el IntentFilter. Este IntentFilter será el que nos indique si un Tag es encontrado. Y a nuestro array de IntentFilters le añadimos éste que hemos creado.<br />
Al método write le pasamos por parámetros el mensaje a escribir y el Tag. En createRecord creamos el NdefRecord. Con el objeto Ndef obtenemos el tag, escribimos el mensaje NdefRecord y cerramos.</p>
<h3><strong>Comprendiendo los mensajes NFC</strong></h3>
<p>Un mensaje NDEF está representado por la clase NdefMessage, que está compuesto por varios registros encapsulados de tipo NdefRecord. El primer registro de un mensaje NDEF determina cómo interpretar el conjunto del mensaje. Un registro NdefRecord tiene los siguientes campos:</p>
<ul>
<li><em><strong>3-bit TNF(Type Name Format)</strong> </em>Campo que indicará cómo se interpretará el mensaje.</li>
<li><strong><em>length type:</em></strong><em> F</em>ormato del registro.</li>
<li><em><strong>length ID:</strong> </em>Identificador único del registro.</li>
<li><em><strong>length payload:</strong> </em>Datos.</li>
</ul>
<p>Tipos de formato. Los TNFs vienen definidos por los siguientes tipos: <strong>TNF_EMPTY</strong> (Mensaje vacío), <strong>TNF_WELL_KNOWN</strong>(Mensaje bien definido.), <strong>TNF_MIME_MEDIA</strong>(Registro definido con un MIME-type), <strong>TNF_ABSOLUTE_URI</strong>(URI), <strong>TNF_EXTERNAL_TYPE</strong>(Tipo especial),<strong> TNF_UNKNOWN</strong>(Desconocido), <strong>TNF_UNCHANGED</strong>(Trozo del mensaje).<br />
Cuando el TNF es del tipo TNF_WELL_KNOWN significa que el mensaje NDEF  tiene alguno de los siguientes RTDs:<strong> RTD_TEXT</strong>(Texto plano con ISO del idioma correspondiente),<strong> RTD_URI</strong>(Contiene una URI), <strong>RTD_SMART_POSTER</strong>(Contiene varios registros como URI, acciones,&#8230;)</p>
<p>Es un simple ejemplo de cómo hacer un editor de texto para un tag. Como véis no es nada complicado y bastante efectivo en un simple código de no más de 100 lineas tenemos una aplicación completa para poder interactuar con nuestro NFC Tag y probar así la API relacionada con NFC.</p>
<p>En próximos posts contaré más sobre NFC y algún ejemplo de nivel más avanzado.</p>
<p>Espero que os haya gustado <img src='http://androcode.es/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<h1>Sorteo de pines con Tag NFC</h1>
<p>Aprovechando los pines con NFC que nos dieron en la MWC de Barcelona, vamos a sortear algunos de estos entre nuestros lectores. Participar es muy fácil, sólo queremos oir vuestras ideas para usos de los Tags. Aquí tenéis las bases del concurso y a continuación el formulario para participar.</p>
<p style="text-align: center;"><img class="aligncenter size-medium wp-image-3938" alt="pin2" src="http://androcode.es/wp-content/uploads/2013/04/pin2-300x300.png" width="300" height="300" /></p>
<h4 style="text-align: left;"></h4>
<div class="important_block message-block"><p class="printonly"><strong>Important!</strong></p></p>
<h3 style="text-align: left;">Resultado</h3>
<p class="first-p">Primer premio: <strong>Jorge</strong>; por su idea: &#8220;<em>Desarrollaría una app para fichar en mi trabajo, y luego la ampliaría para que sirviera de control de acceso a varias zonas</em>&#8220;.</p>
<p>Ganadores del sorteo: <strong>José Antonio Blaya</strong>, <strong>Iván Carlo</strong>, <strong>Christian</strong>, <strong>Miguel Ramírez Díaz</strong></p>
<p>Enhorabuena a los ganadores.</p>
<p></div>
<h3 style="text-align: left;">Bases del concurso</h3>
<ul>
<li>Para participar debes publicar un mensaje en Google+, Twitter o Facebook contando brevemente para qué usarías los pines NFC, con un enlace directo a esta publicación y el hashtag <strong>#AndrocodeNFC</strong>.</li>
<li>Debes seguir la cuenta de Androcode de la red social que uses para participar. Aquí están nuestra cuenta de <a href="https://plus.google.com/100609283770618930180">Google+</a>, <a href="https://twitter.com/androcode">Twitter</a> y <a href="https://www.facebook.com/pages/AndroCode/255494591159798">Facebook</a>.</li>
<li>Introduce en el formulario los enlaces a cada publicación que escribas para participar. Tiene que ser un enlace directo a ésta, no a tu perfil.</li>
<li>La publicación debe ser visible desde cualquier cuenta. De lo contrario no contará como válida.</li>
<li>De entre todos los participantes el equipo del blog elegirá la idea más original, que recibirá 3 pines NFC. Entre los demás se elegirán aleatoriamente 4 ganadores y cada uno recibirá 2 pines.</li>
<li>Sólo se puede participar 1 vez por persona. Si detectamos cualquier indicio de trampa el participante quedará fuera del sorteo. Sin embargo, por cada medio que se utilice para participar se tendrá una oportunidad de ganar. Por tanto si usas las tres redes sociales tendrás más posibilidad que usando sólo una.</li>
<li>Se podrá participar hasta el domingo día <strong>21 de abril</strong>, a las 12 de la noche. Descartaremos las participaciones inválidas y el miércoles siguiente publicaremos aquí los nombres de los ganadores y contactaremos con ellos por correo electrónico para concretar el envío.</li>
<li>Si pasadas las 48 horas del envío del correo electrónico no obtenemos respuesta, el premio queda anulado y se lo pasaremos a otro participante escogido al azar.</li>
<li>Por motivos de envío, el sorteo sólo es válido para España.</li>
</ul>
<h3><span style="color: #2c2b2b; font-size: 12px; font-weight: normal; line-height: 18px;">¡Mucha suerte a todos!</span></h3>
]]></content:encoded>
			<wfw:commentRss>http://androcode.es/2013/04/nfc-i-explicacion-tutorial-basico-y-sorteo/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Iconos vectoriales mediante texto con Android Dev Icons</title>
		<link>http://androcode.es/2013/04/iconos-vectoriales-mediante-texto-con-android-dev-icons/</link>
		<comments>http://androcode.es/2013/04/iconos-vectoriales-mediante-texto-con-android-dev-icons/#comments</comments>
		<pubDate>Sun, 07 Apr 2013 10:03:28 +0000</pubDate>
		<dc:creator>Sloy</dc:creator>
				<category><![CDATA[Artículos]]></category>
		<category><![CDATA[Recursos]]></category>
		<category><![CDATA[Diseño]]></category>
		<category><![CDATA[Fuentes]]></category>
		<category><![CDATA[Holo]]></category>
		<category><![CDATA[Iconos]]></category>
		<category><![CDATA[Interfaz]]></category>
		<category><![CDATA[Tips]]></category>

		<guid isPermaLink="false">http://androcode.es/?p=3846</guid>
		<description><![CDATA[Conseguir hacer un buen diseño para una aplicación a veces es complicado. Pequeños detalles como un color, un bordeado o la forma de un icono pueden cambiar drásticamente la impresión del usuario. Si bien es cierto que desde la incursión del estilo Holo en Android cada vez vemos más aplicaciones bien diseñadas, algunas se resisten &#8230; </p><p><a class="more-link block-button" href="http://androcode.es/2013/04/iconos-vectoriales-mediante-texto-con-android-dev-icons/">Continuar leyendo</a>]]></description>
				<content:encoded><![CDATA[<p>Conseguir hacer un buen diseño para una aplicación a veces es complicado. Pequeños detalles como un color, un bordeado o la forma de un icono pueden cambiar drásticamente la impresión del usuario. Si bien es cierto que desde la incursión del estilo Holo en Android cada vez vemos <a href="http://androidniceties.tumblr.com/">más aplicaciones</a> bien diseñadas, algunas se resisten al cambio. Por suerte tenemos las <a href="http://developer.android.com/design">guías de diseño oficiales</a>, y un número creciente de <a href="http://androcode.es/2013/03/9-herramientas-fuera-de-eclipse-para-trabajar-con-android/">herramientas y recursos</a> para ayudarnos en el desarrollo.</p>
<p><img class="aligncenter size-full wp-image-3849" alt="androcode_icons" src="http://androcode.es/wp-content/uploads/2013/04/androcode_icons.png" width="662" height="290" /></p>
<p>Para los iconos tenemos los incluídos en el sistema, que a veces no son la mejor opción ya que no son los mismos en todas las versiones de Android. También podemos generarlos sobre la marcha con Asset Studio (vía <a href="http://android-ui-utils.googlecode.com/hg/asset-studio/dist/index.html">web</a> o <a href="http://androcode.es/2012/06/adt20-lo-ultimo-en-herramientas-para-desarrolladores/">Eclipse</a>) e incluirlos en nuestra aplicación. Pero a alguien se le ha ocurrido una forma aún más sencilla de usarlos: mediante tipografías.<span id="more-3846"></span></p>
<p>Las fuentes o tipografías son poco más que paquetes de imágenes vectoriales en los que a cada una se le asigna un código de carácter. ¿Por qué no poner iconos en vez de letras, para poder insertarlos en cualquier campo de texto que permita elegir la fuente? Es lo que hacen los<a href="http://www.spiderflyapps.com/downloads/android-developer-icons-the-font/"> <strong>Android Dev Icons</strong></a> que han publicado <em>Spiderfly Apps</em>. </p>
<p>Se trata de dos paquetes de fuentes en que los que cada letra usa un icono de diseño estándar para Android, que podemos descargar libremente desde su web. Podemos simplemente instalarlos en nuestro ordenador para usar en nuestra herramienta de diseño favorita, o insertarla en nuestra aplicación para sustituir las imágenes.<div class="important_block message-block"><p class="printonly"><strong>Important!</strong></p>Aunque el TextView de Android no soporta cambios de tipografía, en <a href="http://androcode.es/2012/01/creando-nuestra-propia-view-para-usar-fuentes-truetype/">este tutorial</a> os contamos cómo hacerlo en un periquete.</div></p>
<p><a href="http://androcode.es/wp-content/uploads/2013/04/AndroidDevIconFont1.png"><img class="alignright size-thumbnail wp-image-3861" alt="AndroidDevIconFont1" src="http://androcode.es/wp-content/uploads/2013/04/AndroidDevIconFont1-150x150.png" width="150" height="150" /></a></p>
<p>Con esta curiosa idea nos ahorramos lidiar con diferentes tamaños, varios colores, multitud de archivos&#8230; Sólo hay que cambiar las propiedades del texto y listo. Por supuesto hay cosas para las que se nos quedará corta, y habrá muchos otros iconos que simplemente no están en el pack y tendremos que añadir por nuestra cuenta. Pero sin duda se agradece toda la ayuda recibida, especialmente los que no contamos con un diseñador gráfico en nuestros proyectos.</p>
<div class="notice_block message-block"><p class="printonly"><strong>Notice</strong></p>Cuidado usando esto en una aplicación final. Tiene más coste de CPU pintar un vector que una imagen, por lo que en términos de eficiencia deberías considerar tomarte la molestia de convertir el icono a imagen antes de pasar a producción.</div>
<p>Esperamos que con esto lo tengáis más fácil para crear magníficas aplicaciones.</p>
<p>Enlace: <a href="http://www.spiderflyapps.com/downloads/android-developer-icons-the-font/">Descarga de las fuentes</a></p>
]]></content:encoded>
			<wfw:commentRss>http://androcode.es/2013/04/iconos-vectoriales-mediante-texto-con-android-dev-icons/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>10 herramientas fuera de Eclipse para trabajar con Android (1/2)</title>
		<link>http://androcode.es/2013/03/9-herramientas-fuera-de-eclipse-para-trabajar-con-android/</link>
		<comments>http://androcode.es/2013/03/9-herramientas-fuera-de-eclipse-para-trabajar-con-android/#comments</comments>
		<pubDate>Mon, 18 Mar 2013 10:00:16 +0000</pubDate>
		<dc:creator>Fernando F. Gallego</dc:creator>
				<category><![CDATA[Recursos]]></category>
		<category><![CDATA[ActionBar]]></category>
		<category><![CDATA[Herramientas]]></category>
		<category><![CDATA[Holo]]></category>
		<category><![CDATA[Librerias]]></category>

		<guid isPermaLink="false">http://androcode.es/?p=3726</guid>
		<description><![CDATA[Gracias a la comunidad de Android existen multitud de herramientas para facilitarnos el diseño y desarrollo de aplicaciones en Android, y dado que el entorno de Eclipse es limitado y las herramientas que nos ofrece a veces no son muy prácticas, hay gente que se ha dedicado a desarrollar otras utilidades fuera de Eclipse que &#8230; </p><p><a class="more-link block-button" href="http://androcode.es/2013/03/9-herramientas-fuera-de-eclipse-para-trabajar-con-android/">Continuar leyendo</a>]]></description>
				<content:encoded><![CDATA[<p>Gracias a la comunidad de Android existen multitud de herramientas para facilitarnos el diseño y desarrollo de aplicaciones en Android, y dado que el entorno de Eclipse es limitado y las herramientas que nos ofrece a veces no son muy prácticas, hay gente que se ha dedicado a desarrollar otras utilidades fuera de Eclipse que hay que reconocer que vienen muy bien, y en este artículo vamos a ver unas cuantas de ellas.</p>
<p><span id="more-3726"></span></p>
<h2>Android design preview</h2>
<p><a href="http://androcode.es/wp-content/uploads/2013/03/Preview_large_verge_medium_landscape.png"><img class="alignnone size-full wp-image-3777" alt="Preview_large_verge_medium_landscape" src="http://androcode.es/wp-content/uploads/2013/03/Preview_large_verge_medium_landscape.png" width="640" height="352" /></a></p>
<p>Es una herramienta para poder ver una parte del escritorio del ordenador directamente en nuestro dispositivo Android, como un escritorio remoto, sólo que en este caso seleccionamos una región de la pantalla, que puede ser un diseño que hayamos hecho en Photoshop con el tamaño de la pantalla del teléfono o tablet y así ver cómo quedaría, pudiendo cambiar partes del diseño y verlas reflejadas en el dispositivo sin tener que implementar el diseño o ni siquiera guardar la imagen, pasarla al teléfono y abrirla con el visor de imágenes. De esta manera agilizamos el proceso de prototipado de la interfaz hasta que esté a nuestro gusto y entonces pasemos a implementarla en xml.</p>
<p><a title="Android UI Utils" href="http://code.google.com/p/android-ui-utils/" target="_blank">http://code.google.com/p/android-ui-utils/</a></p>
<h2>Android holo colors generator</h2>
<p><a href="http://androcode.es/wp-content/uploads/2013/03/Captura-de-pantalla-2013-03-17-a-las-21.08.23.png"><img class="alignnone size-full wp-image-3780" alt="Captura de pantalla 2013-03-17 a la(s) 21.08.23" src="http://androcode.es/wp-content/uploads/2013/03/Captura-de-pantalla-2013-03-17-a-las-21.08.23.png" width="834" height="528" /></a></p>
<p>Es otra herramienta online que nos facilita la tarea de crear temas y estilos con colores personalizados para interfaces tipo Holo, sólo tenemos que indicar el nombre, el color y qué componentes queremos personalizar, nos generará un zip con los archivos necesarios en varias densidades y con los diferentes estados, que sólo hay que poner en la carpeta de recursos de nuestro proyecto para poder usar el tema que acabamos de crear o seguir personalizando a partir de ahí.</p>
<p><a title="Android Holo colors" href="http://android-holo-colors.com/" target="_blank">http://android-holo-colors.com/</a></p>
<h2>Android asset studio </h2>
<p><a href="http://androcode.es/wp-content/uploads/2013/03/Captura-de-pantalla-2013-03-17-a-las-21.11.50.png"><img class="alignnone size-full wp-image-3783" alt="Captura de pantalla 2013-03-17 a la(s) 21.11.50" src="http://androcode.es/wp-content/uploads/2013/03/Captura-de-pantalla-2013-03-17-a-las-21.11.50.png" width="521" height="269" /></a></p>
<p>Ofrece una colección de generadores de iconos para diversas partes de nuestra app, por ejemplo, podemos generar iconos para el launcher, action bar, pestañas, notificaciones o items de menú para versiones anteriores a Honeycomb. En cualquier caso, empezamos eligiendo una imagen, o bien de nuestro disco duro o bien una imagen prediseñada de su colección de iconos sacados de Android o incluso podemos definir un texto como si fuera una imagen. Después podemos elegir el padding de la imagen. Dependiendo del tipo de icono que estemos generando nos permitirá elegir si queremos usar el tema Holo Dark o el Holo Light, o qué colores queremos para el icono y el fondo, etc. Al final podremos bajar el icono generado para distintas resoluciones o versiones de Android en caso de que sean diferentes (como los iconos de notificación).</p>
<p><a href="http://android-ui-utils.googlecode.com/hg/asset-studio/dist/index.html" target="_blank">http://android-ui-utils.googlecode.com/hg/asset-studio/dist/index.html</a></p>
<h2>Device art generators</h2>
<p><a href="http://androcode.es/wp-content/uploads/2013/03/descarga-1.png"><img class="alignnone size-large wp-image-3785" alt="Device Art Generator FEVE" src="http://androcode.es/wp-content/uploads/2013/03/descarga-1-1024x586.png" width="620" height="354" /></a></p>
<p>En este caso hay un par de generadores que son muy útiles para dar un toque más profesional a nuestras capturas de pantalla, añadiendo un marco de teléfono alrededor de ellas de modo que parece que es una foto de un smartphone corriendo nuestra aplicación. El más completo lo encontraremos en la web anterior, ya que no solo permite elegir teléfonos nexus sino que además podemos elegir otros dispositivos Samsung, HTC o Motorola, mientras que en cambio, Google ofrece también una herramienta para generar estos marcos para los screenshots pero en este caso sólo permite elegir dispositivos Nexus </p>
<p>Completo: <a title="Device Art Generator" href="http://android-ui-utils.googlecode.com/hg/asset-studio/dist/device-frames.html" target="_blank">http://android-ui-utils.googlecode.com/hg/asset-studio/dist/device-frames.html</a><br />Oficial (menos completo): <a title="Device Art Generator Oficial" href="http://developer.android.com/distribute/promote/device-art.html" target="_blank">http://developer.android.com/distribute/promote/device-art.html</a></p>
<h2>Action Bar style generator </h2>
<p><a href="http://androcode.es/wp-content/uploads/2013/03/descarga.png"><img class="size-medium wp-image-3774 alignleft" alt="descarga" src="http://androcode.es/wp-content/uploads/2013/03/descarga-197x300.png" width="197" height="300" /></a></p>
<p>Éste generador merece ir aparte porque es un completísimo generador de estilos para la action bar. Incluso es compatible con estilos para <a title="Introducción a ActionBarSherlock" href="http://androcode.es/2012/03/introduccion-a-actionbarsherlock/" target="_blank">ActionBarSherlock</a> lo que lo hace aún más flexible. Empezamos eligiendo el tema base, sea Holo Dark, Holo Light, o Holo Dark con la ActionBar en color claro, como en ICS, luego si la queremos sólida o transparente, y a partir de ahi tiene un selector de colores para cada una de las partes personalizables, a saber: la propia action bar, las pestañas que aparecen debajo si usamos los &#8220;tabs&#8221; como método de navegación, el color de los menús emergentes, el color destacado o accent (es el que aparece en la pestaña seleccionada), luego, si vamos a usar la action bar contextual (la que aparece con las herramientas de copiar, cortar, etc. cuando seleccionas un elemento) también podemos definir el color de fondo y el color destacado. Una vez hemos personalizado la action bar y nos gusta como queda en la previsualización, podemos descargar en un zip los archivos que tenemos que poner en nuestro proyecto. Esta es una herramienta que nos ahorra mucho trabajo a la hora de personalizar el tema por defecto de Android 3.0 en adelante.</p>
<p><a href="http://jgilfelt.github.com/android-actionbarstylegenerator/" target="_blank">http://jgilfelt.github.com/android-actionbarstylegenerator/</a></p>
<h2>Parcelabler<strong> </strong></h2>
<p>Es una herramienta online para generar fácilmente clases java que implementen la interfaz Parcelable. En otro post explicamos <a title="Trabajando con Parcelables" href="http://androcode.es/2012/12/trabajando-con-parcelables/" target="_blank">cómo implementar la interfaz parcelable</a> manualmente, pero ésta herramienta nos permite pegar el código de nuestra clase y nos genera el código necesario para implementar la interfaz, que no es difícil pero si un poco coñazo, de todos modos, parece un poco limitado y no soporta arrays o tipos complejos así que tendremos que añadir éstos a mano, pero aún así nos simplifica escribir bastante código. </p>
<p><a title="Parcelabler" href="http://devk.it/proj/parcelabler/" target="_blank">http://devk.it/proj/parcelabler/</a></p>
<p>Y esta ha sido la primera mitad de un gran post sobre herramientas fuera de Eclipse que ayudan bastante en el desarrollo de aplicaciones, tanto a nivel de código, de presentación o incluso de márketing. Espero que os haya gustado y nos vemos de nuevo la semana que viene con la segunda parte de este post.</p>
]]></content:encoded>
			<wfw:commentRss>http://androcode.es/2013/03/9-herramientas-fuera-de-eclipse-para-trabajar-con-android/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>WIPJam en el Mobile World Congress 2013</title>
		<link>http://androcode.es/2013/03/wipjam-mobile-world-congress-2013/</link>
		<comments>http://androcode.es/2013/03/wipjam-mobile-world-congress-2013/#comments</comments>
		<pubDate>Thu, 14 Mar 2013 13:07:55 +0000</pubDate>
		<dc:creator>Fernando F. Gallego</dc:creator>
				<category><![CDATA[Artículos]]></category>
		<category><![CDATA[Android]]></category>
		<category><![CDATA[APIs]]></category>
		<category><![CDATA[hackathon]]></category>
		<category><![CDATA[Librerias]]></category>
		<category><![CDATA[MWC]]></category>

		<guid isPermaLink="false">http://androcode.es/?p=3751</guid>
		<description><![CDATA[Cuando uno asiste a una feria de tecnología como es el Mobile World Congress, no espera que sea muy interesante para desarrolladores, más allá de los nuevos terminales y prototipos de dispositivos que se presentan. Afortunadamente, existe un evento paralelo de un día de duración llamado WIP Jam y organizado por Wireless Industry Partnership, que &#8230; </p><p><a class="more-link block-button" href="http://androcode.es/2013/03/wipjam-mobile-world-congress-2013/">Continuar leyendo</a>]]></description>
				<content:encoded><![CDATA[<p>Cuando uno asiste a una feria de tecnología como es el <a title="MWC" href="http://www.mobileworldcongress.com/" target="_blank">Mobile World Congress</a>, no espera que sea muy interesante para desarrolladores, más allá de los nuevos terminales y prototipos de dispositivos que se presentan. Afortunadamente, existe un evento paralelo de un día de duración llamado <a title="WipJam @ MWC2013" href="http://www.wipconnector.com/wipjam/entry/mwc2013" target="_blank">WIP Jam</a> y organizado por <a title="WIP" href="http://www.wipconnector.com/" target="_blank">Wireless Industry Partnership</a>, que viene siendo habitual cada año y en el cual los developers tenemos nuestro día de charlas, concursos y hackathones. Competiciones donde conocer a otros compañeros y formar equipo para conseguir algunos de esos nuevos dispositivos tan codiciados.</p>
<p><a href="http://androcode.es/wp-content/uploads/2013/03/WIPJam-Barcelona-Come-Jam-with-us-smaller.jpg"><img class="alignnone size-full wp-image-3759" alt="WIPJam Barcelona Come Jam with us smaller" src="http://androcode.es/wp-content/uploads/2013/03/WIPJam-Barcelona-Come-Jam-with-us-smaller.jpg" width="600" height="236" /></a></p>
<p>Empresas como <a title="Sesiones" href="http://www.wipconnector.com/wipjam/entry/mwc_2013_sessions" target="_blank">Facebook, PayPal o Intel</a> estuvieron presentes para hablarnos de sus APIs y de cómo sacar provecho a sus tecnologías. Pese a ser un poco de autobombo, siempre puedes descubrir algo interesante, hacer esa pregunta que te tiene atascado o ganar algún <a title="Carbot" href="http://www.mydeskpets.com/shop/carbot/" target="_blank">juguetito</a>. Cómo si no tuviéramos ya pocas tonterías que hemos ido recolectando por todos los stands&#8230;</p>
<p><span id="more-3751"></span></p>
<p>De este año destacaría la <a title="Charla de Facebook" href="https://speakerdeck.com/sicross/facebook-sdk-3-dot-0-beta-for-android-droidcon-nl" target="_blank">charla de los ingenieros android de Facebook</a> que estuvieron explicando un poco cómo usar el <a title="Facebook SDK" href="https://developers.facebook.com/docs/getting-started/facebook-sdk-for-android/3.0/" target="_blank">Facebook SDK 3.0</a> y cómo conseguir más instalaciones de tu app mediante anuncios. Intel también nos explicó cómo usar sus <a title="Intel Cloud Services" href="http://software.intel.com/cloudservicesplatform/about/welcome-intel-cloud-services" target="_blank">servicios en la nube</a> y nos propuso utilizarlos para ganar un Ultrabook en su hackathon. En la sala principal pudimos oir a PayPal hablar de cómo integrar pagos en tus apps o mozilla hablando de HTML5 (que lo teníamos hasta en la sopa).</p>
<p>Ya que Google y su stand de android brillaron por su ausencia, al menos el <a title="GDG Barcelona Android Barcamp" href="https://plus.google.com/events/c4m5962vg7f99do374j229m42n8" target="_blank">GDG de Barcelona</a> organizó un barcamp de android donde se pudo discutir algunos aspectos del SO móvil de Google.</p>
<p>Si eres desarrollador y asistes al MWC, sin duda este evento es para ti, una pena que sea el último día de congreso cuando uno está ya agotado de tanto caminar por los stands y de tanta fiesta cada día después del evento pero merece la pena hacerle un hueco ya que es de lo más interesante para nosotros los programadores.</p>
<p>Y de regalo un vídeo </p>
<span class='embed-youtube' style='text-align:center; display: block;'><iframe class='youtube-player' type='text/html' width='560' height='315' src='http://www.youtube.com/embed/gzUYsM7of0M?version=3&#038;rel=1&#038;fs=1&#038;showsearch=0&#038;showinfo=1&#038;iv_load_policy=1&#038;wmode=transparent' frameborder='0'></iframe></span>
]]></content:encoded>
			<wfw:commentRss>http://androcode.es/2013/03/wipjam-mobile-world-congress-2013/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Cómo hacer más cómodo el trabajo con Eclipse</title>
		<link>http://androcode.es/2013/02/como-hacer-mas-comodo-el-trabajo-con-eclipse/</link>
		<comments>http://androcode.es/2013/02/como-hacer-mas-comodo-el-trabajo-con-eclipse/#comments</comments>
		<pubDate>Thu, 14 Feb 2013 10:37:16 +0000</pubDate>
		<dc:creator>Sloy</dc:creator>
				<category><![CDATA[Tutoriales]]></category>
		<category><![CDATA[ADT]]></category>
		<category><![CDATA[Android]]></category>
		<category><![CDATA[Eclipse]]></category>
		<category><![CDATA[Herramientas]]></category>
		<category><![CDATA[Programación]]></category>
		<category><![CDATA[SDK]]></category>
		<category><![CDATA[Tips]]></category>

		<guid isPermaLink="false">http://androcode.es/?p=3673</guid>
		<description><![CDATA[Lo parezca o no, trabajar cómodo con nuestro entorno de desarrollo es muy importante de cara a la productividad. Es por eso que nos cuesta tanto cambiarnos a otro IDE cuando estamos acostumbrados a uno concreto. Nos sentimos perdidos, todo lo que es diferente nos parece peor. Porque no hay nada como escribir código cómodamente. &#8230; </p><p><a class="more-link block-button" href="http://androcode.es/2013/02/como-hacer-mas-comodo-el-trabajo-con-eclipse/">Continuar leyendo</a>]]></description>
				<content:encoded><![CDATA[<p>Lo parezca o no, trabajar cómodo con nuestro entorno de desarrollo es muy importante de cara a la productividad. Es por eso que nos cuesta tanto cambiarnos a otro IDE cuando estamos acostumbrados a uno concreto. Nos sentimos perdidos, todo lo que es diferente nos parece peor. Porque no hay nada como escribir código cómodamente.</p>
<p><a href="http://androcode.es/wp-content/uploads/2013/02/eclipse_indigo.png"><img class="aligncenter size-full wp-image-3722" alt="eclipse_indigo" src="http://androcode.es/wp-content/uploads/2013/02/eclipse_indigo.png" width="455" height="294" /></a></p>
<p>El post de hoy no es tan exclusivo para el desarrollo Android, pero como también nos afecta a nosotros me ha parecido bien tratarlo. Vamos a ver algunos trucos y consejos para escribir código aún más fácilmente, si estamos usando Eclipse.<span id="more-3673"></span></p>
<p>Todo lo que se comenta en esta entrada son opiniones a título personal y como orientación Para gustos colores, si no te parecen buenos consejos o tienes otros mejores, cuéntanoslo en los comentarios <img src='http://androcode.es/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<div class="important_block message-block"><p class="printonly"><strong>Important!</strong></p>Utilizaré como base el ADT Bundle para Windows que tenemos disponible en la página de desarrolladores, que contiene el SDK y una versión modificada de Eclipse 3.6 con la configuración básica para empezar a desarrollar aplicaciones Android.</div>
<p>Como la lista es larga y variada os dejo un índice para localizar más rápidamente cada cosa:</p>
<p style="padding-left: 30px">Preparación del entorno</p>
<ul style="padding-left: 30px">
<li><a href="#codificacion">Cambiar la codificación de caracteres</a></li>
<li><a href="#build">Desactivar compilado automático y compilar todo</a></li>
<li><a href="#spelling">Desactivar corrección ortográfica</a></li>
<li><a href="#paquetes">Explorador de paquetes en vista jerárquica</a></li>
</ul>
<p style="padding-left: 30px"><a href="#ayuda">Ayuda para escribir código</a></p>
<ul style="padding-left: 30px">
<li><a href="#semicolon">Punto y coma siempre al final</a></li>
<li><a href="#overwrite">Autocompletado de métodos mejorado</a></li>
<li><a href="#strings">Escapar Strings al pegar texto</a></li>
<li><a href="#save">Acciones al guardar</a></li>
<li><a href="#format">Formateo de código</a></li>
<li><a href="#tags">Etiquetas</a></li>
<li><a href="#codetemplates">Plantillas de código</a></li>
<li><a href="#templatesadt">Plantillas de ADT</a></li>
</ul>
<div id="preparacion"> </div>
<h1 id="c1"><span style="text-decoration: underline">Preparación del entorno</span></h1>
<p>Lo primero que vamos a ver son algunos cambios en la configuración de Eclipse que podemos hacer para facilitarnos el trabajo. Aunque opciones hay muchas, éstas son las que me han parecido más útiles. Mi <em>&#8220;must have&#8221;</em> personal, lo primero que tengo que cambiar si hago una instalación nueva.</p>
<div id="codificacion"> </div>
<h1>Cambiar la codificación de caracteres</h1>
<p>Es un tema por el que me he echado las manos a la cabeza más de una vez. Y más de dos, y de trés&#8230; Trabajar con diferentes codificaciones es un infierno, sólo causará problemas. Eclipse por defecto en Windows utiliza una codificación, en Linux otra, y en OSX otra distinta. Si trabajas siempre en la misma máquina el problema puede pasar desapercibido, pero en cuanto migras un proyecto de sistema, se lo pasas a alguien, etc. verás como los caracteres especiales se han convertido en símbolos extraños.</p>
<p>Los angloparlantes no suelen tener graves problemas con esto, pues la mayoría de codificaciones <em>respetan</em> sus símbolos. Pero nosotros, con tanta tilde y símbolo raro, vamos a encontrarnos en apuros. Lo mejor es curarse en salud y cambiar desde un principio la codificación de todo el workspace, en el menú bajo Window &gt; Preferences,  a una universal como UTF-8. </p>
<p><a href="http://androcode.es/wp-content/uploads/2013/02/codificacion.png"><img class="aligncenter size-medium wp-image-3683" alt="codificacion" src="http://androcode.es/wp-content/uploads/2013/02/codificacion-300x258.png" width="300" height="258" /></a></p>
<p>Si lo hacéis no me lo agradeceréis porque no os daréis cuenta de que os ha servido. Pero si no, ya os arrepentiréis.  <img src='http://androcode.es/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<div id="build"> </div>
<h1 id="compilado">Desactivar <em>compilado automático</em> y <em>compilar todo</em></h1>
<p>Por defecto Eclipse tiene activada la opción de compilar automáticamente nuestro proyecto cuando guardamos algún archivo modificado. Esto es especialmente problemático en Android cuando tenemos proyectos relativamente complejos, con varias librerías externas vinculadas y demás compilar puede llevar varios segundos o peor en ordenadores con pocos recursos (¿he oído minutos?). Y no es agradable que nos interrumpan el trabajo sólo por guardar los cambios. Por ello es de lo primero que desactivo cuando abro Eclipse por primera vez. Sólo hay que desmarcar la opción en Project &gt; Build Automatically.</p>
<p><a href="http://androcode.es/wp-content/uploads/2013/02/build.png"><img class="aligncenter size-medium wp-image-3685" alt="build" src="http://androcode.es/wp-content/uploads/2013/02/build-300x153.png" width="300" height="153" /></a></p>
<p>Aunque desactivando dicha opción tenemos el <del>problema</del> inconveniente de tener que compilar manualmente cuando lo necesitemos. Por suerte tenemos el atajo de teclado <strong>Ctrl+B</strong> para hacerlo a golpe de tecla, pero este atajo corresponde al comando <em>Build All</em>, es decir que nos compilará todos los proyectos de nuestro workspace. ¡Aún peor que lo anterior! Don&#8217;t panic, es tan fácil como cambiar el atajo para que ejecute el comando <em>Build Project</em> en su lugar, de esa forma la combinación te teclas sólo compilará el proyecto en el que nos encontremos en ese momento. En el apartado Keys de las preferencias buscamos el comando <em>Build All</em> y le anulamos el atajo de teclado con <strong>Unbind Command</strong>, luego seleccionamos <em>Build Project</em> y en Binding pulsamos la combinación Ctrl+B (u otra) para establecérsela.</p>
<p><a href="http://androcode.es/wp-content/uploads/2013/02/build3.png"><img class="aligncenter size-medium wp-image-3686" alt="build3" src="http://androcode.es/wp-content/uploads/2013/02/build3-300x215.png" width="300" height="215" /></a></p>
<p>Aunque para ejecutar no suele hacer falta compilar porque ya lo hace solo, ya sabemos cómo se pone de tonto a veces Eclipse. Es uno de los comandos que yo más utilizo.</p>
<div id="spelling"> </div>
<h1>Desactivar corrección ortográfica</h1>
<p>Curiosamente Eclipse tiene corrector ortográfico para los comentarios y documentación. Pero a los hispanohablantes no nos sirve de mucho si escribimos en español porque sólo está en inglés. Podríamos descargar e instalar un diccionario en español, pero yo prefiero optar por desactivarlo por completo y quitarme las molestas líneas rojas que salen por todas partes.</p>
<p><a href="http://androcode.es/wp-content/uploads/2013/02/spelling.png"><img class="aligncenter size-medium wp-image-3688" alt="spelling" src="http://androcode.es/wp-content/uploads/2013/02/spelling-300x235.png" width="300" height="235" /></a></p>
<div id="paquetes"> </div>
<h1>Explorador de paquetes en vista jerárquica</h1>
<p>El explorador de paquetes nos permite 2 formas básicas de visualizarlos: <strong>plana</strong> y<strong> jerárquica</strong>. Por defecto nos los muestra de forma plana, pero cuando tenemos muchos paquetes anidados la jerárquica permite verlos más claramente con su estructura de árbol. ¿No os parece?</p>
<p><a href="http://androcode.es/wp-content/uploads/2013/02/package.png"><img class="aligncenter size-full wp-image-3689" alt="package" src="http://androcode.es/wp-content/uploads/2013/02/package.png" width="585" height="417" /></a></p>
<p>Podéis usar la que más os guste, en cualquier caso el cambio es sencillo.</p>
<p><a href="http://androcode.es/wp-content/uploads/2013/02/package3.png"><img class="aligncenter size-medium wp-image-3690" alt="package3" src="http://androcode.es/wp-content/uploads/2013/02/package3-300x182.png" width="300" height="182" /></a></p>
<div id="ayuda"> </div>
<h1><span style="text-decoration: underline">Ayuda para escribir código</span></h1>
<p>Ahora veremos alguno ajustes orientados a facilitarnos la escritura de código. Eclipse permite un alto nivel de personalización, pero sólo veremos unos que me parecen muy interesantes. Como antes, recomiendo echar un ojo a todas las opciones y adaptarlo todo a nuestras necesidades.</p>
<div id="semicolon"> </div>
<h1>Punto y coma siempre al final</h1>
<p>En java las sentencias llevan un punto y coma al final. Parece una tontería, pero son incontables las veces que he tenido que desplazarme al final de la línea para poner un punto y coma. Con este cambio Eclipse colocará la puntuación correctamente al final de la línea aunque estemos editando en mitad, ahorrándonos un par de pulsaciones de tecla.</p>
<p><a href="http://androcode.es/wp-content/uploads/2013/02/semicolon.png"><img class="aligncenter size-medium wp-image-3691" alt="semicolon" src="http://androcode.es/wp-content/uploads/2013/02/semicolon-300x275.png" width="300" height="275" /></a></p>
<div id="overwrite"> </div>
<h1>Autocompletado de métodos mejorado</h1>
<p>El autocompletado de Eclipse es magnífico. <strong>Ctrl+Espacio</strong> es la combinación que más uso con diferencia, nos ahorra escribir una barbaridad de código. Pero algo que siempre me ha reventado es cómo al completar una variable o un método desde en medio inserta el texto en vez de modificarlo.</p>
<p><a href="http://androcode.es/wp-content/uploads/2013/02/overwrite12.png"><img class="aligncenter size-full wp-image-3692" alt="overwrite12" src="http://androcode.es/wp-content/uploads/2013/02/overwrite12.png" width="401" height="200" /></a></p>
<p>Pues hace poco descubrí que se podía cambiar para que sustituyera el resto del texto. De esa forma en el ejemplo anterior obtendríamos lo siguiente:</p>
<p><a href="http://androcode.es/wp-content/uploads/2013/02/overwrite34.png"><img class="aligncenter size-full wp-image-3693" alt="overwrite34" src="http://androcode.es/wp-content/uploads/2013/02/overwrite34.png" width="401" height="200" /></a></p>
<p>A mi me resulta muchísimo más útil la segunda transformación, y sólo hay que cambiar una opción:</p>
<p><a href="http://androcode.es/wp-content/uploads/2013/02/overwrite.png"><img class="aligncenter size-medium wp-image-3694" alt="overwrite" src="http://androcode.es/wp-content/uploads/2013/02/overwrite-300x275.png" width="300" height="275" /></a></p>
<div id="strings"> </div>
<h1>Escapar Strings al pegar texto</h1>
<p>Copiar y pegar es el recurso más utilizado. ¿Cuántas veces hemos pegado en una cadena un texto copiado de otra parte que contiene comillas y otros caracteres que necesitan ser escapados (como las comillas en un código html)? Activando esta opción no tendremos que hacerlo más, pues el texto se transformará automáticamente cuando lo peguemos para escapar dichos caracteres.</p>
<p><a href="http://androcode.es/wp-content/uploads/2013/02/strings.png"><img class="aligncenter size-medium wp-image-3696" alt="strings" src="http://androcode.es/wp-content/uploads/2013/02/strings-300x276.png" width="300" height="276" /></a></p>
<p>Aquí vemos cómo quedaría al pegar una cadena con comillas antes y después de activar esta opción:</p>
<p><a href="http://androcode.es/wp-content/uploads/2013/02/strings2.png"><img class="aligncenter size-full wp-image-3697" alt="strings2" src="http://androcode.es/wp-content/uploads/2013/02/strings2.png" width="499" height="78" /></a></p>
<div id="save"> </div>
<h1>Acciones al guardar</h1>
<p>Nos puede venir bien que Eclipse haga determinadas cosas automáticamente cuando guardamos un archivo. Por ejemplo, que reorganice las importaciones de paquetes, o que formatee el código según las reglas que le digamos. Debo confesar que yo personalmente lo tengo desactivado, porque tengo la manía de guardar los cambios constantemente, y al procesar el archivo cada vez puedo notar el retraso en contadas ocasiones si el ordenador está pasando un mal rato y no lo soporto. Pero aun así, si no sois tan maníacos como yo seguro que agradecéis esta función.</p>
<p><a href="http://androcode.es/wp-content/uploads/2013/02/save.png"><img class="aligncenter size-medium wp-image-3698" alt="save" src="http://androcode.es/wp-content/uploads/2013/02/save-300x276.png" width="300" height="276" /></a></p>
<div id="format"> </div>
<h1>Formateo de código</h1>
<p>Otra de las funciones más útiles de Eclipse es el formateo de código automático, mediante la combinación de teclas <strong>Ctrl+Shift+F</strong>. Nosotros escribimos (o pegamos) un churro, con las identaciones mal puestas, espacios sobrantes, etc., y Eclipse nos deja un código limpio, claro y ordenado. Pero es importante para estar cómodos con nuestro IDE que nos produzca código que nos guste. Para ello viene bien echar unos minutos en revisar las opciones de personalización del formateo de código, que no son pocas. Podemos tener varios perfiles, e incluso configurar un perfil distinto para cada proyecto (modificando las preferencias del proyecto concreto, y no las globales). Para personalizarlos creamos uno nuevo o editamos el existente (habrá que guardarlo con otro nombre).</p>
<p><a href="http://androcode.es/wp-content/uploads/2013/02/format1.png"><img class="aligncenter size-medium wp-image-3699" alt="format1" src="http://androcode.es/wp-content/uploads/2013/02/format1-300x274.png" width="300" height="274" /></a></p>
<p>Aquí entran muy en juego los gustos de cada uno. Aconsejo mirar todas las opciones, elegir las que nos parezcan mejores, y volver a mirarlas tras llevar un tiempo con ellas para asegurarnos de que estamos cómodos con todas.</p>
<p><a href="http://androcode.es/wp-content/uploads/2013/02/format2.png"><img class="aligncenter size-medium wp-image-3700" alt="format2" src="http://androcode.es/wp-content/uploads/2013/02/format2-300x257.png" width="300" height="257" /></a></p>
<p>Os comento como ejemplo las que yo suelo cambiar, que son realmente pocas: En <em>Identation</em> pongo Tab Policy a <em>Tabs Only</em>, y activo <em>Statements within switch body</em>; en <em>Line Wrapping</em> pongo el <em>Maximun line width</em> a un valor alto como 200 para que no me divida las líneas, y activo <em>Never join already wrapped lines</em> por si quiero dividirlas  manualmente; y por último en <em>Comments</em> activo <em>Never join lines</em> para decidir yo los saltos de línea, y pongo el <em>Maximun line width</em> también a un valor como 200. </p>
<p>Mucho ojo a esta función si trabajamos en grupo con repositorios, o si contribuímos a proyectos de software libre. Debemos adaptarnos a las normas comunes, así que si pensamos dejar que Eclipse formatee nuestro código debemos asegurarnos de respetar dichas normas. No queremos que Git nos marque todo el archivo &#8220;en rojo&#8221; cuando sólo hemos cambiado una línea, ¿verdad?</p>
<div id="tags"> </div>
<h1>Etiquetas</h1>
<p>No muy usadas, pero están ahí para ayudar a organizarnos si las necesitamos. Las etiquetas son comentarios especiales que podemos poner para marcar nuestro código. La más famosa es la etiqueta <strong>TODO</strong>, para dejar anotado algo que tenemos que hacer o cambiar en un futuro. Pero nosotros mismos podemos crear nuestras etiquetas personalizadas. Por ejemplo DEBUG para indicar algo que debemos quitar antes de sacar la aplicación a producción,  asignar tareas a determinadas personas en un grupo, etc. </p>
<p><a href="http://androcode.es/wp-content/uploads/2013/02/tags.png"><img class="aligncenter size-medium wp-image-3701" alt="tags" src="http://androcode.es/wp-content/uploads/2013/02/tags-300x278.png" width="300" height="278" /></a></p>
<p>Luego podemos ver la lista de etiquetas usadas en la vista Tasks (Si no la tenemos se activa en Window &gt; Show View &gt; Tasks)</p>
<p><a href="http://androcode.es/wp-content/uploads/2013/02/tags2.png"><img class="aligncenter size-full wp-image-3702" alt="tags2" src="http://androcode.es/wp-content/uploads/2013/02/tags2.png" width="684" height="284" /></a></p>
<div id="codetemplates"> </div>
<h1>Plantillas de código</h1>
<p>Eclipse nos permite usar palabras clave para generar automáticamente determinadas estructuras de código, y más aún, crearlas a nuestro gusto. Por ejemplo, uno de los métodos más utilizados en Java es System.out.println() para imprimir texto en la consola; pues nos basta con escribir en el editor &#8220;sysout&#8221; y pulsar el autocompletado (ctrl+espacio) para que nos inserte la línea completa y nos ponga el cursor en la posición del argumento. Lo mismo ocurre con &#8220;try&#8221; para insertar un bloque try-catch.</p>
<p><a href="http://androcode.es/wp-content/uploads/2013/02/codtemplate12.png"><img class="aligncenter size-full wp-image-3704" alt="codtemplate12" src="http://androcode.es/wp-content/uploads/2013/02/codtemplate12.png" width="529" height="324" /></a></p>
<p>La lista completa podemos verla en las preferencias, y ahí mismo podemos añadir nuestras propias plantillas. Por ejemplo, podríamos crear una plantilla así para inicializar el método getView() típico del BaseAdapter: </p>
<p><a href="http://androcode.es/wp-content/uploads/2013/02/codetemplates3.png"><img class="aligncenter size-medium wp-image-3705" alt="codetemplates3" src="http://androcode.es/wp-content/uploads/2013/02/codetemplates3-300x261.png" width="300" height="261" /></a></p>
<p><a href="http://androcode.es/wp-content/uploads/2013/02/codetemplates4.png"><img class="aligncenter size-large wp-image-3706" alt="codetemplates4" src="http://androcode.es/wp-content/uploads/2013/02/codetemplates4-1024x355.png" width="620" height="214" /></a></p>
<p style="text-align: center">Copiar código</p>
<p>Y en el editor de código, poniendo la palabra clave con autocompletado, nos genera el código por el que podemos movernos mediante el tabulador. ¡Magia!</p>
<p><a href="http://androcode.es/wp-content/uploads/2013/02/codetemplates56.png"><img class="aligncenter size-full wp-image-3707" alt="codetemplates56" src="http://androcode.es/wp-content/uploads/2013/02/codetemplates56.png" width="630" height="438" /></a></p>
<div id="templatesadt"> </div>
<h1>Plantillas de ADT</h1>
<p>No hace mucho añadieron al plugin ADT la posibilidad de crear componentes de Android como Actividades para nuestras aplicaciones mediante un <strong>asistente</strong>, que podemos encontrar en el menú <em>File &gt; New</em> bajo la categoría de Android, el cual nos genera el código y recursos que podemos editar fácilmente. Por ejemplo, en el caso de las Actividades nos creará un <strong>layout</strong> y <strong>menú</strong> básicos en xml, la <strong>clase Java</strong> correspondiente con el código para mostrar el layout y el menú, y la entrada necesaria en el <strong>AndroidManifest.xml</strong>. E incluso podemos decirle que nos añada elementos extra de navegación como pestañas, ViewPager y más.</p>
<p><a href="http://androcode.es/wp-content/uploads/2013/02/templatesadt2.png"><img class="aligncenter size-medium wp-image-3708" alt="templatesadt2" src="http://androcode.es/wp-content/uploads/2013/02/templatesadt2-300x284.png" width="300" height="284" /></a></p>
<p>Por si fuera poco, un tiempo después añadieron la posibilidad de instalar plantillas personalizadas creadas por nosotros mismos. Yo os recomiendo <a href="https://github.com/jgilfelt/android-adt-templates">estas plantillas </a>creadas por Jeff Gilfelt para crear Actividades compatibles con la magnífica librería <strong><a title="Introducción a ActionBarSherlock" href="http://androcode.es/2012/03/introduccion-a-actionbarsherlock/">ActionBar Sherlock</a></strong>, entre otras. En el repositorio tenéis más información sobre para qué es cada uno de los elementos que añade. Además, instalar las plantillas es tan sencillo como pegarlas en la carpeta <strong>/extras/templates/</strong> del SDK.</p>
<p><a href="http://androcode.es/wp-content/uploads/2013/02/templatesadt4.png"><img class="aligncenter size-medium wp-image-3709" alt="templatesadt4" src="http://androcode.es/wp-content/uploads/2013/02/templatesadt4-198x300.png" width="198" height="300" /></a></p>
<p>Tenéis más información sobre cómo crear plantillas en <a href="https://plus.google.com/113735310430199015092/posts/XTKTamk4As8">este post de Google+</a>. ¿Se os ocurren más plantillas útiles? ¿Os animáis a hacerlas y compartirlas? <img src='http://androcode.es/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>Y hasta aquí los cambios que os sugerimos para vuestro IDE, espero que algunos os resulten tan útiles como a mi. En futuras entregas intentaremos contar otros trucos a la hora de usar Eclipse. Si tenéis más sugerencias relacionadas son bienvenidas en los comentarios  <img src='http://androcode.es/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<p>Fuentes: <a href="http://www.vogella.com/articles/Eclipse/article.html#preferences">Vogella</a> y cosecha propia</p>
]]></content:encoded>
			<wfw:commentRss>http://androcode.es/2013/02/como-hacer-mas-comodo-el-trabajo-con-eclipse/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
	</channel>
</rss>
