Servicios gratuitos sobre informacion del tiempo


OpenWeatherMap es un servicio en línea que proporciona datos meteorológicos , incluyendo datos meteorológicos actuales,pronósticos y datos históricos a los desarrolladores de servicios web y aplicaciones móviles.

Para fuentes de datos, utiliza servicios de radiodifusión meteorológica, datos en bruto de estaciones meteorológicas de aeropuertos , datos brutos de estaciones de radar y datos en bruto de otras estaciones meteorológicas oficiales.

OpenWeatherMap procesa todos los datos de forma que intente proporcionar datos precisos de pronóstico del tiempo en línea y mapas meteorológicos, como los de las nubes o la precipitación .Más allá de eso, el servicio se centra en el aspecto social mediante la participación de los propietarios de estaciones meteorológicas en la conexión con el servicio y con ello aumentar la precisión de los datos meteorológicos.

Como vemos la filosofía que hay detrás de este servicio   está inspirada en OpenStreetMap y Wikipedia que hacen que la información sea gratuita y disponible para todos,tanto es así que uiliza OpenStreetMap para la visualización de mapas meteorológicos .

Veamos algunos usos e este interesante  servicio:

El tiempo actual y los pronósticos en tu ciudad

 A través de  este servicio podemos ver  el  estado actual del tiempo en cualquier ciudad importante del mundo como  por ejemplo Londres :

Weather London , GB15 °C

Few clouds

00:40 Sep 7Wrong data?

Wind Light breeze, 2.6 m/s, West-northwest ( 290 )
Cloudiness Few clouds
Pressure 1019 hpa
Humidity 55 %
Sunrise 07:22
Sunset 20:33
Geo coords [51.51-0.13]

Los datos actuales se actualizan cada diez minutos; se puede buscar por ciudad o por coordenadas geográficas en la Tierra.

Previsión del Tiempo

También permite obtener no solo  el tiempo actual sino el  pronóstico diario de 16 días y pronóstico de 3 horas cada 5 días para su ciudad. Estadísticas útiles, gráficos y este día en las cartas de la historia están disponibles para su referencia. Mapas interactivos muestran precipitaciones, nubes, presión, viento alrededor de su ubicación.

Las previsiones meteorológicas se pueden buscar por ciudad o por coordenadas. Los pronósticos de tres horas están disponibles por hasta 5 días, mientras que los pronósticos diarios están disponibles por hasta 16 días.

Mapas del tiempo

Nos permite ver el tiempo actual  en áreas del planeta que deseemos

...

Clima actual

Podemos observar la temperatura actual y las condiciones meteorológicas en su ciudad o cualquier otra ubicación en el mapa global interactivo.

...

Capas meteorológicas

Hay una variedad de mapas están disponibles incluyendo precipitación, nubes, presión, temperatura, viento, y muchos más.

...

Mapa de satélite diario

Proporciona en tiempo real el  mapa diario global ,mientras que los datos del satélite están disponibles para darle la descripción entera de fenómenos del tiempo.

El servicio OpenWeatherMap ofrece un montón de mapas meteorológicos incluyendo precipitaciones, nubes, presión, temperatura, viento y muchos otros. Los mapas se pueden conectar a aplicaciones móviles y sitios web. Los mapas meteorológicos se pueden conectar como capas a la amplia gama de mapas, incluyendo azulejos Directos, WMS ,OpenLayers , folletos , mapas de Google y mapas de Yandex .

Gestión de campañas basadas en el clima de Google con OpenWeatherMap API

También permite ejecutar campañas publicitarias con API de tiempo OpenWeatherMap a través de Google AdWords.

APIs meteorológicas para desarrolladores

Hay un montón de entrenamiento con las API de tiempo en PHP, Java, Python, Go y muchos otros en la página de Partners junto con más de 1500 repositorios en GitHub

OpenWeatherMap proporciona una API con terminales JSON , XML y HTML y un nivel limitado de uso libre. Realizar más de 60 llamadas por minuto requiere una suscripción pagada a partir de USD 40 por mes. El acceso a datos históricos requiere una suscripción a partir de 150 USD al mes.  Los usuarios pueden solicitar información meteorológica actual, pronósticos extendidos y mapas gráficos (que muestran la cobertura de nubes, la velocidad del viento, la presión y la precipitación).

Las APIs como vamos a ver en el ejemplo , son sencillas y rápidas permitiendo el acceso al tiempo actual, a pronósticos, mapas y datos históricos en formatos JSON, XML y HTML. Además  una variedad de capas del mapa está disponible incluyendo precipitación, nubes, presión, temperatura, viento, y muchos más.

Conectar  una estación meteorológica a OpenWeatherMap

Cuenta  con una  red de estaciones meteorológicas privadas (más de 40.000 estaciones meteorológicas en todo el mundo)  peor también puede conectar su estación meteorológica a OpenWeatherMap y obtener una interfaz conveniente para recopilar y supervisar los datos de su estación meteorológica. También puede integrar los datos de su estación meteorológica en su página principal

Ejemplo

 

Como ejemplo vamos  a ver  como usar el servicio gratuito OpenWeatherMap para recuperar las condiciones meteorológicas de una ubicación.

Antes de poder utilizar el servicio, debe configurar una cuenta y solicitar una clave de API para su API Condiciones actuales.

Apunte su navegador a OpenWeatherMap y configure una cuenta.

 

weather.PNG

 

La  url  de acceso es  la siguiente  https://openweathermap.org

El sistema de geocodificación OpenWeatherMap permite a los usuarios seleccionar ciudades por nombre, país, código postal o coordenadas geográficas. Es posible buscar por parte del nombre de la ciudad. Para que el resultado de la búsqueda sea más preciso, el nombre de la ciudad y el país se deben dividir por comas

La url  anterior  admite el parametro city  para  que nos de el tiempo actual y la previsión de 13 días de tras directamente desde la url , por ejemplo para Almeria  es 2521886   y esta es la url completa :https://openweathermap.org/city/2521886

Para registrarnos nos  iremos  a https://home.openweathermap.org/users/sign_up

 

signin

 

Ingresaremos   un login ( normalmente el nombre de usuario ), un email así como  la clave inicial , y con esto ya nos daría acceso a la herramienta

 

 

Una vez que tenga un inicio de sesión válido, vaya a la página API del servicio y suscríbase al servicio de datos Tiempo actual y, a continuación, genere una clave de API.

 

Obviamente  anote la clave de la API  pues lo necesitara  para usarla en su aplicación ( por ejemplo si usa node.js e  Ionic en el código TypeScript de la aplicación)

Anuncios

Soporte multilenguaje en Android Studio


Android se ejecutará en muchos dispositivos en muchas regiones. Para llegar a la mayoría de los usuarios, su aplicación debe manejar texto, archivos de audio, números, moneda y gráficos de manera apropiada a los locales donde se utilizará su aplicación.

 

En realidad al escribir una app ya se debe tener un conocimiento práctico de Java y estar familiarizado con la carga de recursos de Android, la declaración de elementos de la interfaz de usuario en XML, consideraciones de desarrollo como el ciclo de vida de la actividad y los principios generales de internacionalización y localización.

Es una buena práctica usar el marco de recursos de Android para separar los aspectos localizados de su aplicación tanto como sea posible de la funcionalidad básica de Java:

  • Puede poner la mayor parte o la totalidad del contenido de la interfaz de usuario de su aplicación en archivos de recursos, tal como se describe en este documento y en Proporcionar recursos .
  • El comportamiento de la interfaz de usuario, por otra parte, es impulsado por su código Java. Por ejemplo, si los usuarios introducen datos que deben formatearse o clasificarse de forma diferente dependiendo de la configuración regional, utilizarían Java para manejar los datos mediante programación. Este documento no cubre cómo localizar su código Java

Siempre es una buena práctica extraer strings de IU del código de tu app y conservarlas en un archivo externo. Android facilita esta tarea con un directorio de recursos en cada proyecto del sistema operativo.

Si creo su proyecto con herramientas del Android SDK (lea Cómo crear un proyecto en Android), las herramientas crean un directorio res/ en el nivel superior del proyecto. El directorio res/ contiene subdirectorios para varios tipos de recursos. También hay algunos archivos predeterminados, como res/values/strings.xml, que contiene los valores de tu string.

Agregar los valores de string para cada configuración regional en el archivo correspondiente.

En tiempo de ejecución, el sistema Android usa un conjunto correspondiente de recursos de string basado en la configuración regional actual del dispositivo del usuario.

Por ejemplo, a continuación se indican algunos archivos diferentes de recursos de strings para distintos idiomas.

Inglés (configuración regional predeterminada), /values/strings.xml:

<?xml version="1.0" encoding="utf-8"?>

    <string name="title">My Application
    <string name="hello_world">Hello World!

Español, /values-es/strings.xml:

<?xml version="1.0" encoding="utf-8"?>

    <string name="title">Mi Aplicación
    <string name="hello_world">Hola Mundo!

Nota: Puede usar un calificador de configuración regional (o cualquier calificador de configuración) en cualquier tipo de recurso, como lo harías si deseas proporcionar versiones localizadas del elemento de diseño de tu mapa de bits. Para más información, consulta Localización.

Usar los recursos de string

Puede hacer referencia a sus recursos de string en el código fuente y en otros archivos XML usando el nombre del recurso definido por el atributo namedel elemento .

En su código fuente, puede hacer referencia a un recurso de string con la sintaxis R.string.. Existen diferentes métodos disponibles que aceptan un recurso de string de esta manera.

Por ejemplo:

// Get a string resource from your app's Resources String hello = getResources().getString(R.string.hello_world); // Or supply a string resource to a method that requires a string TextView textView = new TextView(this); textView.setText(R.string.hello_world);

En otros archivos XML, puedes hacer referencia a un recurso de string con la sintaxis @string/ siempre que el atributo XML acepte un valor de string.

Por ejemplo:

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/hello_world" />
Paso 1:

Crear un nuevo proyecto Hello World.

Paso 2:
Abrir el archivo main_activity.xml y personalice el texto como desee.

Utilice la pestaña Diseño y cree una nueva traducción haciendo clic en el botón globo.

Paso 3:

Ahora Android Studio genera un nuevo archivo xml en esta ruta de acceso: res / values / strings.

Resultados.

Por qué los recursos predeterminados son importantes

Siempre que la aplicación se ejecute en una configuración regional para la que no haya proporcionado texto específico de la configuración regional, Android cargará las cadenas res/values/strings.xml de res/values/strings.xml . Si este archivo predeterminado está ausente o si falta una cadena que su aplicación necesita, su aplicación no se ejecutará y mostrará un error. El ejemplo siguiente ilustra lo que puede suceder cuando el archivo de texto predeterminado está incompleto.

Ejemplo:

El código Java de una aplicación se refiere a sólo dos cadenas, text_a y text_b . Esta aplicación incluye un archivo de recursos localizados ( res/values-en/strings.xml ) que define text_a y text_b en inglés. Esta aplicación también incluye un archivo de recursos predeterminado ( res/values/strings.xml ) que incluye una definición para text_a , pero no para text_b :

Cuando esta aplicación se inicia en un dispositivo con la configuración regional en inglés, la aplicación puede ejecutarse sin ningún problema, porque res/values-en/strings.xml contiene ambas cadenas de texto res/values-en/strings.xml .
Sin embargo, el usuario verá un mensaje de error y un botón de cierre de la fuerza cuando esta aplicación se inicia en un dispositivo establecido en un idioma que no sea el inglés. La aplicación no se cargará.
Para evitar esta situación, asegúrese de que existe un archivo res/values/strings.xml y que define cada cadena res/values/strings.xml . La situación se aplica a todos los tipos de recursos, no sólo a las cadenas: Debe crear un conjunto de archivos de recursos predeterminados que contengan todos los recursos que su aplicación requiere: diseños, dibujos, animaciones, etc. Recursos .

 

 

Android de Como ENCUENTRA el recurso de coincidencia Óptima

Cuando  solicita  un recurso para el cual sea proporciona Alternativas, Android selecciona qué recurso alternativo ,como utilizar en Tiempo de ejecucion, según la configuración del dispositivo real. Para demostrar como Android selecciona un recurso alternativo, suponga que cadauino de los siguientes elementos de diseño contienen versiones diferentes de las mismas imágenes:

dibujable /
dibujable-es /
dibujable-fr-RCA /
dibujable-en-puerto /
dibujable-en-NoTouch-12key /
dibujable-puerto-LDPI /
dibujable-puerto-NoTouch-12key /

Y suponga que la configuracion del dispositivo es la siguiente:

Configuracion regional = en-GB
Orientación de la Pantalla = port
densidad de píxeles de la Pantalla = hdpi
tipo de pantalla táctil = notouch
director Método de entrada de texto =12key

Al comparar la configuracion del Dispositivo con los Recursos Alternativos Disponibles, Android Selecciona Elementos de Diseño de drawable-en-port.

Para Decidir Qué Recursos Como utilizar, El Sistema se basa en la siguiente lógica:

Figura 2: Diagrama de Flujo de la forma en la cual sea ENCUENTRA Android el recurso de coincidencia Óptima.

  1. Eliminar os Archivos de recursos que se contradicen con la configuración del Dispositivo.El Directorio drawable-fr-rCA/se elimina porque se contradice con la configuración regional en-GB.
    dibujable /
    dibujable-es /
    dibujable-fr-RCA /
    dibujable-en-puerto /
    dibujable-en-NoTouch-12key /
    dibujable-puerto-LDPI /
    dibujable-puerto-NoTouch-12key /
    

    Excepción: La densidad de píxeles de la Pantalla es el unico calificador Que No se Elimina DEBIDO A una contradicción. AUNQUE la densidad de la Pantalla del Dispositivo es IPAP, drawable-port-ldpi/no se Elimina Porque TODAS LAS densidades de Pantalla se consideran Como una coincidencia En Este punto.

  2. Elegir el (Próximo) calificador de alcalde precedencia de la Lista ( tabla 2 ). (Comenzar con MCC y continuar en forma descendente).
  3. ¿Alguno de los Directorios de recursos INCLUYE Este calificador?
    • La Respuesta Si es que no, volver al paso 2 y examinar · el siguiente calificador. (In the example, La Respuesta es “no” Hasta Que se Alcanza el calificador de idioma).
    • Si La Respuesta es sí, continuar con el paso 4.
  4. ELIMINAR los Directorios de recursos Que No INCLUYEN Este calificador. En the example, El Sistema Elimina Todos Los Que No Directorios INCLUYEN UN calificador de idioma:
dibujable /
dibujable-es /
dibujable-en-puerto /
dibujable-en-NoTouch-12key /
dibujable-puerto-LDPI / 
dibujable-puerto-NoTouch-12key /

Excepción: Si el calificador en cuestión f es la densidad de píxeles de la Pantalla, Android slecciona la opción que más coincida con la densidad de la Pantalla del Dispositivo. En general, Aandroid reduce  su preferecica a  una imagen original, en la directiva más grande antes que ampliar una imagen mas pequeña que las originales.

  1. Volver y repetir los Pasos 2, 3 y 4 Hasta Que Quede solitario Directorio de la ONU. En el ejemplo, la Orientación de la Pantalla Es El Próximo calificador para el cual sea existen coincidencias. Por lo del tanto, se eliminan los Recursos Que No se especifican Una Orientación de Pantalla:
    dibujable-es /
    dibujable-en-puerto /
    dibujable-en-NoTouch-12key /
    

    El Directorio Que Queda es drawable-en-port.

Si bien este procedimiento se ejecuta párrafo cada recurso: solicitado, el  Sistema Optimiza algunos adj: Aún más: aspectos. Un example of this Optimización Es Que Una Vez Que se conoce la configuration del Dispositivo, El Sistema podria ELIMINAR los Recursos Alternativos Que Nunca coinciden. EJEMPLO Por, si el idioma de configuration es inglés ( “en”), los Directorios de recursos Que Tienen ONU calificador de idioma establecido en Otro idioma ¿Que hay mar ingles Nunca de INCLUYEN en el conjunto de recursos comprobados (sin embargo, la ONU Directorio de Recursos pecado el calificador de idioma sí se includes).

Cuando Se seleccionan Recursos SEGÚN los calificadores del Tamaño de la Pantalla, El Sistema utilizará los Recursos Diseñados Para Una Pantalla Más Pequeña Que la Pantalla SI real sin EXISTEN Recursos Que coincidan mejor (por Ejemplo, Una Pantalla de Tamaño Grande utilizará Recursos De Una Pantalla de Tamaño normal de Si es Necesario). Sin embargo, si Los Únicos Recursos Disponibles Presentan ONU Tamaño superiores al de la Pantalla real, El Sistema sin los Usara y tu application fallará si ningún Otro recurso que coincidiera con la configuration del Dispositivo (POR EJEMPLO, SI Todos Los Recursos de Diseño estan etiquetados con el calificador xlarge, Pero el Dispositivo es Una Pantalla de Tamaño normal).

Nota: La precedencia del calificador (en la tabla 2 ) es mas Importante Que la Cantidad de calificadores que coinciden exactamente con el Dispositivo. Por Ejemplo, en el paso 4 mencionado anteriormente, la última Opción de la Lista INCLUYE tres calificadores que coinciden exactamente con el Dispositivo (orientation, tipo de pantalla táctil y Método de entrada), MIENTRAS Que drawable-enTiene Un solitario PARÁMETRO Que coinciden (idioma). Sin embargo, el idioma Tiene alcalde precedencia Que ESTOS Otros calificadores, por lo del tanto, drawable-port-notouch-12keyse Elimina.

Como publicar su app en Amazon


Aunque la supremacía de los markets de Google  y Apple son mas que evidentes , el ecosistema de Amazon  va aumentando considerablemente  dia tras dia   conforme Amazon crece a  doble dígito  tanto en ventas como en numero de usuarios .

Precisamente  debido al aumento de penetración de sus fieles  usuarios compuestos por millones de  usuarios de Android, esto nos da una pista de que  su market también es una buena oportunidad pues los desarrolladores afirman incluso hacen mas dinero  con el market de MAzon ya que el 65% de los desarrolladores dicen que” los ingresos totales de Amazon son similares o mejores que otras plataformas” en parte gracias a que los clientes de Amazon están muy comprometidos y muchos desarrolladores han visto mayores ARPU versus plataformas competitivas.

Los desarrolladores en amazon pueden ganar  dinero  a través de varios modelo de negocio: descargas directas, publicidad en las propias aplicaciones y  las ventas in-apps .

El ultimo modelo  permite  vender productos de Amazon a través de las  propias aplicaciones obteniendo una comisión por venta realizada gracias al API de Amazon  así como el SDK que proporcionan .De esta forma pues  permiten monetizar las aplicaciones y juegos con API como, por ejemplo, los anuncios de compra en la aplicación de Amazon y los anuncios para móviles. .

En cuanto las aplicaciones  desarrolladas para Android que incluso pueden estar publicadas en Google Play, la mayoría de estas  también  funcionaran  en la Appstore de Amazon sin necesidad de desarrollo adicional.  lo cual permitirá  alcanzar millones de  clientes en todo el mundo pues  la Appstore de Amazon está disponible en 236 países y territorios, ofreciéndole una base de clientes global al instante.

 

En este post  veremos  las instrucciones en pantalla para crear una cuenta  de desarrollador de Amazon , probar si nuestra app es compatible con el market de amazon , documentar los detalles , especificar los royalties  y por supuesto finalmente  enviar su aplicación para hacerla disponible a la enorme base de clientes de Amazon.

Como se puede ver son muchos pasos , así que vayamos por partes:

 

Primera subida  y test de la aplicación

Para solicitar la inclusión de una  aplicación en  el catálogo de la tienda Apps  en primer lugar  deberá tener  el apk de su aplicación     y acceder a Amazon Appstore Mobile App Distribution Portal

apk.png

En esta pantalla arrastramos el fichero apk en la esquina derecha  donde probaremos  la compatibilidad de su aplicación en Fire y dispositivos Android  (simplemente arrastre y coloque su APK en el  servicio de pruebas de AWS  para obtener resultados en 90 segundos o menos).

 

compatibilidad

 

Si el resultado ha sido satisfactorio , podemos  subir  nuestra aplicación  a la plataforma de Amazon , por lo que   ahora nos pedirá   que nos validemos con nuestra cuenta de amazon para avanzar en el registro de la aplicación( puede ser la cuenta de amazon que usamos habitualmente para comprar=.

 

signn.png

 

Registro como desarrollador e impuestos

Una vez subida la aplicación  y comprobada la compatibilidad del apk  lo siguiente es registrase como  desarrollador de Amazon.

En la   pagina tendrá  que cumplimentar   todos los campos , donde ademas de los datos personales  nos solicitaran una breve descripción de no mas 2000 caracteres sobre el desarrollador , así como si ha tenido en cuenta alguna dirección de correo electrónico  para atender  a los usuarios.

 

resgistro.png

 

Por ciento ,tenga  mucho cuidado en este apartado ,pues lo que se cumplimente aquí, una vez grabado, ya  no se podrá modificar así que es muy importante  que  piense muy bien lo que va  a cumplimentar en los apartados Developer description   y en los servicios que vaya a ofrecer a los potenciales clientes.

Una vez pulsado el botón Save and Continue, lo siguiente es aceptar las condiciones de Amazon :

 

 

registtrox.png

Una vez aceptadas la condiciones,lo siguiente es ingresar los datos bancarios

 

 

pagos

Ya para terminar nos toca ajustar el tema de los impuestos aplicados a nuestras posibles ganancias:

 

royaltie.png

 

Ahora es el momento de cumplimentar el impreso  IRS W-9, W-8 para determinar si sus pagos están sujetos al formulario 1099-MISC o 1042-S del IRS.

Para cumplir con los requisitos del IRS lo más eficientemente posible, se deben contestar todas las preguntas e ingresar toda la información solicitada lo cual para todos los que hablamos español se nos hace bastante lioso

Tenga cuidado para evitar errores ortográficos o para ingresar números de identificación de impuestos incorrectos, lo que puede resultar en un formulario de impuestos invalidado.

Lógicamente se  tiene la obligación de notificar a Amazon de cualquier cambio en su información de identidad fiscal reanudando la entrevista de información tributaria si el cambio podría invalidar su W-9, W-8.

El cambio de circunstancias incluye:

  • Cambio de su nombre legal (por ejemplo, debido al matrimonio o la incorporación)
  • Cambio de dirección de un país a otro
  • Cambio de su número de identificación fiscal (TIN) de su negocio de su número de seguro social (SSN) a un número de identificación del empleador (EIN)
  • Para propósitos de impuestos en los Estados Unidos, es muy importante mencione si es Ud. una persona estadounidense
  • Para propósitos de impuestos federales de los Estados Unidos, se le considera una persona de los Estados Unidos si usted es:Un individuo que es un ciudadano de los Estados Unidos o un extranjero residente de los Estados Unidos,Una asociación, corporación, compañía o asociación creada u organizada en los Estados Unidos o bajo las leyes de los Estados Unidos,Una finca (que no sea una finca extranjera), o
    Un fideicomiso de los Estados Unidos.
  • Para propósitos de impuestos federales de los Estados Unidos, se le considera una persona no estadounidense (extranjera) si usted es:un individuo extranjero no residente,una corporación extranjera,una sociedad extranjera,un fideicomiso extranjero,una propiedad extranjera, cualquier otra persona que no sea una persona de los Estados Unidos.

Bien pongámonos mano a la obra para cumplimentarlo primero marcando si somos o no de U .S.:

 

 

paso1.png

 

Una vez aceptado este paso , lo siguiente es cumplimentar el grueso de formulario empezando por nuestro nombre y dirección postal:

 

 

Asimismo marcaremos si actuamos como intermediarios así como si somos algo que tenga que ver con una empresa:

 

tax6.png

 

tin

 

Al aceptar pulsando “save and continue”   nos da un resumen del documento:

 

 

final

Podemos solicitarlo por papel ,pero lo mejor es hacerlo via electronica pulsando en “Go paperles,I want to receive my Form 1042-S electrinicaly”    así como mas abajo donde pone “I consent to provide my electronic signature” , y  después  marcar  todos  los apartados siguientes:

 

electronic.png

A destacar  que debemos seleccionar  a todos los no residentes en EEUU  en  el apartado “Electronic Signature”  , en la parte que menciona que bajo pena de perjurio, declaramos que hemos examinado la información en este formulario y que,  saber y entender, es verdadera, correcta y completa. Además certificamos bajo pena de perjurio que:

  • Yo soy el individuo que es el beneficiario efectivo (o estoy autorizado a firmar para el individuo que es el beneficiario efectivo) de todos los ingresos a los cuales este formulario se relaciona o estoy usando este formulario para documentarme como un individuo que es propietario o cuenta Titular de una institución financiera extranjera
  • La persona nombrada en la línea 1 de este formulario no es una persona de los Estados Unidos
  • Los ingresos a los que se refiere este formulario son: (a) no relacionados efectivamente con la conducta de un comercio o negocio en los Estados Unidos, (b) están conectados pero no están sujetos al impuesto bajo un tratado de impuesto sobre la renta aplicable, o (c) La participación del socio en los ingresos efectivamente conectados de una asociación
  • La persona nombrada en la línea 1 de este formulario es residente del país tratado incluido en la línea 9 del formulario (si lo hubiere) en el sentido del tratado sobre el impuesto sobre la renta entre los Estados Unidos y ese país
  • Para las transacciones de intermediarios o intercambios de trueque, el beneficiario efectivo es una persona extranjera exenta tal como se define en las instrucciones, y
    Acepto que enviaré un nuevo formulario dentro de 30 días si alguna certificación hecha en este formulario se vuelve incorrecta.

Una vez aceptada esta parte , nos aparecerá que hemos llegado al 100% del proceso de cumplimento   y se nos mostrara el impreso de forma electrónica:

 

finalxxxx.png

Algo muy interesante es imprimirlo directamente  desde esta aplicación para guardarlos   y ya por fin habremos concluido  la primera parte del proceso

 

Bueno  ya hemos resuelto el tema legal  y  ya tenemos cuenta de  desarrollador de  Amazon , asi que   una vez que tengamos el apk   y hayamos pasado los pasos anteriores  ya estamos listos para  desplegar nuestra app y seguir los siguientes pasos que explicaremos en un segundo post.

Mientras tanto sospese si le interesa el programa Amazon Underground que pasamos a comentar en las siguientes lineas:

 

 

Amazon Underground

Una posibilidad para los desarrolladores es también incluir  nuestra app  en amazon undergroud,pero se  requiere cumplir con los siguientes requisitos generales para el programa:

  • Es necesario que la aplicación móvil esté disponible para descargar desde la tienda de Google Play o en la App Store de Apple y que esté monetizada en al menos una de las siguientes maneras:
    • La aplicación está disponible para su compra por una tarifa en todas las tiendas de otras aplicaciones donde se vende.
    • La aplicación contiene elementos en la aplicación que están disponibles para su compra por una tarifa.
  • la aplicación para dispositivos móviles no debe contener ningún elemento de suscripción en la propia aplicación.
  • Las características y la jugabilidad de la versión de Amazon Underground de su aplicación debe ser sustancialmente similar o mejor que la versión no subterránea.
  • Cuando envíe su aplicación a Amazon Appstore, debe hacer que su aplicación esté disponible para su distribución en al menos un dispositivo móvil que no sea de Amazon.

Pasos mínimos requeridos para la presentación de la aplicación

Amazon recomienda  los siguientes pasos para garantizar un proceso de envío fluido al programa Amazon Underground para su aplicación. Ten en cuenta que para Amazon Underground, necesitarás crear y mantener una nueva versión de tu aplicación. Esta nueva aplicación requiere un nombre de paquete único y se debe enviar por separado a la Appstore de Amazon desde cualquier versión existente de la aplicación.

  1. Revise los requisitos de elegibilidad en esta página y en el Programa de Amazon Underground antes de realizar cualquier cambio en su aplicación para verificar que su aplicación cumple con los requisitos del programa.
  2. Reconstruya su aplicación con los cambios de código que haya realizado para Amazon Underground y asigne un nombre de paquete nuevo y único a su aplicación. Por ejemplo, si el nombre original del paquete de su aplicación era “com.company.example”, llame a la versión Amazon Underground del paquete “com.company.example.underground”. Este nombre de paquete debe ser único en todas las plataformas en las que esté disponible la aplicación.
  3. Aplique la marca a su icono de lanzamiento como se describe en la página Migrar su aplicación a Amazon Underground superponiendo el archivo PNG proporcionado por Amazon para aplicar el marco de Amazon Underground al icono de lanzador.
  4. En el Portal de desarrolladores de aplicaciones y juegos de Amazon, comienza el nuevo proceso de envío de aplicaciones para tu aplicación con su nuevo y único nombre de paquete de Android.
    1. Como una nueva aplicación, crea un nuevo paquete de envío para la versión de Amazon Underground de tu aplicación.
    2. En el campo Descripción breve de la aplicación , describe el nuevo valor que ofrece la versión de Amazon Underground de tu aplicación en la versión no subterránea. Llame a cualquier característica que solía ser pagada que ahora están libres.
    3. Si procede, vuelva a crear sus artículos de compra en la aplicación (IAP) como parte de la presentación de su nueva aplicación, manteniendo intactos los precios originales. Incorporar los nuevos SKUs para estos elementos IAP en su aplicación. (Los precios de estos artículos se establecen automáticamente en cero para los usuarios de la versión de Amazon Underground de tu aplicación).
    4. Si su aplicación utiliza cualquiera de las API de Amazon descritas en la siguiente sección, cree una clave de API nueva y separada y actualice la versión de Amazon Underground de su aplicación para usar la nueva clave. (Consulte Migración de su aplicación a Amazon Underground .)
    5. Para abordar los cambios de seguridad en Android OS 5.0 (Lollipop), si su aplicación declara un permiso personalizado, consulte https://forums.developer.amazon.com/articles/2706/android-security-changes-requires-uniquely-defined.html .
    6. Verifique que su aplicación cumpla con los requisitos de elegibilidad detallados en el horario de Amazon Underground .
  5. En las opciones Disponibilidad y Precios , seleccione para Amazon Underground.
  6. En Imágenes , cargue sus activos.
  7. Envíe su aplicación a Amazon Appstore. Su aplicación será revisada antes de ser aceptada en el programa. Si no acepta su aplicación, iterar el paquete de presentación de la aplicación con los cambios necesarios y volver a enviarlos.

Directrices de diseño de aplicaciones

Las siguientes prácticas recomendadas son recomendaciones fuertes de Amazon para el programa Amazon Underground. Si su aplicación se aparta de estas directrices, es posible que su aplicación se rechace o se elimine del programa Amazon Underground. Para obtener más detalles sobre estas recomendaciones, consulte Requisitos de diseño y modificación de aplicaciones y directrices para Amazon Underground .

Asegúrese de que su aplicación de Amazon Underground se adhiera a las siguientes directrices:

  • Títulos Premium : si tu aplicación es un título premium donde los usuarios normalmente pagan por la aplicación en otras plataformas, resalta el valor añadido de tu aplicación en la versión de Amazon Underground. Si la única diferencia entre una versión premium de su aplicación y una gratuita es la eliminación de anuncios en la versión premium, asegúrese de proporcionar características o beneficios adicionales en la versión de Amazon Underground de su aplicación. Las aplicaciones Premium en las que la falta de anuncios en la versión Amazon Underground es la única característica premium no se considerará para el programa.
  • Metadatos de la aplicación: en el paquete de envío a Amazon Appstore, la versión de Amazon Underground de tu aplicación debe conservar la identidad y la marca de la versión no subterránea. Sin embargo, Amazon le anima a utilizar activos y medios actualizados para la versión de Amazon Underground, como capturas de pantalla y descripción de la aplicación, para ayudar a comunicar la propuesta de valor de la versión de Amazon Underground a sus usuarios. Por ejemplo, agregando tachas a los gráficos para los elementos IAP. La descripción de la aplicación no debe incluir referencias a contenido pagado. No copie y pegue la descripción de la aplicación en la versión no subterránea de su aplicación si hace referencia a contenido pagado.
  • Compras en la aplicación (IAP) : la versión de Amazon Underground de su aplicación puede incluir IAP gratuito o ilimitado, siempre y cuando su implementación cumpla con las siguientes pautas:
    • Disponibilidad de elementos de IAP : Todos los elementos de IAP en la versión no subterránea de su aplicación (o elementos equivalentes) deben permanecer en la versión de Amazon Underground de su aplicación para que el cliente tenga la opción de seleccionar de forma gratuita. Esto permite a los clientes ver beneficios inmediatos y entender el valor de “todo gratis”.
    • Desbloqueo de funciones o actualizaciones : para las aplicaciones que utilizan elementos IAP para desbloquear funciones o actualizaciones, asegúrese de que estas características y actualizaciones permanezcan en la aplicación . Un usuario no debe buscar un elemento IAP popular de la versión no subterránea de su aplicación y encontrar que este elemento falta en la versión de Amazon Underground.
  • Anuncios en la aplicación: no puede obligar a los usuarios a ver un anuncio para desbloquear una función o un elemento IAP.
  • Compartición social : no vincule el avance dentro de su aplicación al compartir social. No es posible que su aplicación requiera que un usuario comparta o publique en un sitio de medios sociales para desbloquear una característica o elemento IAP.
  • Progreso del Juego : No implemente lapsos de tiempo o “tiempo de reutilización” para que los clientes de Amazon Underground restrinjan su progreso. Por ejemplo, no requieren que los clientes esperen un cierto número de horas antes de que puedan desbloquear un nuevo nivel.
  • Títulos de Freemium con opción a pagar por la versión libre de anuncios : si su título de freemium incluye un elemento para eliminar anuncios como el único elemento de IAP de la aplicación, su aplicación no se considerará para el programa. Proporcione beneficios adicionales al cliente dentro de la aplicación, como niveles adicionales o moneda dentro de la aplicación.
  • Aplicaciones en segundo plano : no recibirás regalías por el tiempo que la aplicación pase corriendo en segundo plano. Si su aplicación se ejecuta principalmente en segundo plano, es probable que no se considere para Amazon Underground.

Error en whatsapp en la descarga de videos


Hay personas que de repente  cuando reciben fotos o videos por whatsapp, al intentar verlos o reproducirlos aparece un molesto  mensaje

 Error de descarga:. No se ha podido completar la descarga. Vuelva a intentarlo más tarde.

Y por cierto, por mucho que lo intentemos o esperemos no cambia la situación..

En  casos aislados,  cuando se intenta  adjuntar algo anexo  incluso avisa “ok” pero obviamente no envía nada . No obstante el problema es mayor   aun cuando nos envían un archivo, pues pulsamos en descargar y vuelve a saltar el  mensaje “Error en la Descarga: No se ha podido completar la descarga, inténtelo mas tarde. “ ¿como podemos solucionar este grave problema?

Falta la carpeta media o se crea un fichero llamado media

Un primer posible origen del problema del fallo de la descarga puede el siguiente: la carpeta “Media” de whatsapp  por alguna razón se renombra o desapaprece ,razón por la cual  la aplicacion  no sabe qué hacer con los archivos (video, audio, imágenes) y da este extraño error

 

 

sinformaterar.png

En  caso de que sospechemos que esa podría ser la causa podemos  hacer lo siguiente.

1- Conectar el terminal al pc de modo que podemos  editar la tarjeta de memoria
2- Ir a la tarjeta de memoria. Alli habrá muchas carpetas  ,pero las que nos interesa es la carpeta  whatsapp que a su vez debe contener  cuatros carpetas :

  • .trash
  • Backups
  • Database
  • Media

whats1.png

Si falta la carpeta Media o tenemos un archivo llamado media sin extensión es un síntoma inequívoco de mal funcionamiento .

3- Elimine el archivo media  de manera que nos queden al menos las tres primeras carpetas solamente.
4- Cree una nueva carpeta llamada  Media
5- Entre en la carpeta Media (que acaban de crear) para ver que esté vacía. Por defecto luego la propia aplicación creará otras 8 subcarpetas  como en la imagen siguiente:

 

media
6- Ahora hay dos opciones:
a) Reiniciar  el terminal . (desconéctelo de manera segura )

b) Volver a conectarlo al pc,para poder editar la tarjeta de memoria .Entre en  la carpeta WhatsAppMedia y fíjense si ya se crearon las nuevas carpetas, si esto no sucedió entonces cree  manualmente al  menos  las cuatro carpetas :

  •  Wallpaper
  •  WhatsApp Audio
  •  WhatsApp images
  •  WhatsApp Video

Una vez hecho ,por favor reinicie su terminal y compruebe que ya se puede  descargar ok

Tarjeta SD fragmentada o con errores

Un segundo  posible origen del problema puede prevenir por un fallo en la tarjeta microsd  por excesiva fragmentación ,razón  por la cual  la aplicación  no sabe qué hacer generalmente con ficheros grandes como archivos de  video  o audio ( no con las  imágenes) y da este extraño error

Para intentar solucionarlo copiaremos el contenido de la carpeta whatasapp a nuestro ordenador   y obviamente todo lo que nos interese  e intentaremos hacerle un formateo a la sd

Un claro síntoma de que la tarjeta esta mal es que no permite formatearlo con las hermanamientos estándar del sistema operativo.

.
sinformaterar.png

 

Una herramienta  que nos permite formatear incluso con estos problema es hdd low level format tool  ,pero tenemos que tener extrema atencion en la unidad que deseamos formatear:

 

hdd.PNG

 

Un vez seleccionada la unidad , pulsar en la pestaña  “low level format” y el botón “format thos device”

hdd2

Tras un rato ( unos 8minutos para uan kingston de 8gb)  deberia finalizar el proceso

hddfin.PNG

Un vez hayamos formateado la sd, podemos volver a copiar el contenido de la carpeta whtasapp  y desinstalar y volver a instalar la aplicación whatsapp para que al iniciarse pregunte si desea  recuperar  el contenido de la sd  ..

Debería ahora volver a  funcionar las descargas …( o si no es así cambie la sd por otra nueva e intente volver a probar)

 

 

Programar en Android no es tan complicado (parte 2)


En un post  anterior veíamos que  el panorama del entorno necesario para programar un aplicación   que se ejecute sobre cualquier dispositivo Android  ha cambiado sustancialmente  reduciéndose  simplemente a una potente herramienta   gratuita  , que ademas proporciona Google: Android Studio.

En este  post seguiremos  profundizando en el desarrollo de aplicaciones con Android Studio deteniéndonos en uno de los aspectos mas llamativos de cualquier aplicación : la  interfaz gráfica de usuario

Android proporciona un vocabulario de XML que corresponde a las subclases de View y ViewGroup, de modo que puede definir su IU en XML usando una jerarquía de elementos de IU y  los diseños son subclases de ViewGroup

Generalmente, los objetos View son widgets de IU como botones o campos de texto y los objetos ViewGroup son contenedores de vistas invisibles que definen la disposición de las vistas secundarias, como en una cuadrícula o en una lista vertical.

 

 

 

 

Diseño interfaz

Aunque existen infinitas  posibilidades de diseño del interfaz ,para empezar,  usaremos un diseño sencillo lineal que coloca todos los elementos gráficos uno a continuación del otro:

  • En la ventana Project de Android Studio, abra el fichero activity_main.xml( app > res > layout > activity_main.xml).Este archivo XML define el diseño de tu actividad y contiene la vista de texto predeterminada “Hello World”.
  • Cuando abra un archivo de diseño, lo primero que ve es el editor de diseño, pero muchos programadores prefieren trabajar directamente con el XML; por lo tanto, haga clic en la pestaña Text en la parte de abajo de la ventana para pasar al editor de texto.
  • Borre todo el contenido del fichero  e introduzca  el siguiente XML:
    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="horizontal">
    </LinearLayout>

LinearLayout es un grupo de vistas (una subclase de ViewGroup) que dispone las vistas secundarias en sentido vertical u horizontal, según lo especificado por el atributo android:orientation. Cada elemento secundario de un LinearLayout aparece en la pantalla en el orden en que aparece en XML.

Se necesitan otros dos atributos, android:layout_width y android:layout_height, para especificar el tamaño de todas las vistas.

Debido a que LinearLayout es la vista de raíz en el diseño, debería ocupar el área de la pantalla completa que está disponible para la app al establecer el ancho y el alto en "match_parent". Este valor declara que la vista debería expandir su ancho o alto para coincidir con el ancho o alto de la vista primaria.

Agregar un campo de texto

En el archivo activity_main.xml, dentro del elemento <LinearLayout>, agregue el siguiente elemento <EditText>:

<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal">


   <EditText android:id="@+id/edit_message" 
    android:layout_weight="1"
    android:layout_width="0dp" 
    android:layout_height="wrap_content"
    android:hint="@string/edit_message" />


</LinearLayout>

A continuación, se ofrece una descripción de los atributos del <EditText> que ha agregado:

  • android:id:Esto proporciona un identificador único para la vista, que puede usar para hacer referencia al objeto desde elcódigo de la app, como leer y manipular el objeto .El signo de arroba (@) se requiere cuando se hace referencia a cualquier objeto de recursos de XML y va seguido por el tipo de recursos (id en este caso), una barra diagonal y el nombre del recurso ().El signo más (+) antes del tipo de recurso se necesita solo cuando se está definiendo un ID de recurso por primera vez. Cuando compila la app, las herramientas del SDK usan el nombre del ID para crear un nuevo ID de recurso en el archivo R.java de tu proyecto que hace referencia al elemento EditText. Con el ID de recurso declarado una vez de esta forma, otras referencias al identificador no necesitan el signo más. Es necesario el uso del signo más solo cuando se especifica un nuevo ID de recurso y no se necesita para los recursos concretos, como strings o diseños. Consulta el cuadro lateral para más información sobre los objetos del recurso.
  • android:layout_width y android:layout_height:En lugar de usar tamaños específicos para el ancho y el alto, el valor "wrap_content" especifica que la vista solo debe ser lo suficientemente grande para ajustarse al contenido de la vista. Si en cambio usa "match_parent", el elemento EditText ocupará la pantalla porque coincidirá con el tamaño del elemento primario LinearLayout. Para más información, consulta la guía de Diseños.Fijar el ancho en cero (0 dp) hace que la casilla de entrada ocupe el ancho de pantalla y mejora el rendimiento del diseño, ya que el uso de "wrap_content" como ancho exige que el sistema calcule un ancho, lo cual a la larga es irrelevante porque el valor de peso requiere otro cálculo de ancho para completar el espacio restante.
  • android:hint :Esta es una string predeterminada para mostrar cuando el campo de texto esté vacío. En lugar de usar una string codificada como valor, el valor "@string/edit_message" hace referencia a un recurso de string definido en un archivo separado. Debido a que esto hace referencia a un recurso concreto (no simplemente un identificador), no necesita el signo más. Sin embargo, debido a que aún no se ha  identificado el recurso de string, aparecera  un error del compilador. Este recurso de string tiene el mismo nombre que el ID del elemento: edit_message. Sin embargo, las referencias a los recursos siempre tienen ámbitos por tipo de recurso (como id o string); por lo tanto, usar el mismo nombre no genera conflictos.

 

Agregar recursos

De manera predeterminada, en un proyecto de Android se incluye un archivo de recursos en string en  un  fichero  llamado    strings.xml ( res > values > strings.xml) .

Parar, agregar  strings nuevas al fichero strings.xml siga los siguientes pasos.

  1. Desde la ventana Project, abra res > values > strings.xml.
  2. Agregue dos strings de modo que el archivo se vea de esta forma:
    <?xml version="1.0" encoding="utf-8"?>
    <resources>
        <string name="app_name">My First App</string>
        <string name="edit_message">Introduzca un mensaje</string>
        <string name="button_send">Enviar</string>
    </resources>

Para el texto en la interfaz de usuario, siempre especifique cada string como un recurso. Los recursos de strings de texto  permiten administrar todos los textos de IU en una sola ubicación, lo que hace que sea mucho  más fácil encontrar y actualizar el texto.

Externalizar las strings también  permite localizar su aplicacion ara diferentes idiomas al proporcionar definiciones alternativas para cada recurso de string.

 

Agregar un botón

Vuelva al archivo activity_main.xml y agregue un botón después del widget <EditText>.

El archivo debería tener el siguiente aspecto:

      
  <Button
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          android:text="@string/button_send" />

Como vemos este botón no necesita el atributo android:id porque no se hará referencia a él desde el código de la actividad.

Actualmente, la configuración del diseño hace que los widgets EditText y Button tengan el tamaño necesario para ajustarse a su contenido, como se muestra a continuación

Esto funciona bien para el botón, pero no tan bien para el campo de texto porque el usuario podría escribir algo más largo. Sería bueno rellenar el ancho de la pantalla excedente con el campo de texto. Puedes hacerlo dentro de un LinearLayout con la propiedad de peso, que puedes especificar usando el atributo android:layout_weight.

El valor weight es un número que especifica la cantidad del espacio restante que cada vista debería consumir, relativo a la cantidad consumida por vistas del mismo nivel. Esto funciona como la cantidad de ingredientes en una receta de una bebida: “2 partes de refresco, 1 parte de sirope” significa que dos tercios de la bebida son de refresco. Por ejemplo, si le das a una vista un valor de weight de 2 y a otra un valor de weight de 1, la suma es 3, de manera que la primera vista completa 2/3 del espacio restante y la segunda vista completa el resto. Si agregas una tercera vista y le das un valor de weight de 1, la primera vista (con un peso de 2) ahora obtiene 1/2 del espacio restante, mientras que las dos restantes obtienen 1/4.

El valor de weight predeterminado para todas las vistas es 0, de manera que si especificas cualquier valor de weight superior a 0 para solo una vista, dicha vista completa el espacio restante después de que se asigne el espacio requerido a todas las vistas.

El resultado de modificar el  fichero   activity_main.xml, deberia ofrecer el siguiente aspecto:

 

Lo siguiente es qué apariencia debería tener el archivo de diseño activity_main.xml completo:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
   xmlns:tools="http://schemas.android.com/tools"
   android:orientation="horizontal"
   android:layout_width="match_parent"
   android:layout_height="match_parent">
    <EditText android:id="@+id/edit_message"
        android:layout_weight="1"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:hint="@string/edit_message" />
    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/button_send" />
</LinearLayout>


Dar funcionalidad al  botón

Una vez hemos definido el botón  tenemos asignarle una funcionalidad, para lo cual podemos seguir los siguientes pasos:

  1. En el archivo res > layout > activity_main.xml, agrega el atributo android:onClick al elemento <Button>, como se muestra a continuación:
    <Button
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          android:text="@string/button_send"
          android:onClick="sendMessage" />
        

    Este atributo indica al sistema que llame al método sendMessage() de tu actividad cuando un usuario haga clic en el botón.

  2. En el archivo java > com.example.myfirstapp > MainActivity.java, agregar el código auxiliar del método sendMessage() como se muestra a continuación:
    public class MainActivity extends AppCompatActivity {
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
        }
    
        /** Called when the user clicks the Send button */
        public void sendMessage(View view) {
            // Do something in response to button
        }
    }

    Para que el sistema haga coincidir este método con el nombre del método proporcionado a android:onClick, la firma debe ser exactamente como se muestra. Específicamente, el método debe:

    • Ser público
    • Tener un valor de retorno vacío
    • Tener un objeto View como el único parámetro (esto será el View al que se le hizo clic)

Luego, completarás este método para leer el contenido del campo de texto y entregar dicho texto a otra actividad.

Crear una intent

Un Intent es un objeto que proporciona enlace de tiempo de ejecución entre componentes separados (como dos actividades) representando la “intención de hacer algo” de una app.

En el fichero MainActivity.java, agregue el código que aparece a continuación para sendMessage():

public class MainActivity extends AppCompatActivity {
    public final static String EXTRA_MESSAGE = "com.example.myfirstapp.MESSAGE";
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    /** Called when the user clicks the Send button */
    public void sendMessage(View view) {
        Intent intent = new Intent(this, DisplayMessageActivity.class);
        EditText editText = (EditText) findViewById(R.id.edit_message);
        String message = editText.getText().toString();
        intent.putExtra(EXTRA_MESSAGE, message);
        startActivity(intent);
    }
}

Android Studio mostrará errores Cannot resolve symbol porque este código hace referencia a clases que no están importadas. Puede resolver algunos de estos errores con la funcionalidad de “importación de clase” de Android Studio presionando Alt + Intro (u Opción + Regresar en Mac).

Sus importados deben terminar de la siguiente forma:

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;

En sendMessage() tienen lugar muchísimos procesos. Por ello, explicaremos lo que sucede.

El constructor de Intent toma dos parámetros:

  • Un Context como su primer parámetro (se usa this porque la clase Activity es una subclase de Context)
  • La Class del componente de la app a la cual el sistema debe entregar la Intent (en este caso, la actividad que debería iniciarse).

    Nota: La referencia a DisplayMessageActivity emitirá un error en Android Studio porque la clase aún no existe. Ignora el error por ahora; pronto crearás la clase.

El método putExtra() agrega el valor de EditText a la intent. Una Intent puede llevar tipos de datos como pares clave-valor denominados extra. La clave es una EXTRA_MESSAGE constante pública porque la actividad siguiente usa la clave para devolver el valor de texto. Es bueno definir claves para los campos extra de intents usando el nombre del paquete de tu app como prefijo. Esto garantiza que las claves sean únicas, en caso de que tu app interactúe con otras apps.

El método startActivity() inicia una instancia del DisplayMessageActivity especificado por la Intent. Ahora debes crear la clase.

Crear la segunda actividad

  1. En la ventana Project, haz clic con el botón secundario en la carpeta app y selecciona New > Activity > Empty Activity.
  2. En la ventana Configure Activity, ingresa “DisplayMessageActivity” en Activity Name y haz clic en Finish

Android Studio automáticamente realiza tres acciones:

  • Crea el DisplayMessageActivity.java de la clase con una implementación del método onCreate() obligatorio.
  • Crea el archivo de diseño activity_display_message.xml correspondiente.
  • Agrega el elemento <activity> obligatorio en AndroidManifest.xml.

Si ejecutas la app y haces clic en el botón Send en la primera actividad, la segunda actividad se iniciará, pero estará vacía. Esto sucede porque la segunda actividad usa el diseño predeterminado vacío proporcionado por la plantilla.

Mostrar el mensaje

A continuación puede, modificar la segunda actividad para que muestre el mensaje que pasó la primera.

  1. En DisplayMessageActivity.java, agregue el siguiente código al método onCreate():
    @Override
    protected void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.activity_display_message);
    
       Intent intent = getIntent();
       String message = intent.getStringExtra(MainActivity.EXTRA_MESSAGE);
       TextView textView = new TextView(this);
       textView.setTextSize(40);
       textView.setText(message);
    
       ViewGroup layout = (ViewGroup) findViewById(R.id.activity_display_message);
       layout.addView(textView);
    }
  2. Presione Alt + Intro (u Opción + Regresar en Mac) para importar las clases faltantes. Los importados deben tener la siguiente terminación:
    import android.content.Intent;
    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    import android.view.ViewGroup;
    import android.widget.TextView;

Tienen lugar muchísimos procesos. Veamos la explicación:

  1. La llamada getIntent() captura la intent que inició la actividad. Toda Activity se invoca a través de una Intent, independientemente de cómo el usuario navegue hasta el punto en cuestión. La llamada getStringExtra() muestra los datos de la primera actividad.
  2. De manera programática, se crea un elemento TextView y se establece el tamaño y mensaje de este.
  3. Se agrega el elemento TextView al diseño identificado por R.id.activity_display_message. Se transmite el diseño a ViewGroup porque es la superclase de todos los diseños y contiene el método addView().

Nota: Es posible que el diseño XML generado por versiones anteriores de Android Studio no incluya el atributo android:id. La llamada findViewById() fallará si el diseño no tiene el atributo android:id. En este caso, abra el fichero  activity_display_message.xml y agregue el atributoandroid:id="@+id/activity_display_message" al elemento de diseño.

Ejecucion de  la app

Para ver el aspecto que ahora tendrá su  app en tu dispositivo, haga clic en Run en la barra de herramientas .

Cuando se abra, escriba un mensaje en el campo de texto y haga clic en Send. La segunda actividad reemplaza a la primera en la pantalla, con lo cual se mostrara el mensaje que ingresoe en la primera actividad.

Eso es todo. ¡Ha creado una  nueva app de Android!

 

Mas información en  developer.android.com

Error:(23, 17) Failed to resolve: junit:junit:4.12 en Android Studio


Este problema como vamos a ver, no se resuelve desinstalando  y volviendo a instalar Android Studio

El error   completo  ocurre cuando intentamos probar cualquier proyecto  ( incluso vacío ) ,   apareciendo el mensaje  Error:216 Failed to resolve: junit:junit:4.12

 

error

 

A continuación citamos los pasos para solucionar el problema:

  • Cerrar Android Studio
  • Descargar  el paquete junixfixerfile.zip   que contendrá  la librería junit-4.12.jar ,por ejemplo a partir de este enlace contrastado http://www.mediafire.com/file/413j0qfiixb4tda/junitfixerfile.zip
  • Descomprimir  el fichero con el winrar , seleccionando  la ruta    de las librerías de la aplicación  ,por  ejemplo  en la ruta  C:\Users\xxxxxxxxx\AndroidStudioProjects\MyApplication\app\libs (donde  xxxxx es su usuario logado en windows)

androidstudio1

 

 

 

 

 

 

 

 

 

 

 

 

 

  • Ahora ya puede abrir Android Estudio, volver a cargar su proyecto e intentar ejecutar su proyecto pues no debería dar ningún error

 

En caso de que seguidos los pasos anteriores persista el error , debería eliminar la  inferencia a la librería  Junit antigua  y colocar en su lugar la nueva librería.

Esto se hace pulsando  en File–>Proyect Structure.

Aquí , nos iremos a nuestra app( Modules–>App) y seleccionaremos Dependencies

 

Deependencias

Aquí deberíamos posicionarnos sobre la libreria junit  y darle el botón – (Remove)

Acto seguido daremos a añadir con el botón + ( a la derecha), seleccionaremos Libraries Deependencies –>Files dependencies   y nos  iremos a la ruta donde la nueva almacenamos  la nueva librería ( C:\Users\xxxxxxxxx\AndroidStudioProjects\MyApplication\app\libs)

Finalmente le damos a “Compile”  y  ya debería poderse ejecutar sin problemas sin volver a dar el error

Gradle sync failed: CreateProcess failed, error=216 con Android Studio


Para todos aquellos que se inician en el desarrollo de aplicaciones  para Android, es importante tener claro que entorno de desarrollo es el mejor y más completo para empezar con la primera aplicación, pues ese primer proyecto quizás  un buen día, pueda convertirse en una app de uso masivo y por lo tanto, reportar beneficios económicos.

Al principio  había desarrolladores  que usaban NetBeans , pero poco  después todas  la comunidad se paso programar  con  Eclipse   hasta  que salió a la luz Android Studio, que o todo apunta a que será el entorno que use todo el mundo pues en poco tiempo será lo único que el equipo de Android recomiende.

Está basado en IntelliJ IDEA, uno de los IDE para java de primer nivel (entre los mejores, con Eclipse, netbeans)

Ademas  soporta un  nueva forma de construir los apk. Más serio, mas versátil, mas potente, mas actual, y mas parecido a un proyecto en java.

En este post vamos a intentar solucionar un  típico  problema cuando empezamos a  desarrollar con  Android Studio  en equipos no muy modernos.

Este problema como vamos a ver, no se resuelve reinstalando   Android Studio

El error   completo  ocurre cuando intentamos probar cualquier proyecto  ( incluso vacío ) ,   apareciendo el mensaje “Gradle sync failed: CreateProcess failed, error=216 Consult IDE log for more details (Help | Show Log)”

Este es  un ejemplo:

error

 

El error  216  , que en ocasiones no es mostrado completo corresponde a este descriptivo “This version of %1 is not compatible with the version of Windows you’re running. Check your computer’s system information and then contact the software publisher

Esto sucede porque se incluye la versión de  64bit del JRE con Android Studio para Windows, lo cual  produce errores en sistemas de 32 bits.

La solución al problema pasa por dos pasos:

 

  • No utilice el JDK incorporado: vaya al cuadro de diálogo Archivo -> Estructura del proyecto, desmarque “Usar JDK incrustado” y seleccione el JRE de 32 bits que tenga instalado por separado en su sistema . Al menos debería ser  JDK8  o superior  .

 

android_studio

 

 

  • Disminuya la huella de memoria para Gradle en gradle.properties (Propiedades del proyecto), por ejemplo, establezca en -Xmx768m ( tendrá por defecto -Xmx1024m).Es decir debería quedar así:
org.gradle.jvmargs= -Xmx768m