Cómo crear una aplicación móvil en 2 minutos


 

Una forma muy rápida de empezar a desarollar apps móviles en la nube es usando el software del Mit llamado App Inventor, plataforma que  liberó Google al MIT para usarlo en educación y cualquier uso en general ( actualmente salió de la beta publica y ahora va por la versión 2)

Con App Inventor puede tener su primera aplicación sencilla en funcionamiento en 2 minutos  o menos como se puede ver en el vídeo anterior, aunque esto no debe ser obstaculo para  poder programar aplicaciones más complejas en mucho menos tiempo que con los lenguajes más tradicionales, basados ​​en texto

Una de las características de esta plataforma es que se desarrolla en la nube si necesidad de tener nada instalado en nuestro ordenador pues toda la herramienta se maneja desde un navegador de modo que con nuestra cuenta ge google para app inventor es fácil seguir desarrollando desde otro equipo siempre que se tenga conexión a la red. Sólo se aconseja que se cuente con un móvil conectado la misma red para probar el sw que desarrollamos, aunque en su defecto se puede usar un emulador.

Inicialmente fue desarrollado por el profesor Hal Abelson (profesor de MIT)  y un equipo de Google Educación ,pero   actualmente  App Inventor se ejecuta como un servicio Web administrado por personal del Centro del MIT para el aprendizaje móvil – una colaboración de MIT de Ciencia Computacional e Inteligencia Artificial de laboratorio (CSAIL) y el Laboratorio de Medios del MIT.

La aplicación se puso a disposición del público el 12 de julio de 2010 y está dirigida a personas que no están familiarizadas con la programación informática. En la creación de App Inventor, Google se basó en investigaciones previas significativas en informática educativa.

El editor de bloques de la aplicación utiliza la librería Open Blocks de Java para crear un lenguaje visual a partir de bloques. Estas librerías están distribuidas por Massachusetts Institute of Technology ( MIT ) bajo su licencia libre (MIT License). El compilador que traduce el lenguaje visual de los bloques para la aplicación en Android utiliza Kawa como lenguaje de programación, distribuido como parte del sistema operativo GNU de la Free Software Foundation

Personalmente   lo estoy usando con bastante éxito , aunque al final cuando quiere hacer algo mas sofisticado, también es complejo a pesar de su aparente simplicidad basado en piezas de puzzles

En este  blog  se ha tratado  en numerosas ocasiones cómo programar con esta herramienta , sobre todo para a aquellas personas  que pretenden empezar con esta interesantisima plataforma y no saben por donde empezar.

Estos son  todos los temas que se han tratado  en este blog en relación con  la herramienta:

1-Instalación

2-Empezando con bloques

3-Uso avanzado

4-Ejemplo interactuando con Arduino

5-Obtener ingresos en sus aplicaciones hechas con MIT App Inventor 2

 

MIT App Inventor es compatible con una comunidad mundial de casi dos millones de usuarios que representan a 195 países en todo el mundo. Más de 85 mil usuarios semanales activas de la herramienta han construido más de 4,7 millones de aplicaciones de Android. Una herramienta de código abierto que pretende realizar la programación y la creación de aplicaciones accesibles a una amplia gama de audiencias

 

Sitio web oficial

Más información en

http://web.archive.org/web/http://sites.google.com/site/appinventorhelp/

http://googleblog.blogspot.com/2010/07/app-inventor-for-android.html

Anuncios

Obtener ingresos en sus aplicaciones hechas con MIT App Inventor 2


Si ha llegado hasta aquí , probablemente usted ya tenga una aplicación hecha  con Mit App Inventor 2  y quizás después de tanto esfuerzo se  esté cuestionando vías posibles de monetizar el esfuerzo invertido en esta

Hay  dos  grandes  posibilidades :

Monetizar directamente via Google Play

Esta es la forma más simple y sencilla  y consiste en poner un precio a la aplicación cuando lo baje en Google Play

En esa sección puede ponerle un precio a su app o distribuirla gratuitamente además de seleccionar en que países se va a distribuir y operadoras. Hay que tener en cuenta que una app definida como gratuita desde un inicio nunca podrá ser de pago, en cambio, una app con precio pre-establecido puede cambiar de valor en todo momento e incluso segmentar precios por países. Si la aplicación es de pago Google se lleva el 30% de lo recaudado.

Paises

Una vez hemos rellenado todos los campos y subido el archivo .apk solo nos queda aceptar las directrices para el contenido y las leyes de exportación de EE.UU. Toda la información esta en los enlaces de color azul.

Si no queremos que promocionen nuestra app fuera de Google Play seleccionamos la casilla “Excluir Marketing”.

Consentimiento

Una vez hayamos rellenado toda la información mínima necesaria veremos tres verificaciones en las secciones: APK, Entrada en la Play Store y Precio y distribución.

En la parte derecha de la pantalla seleccione el menu desplegable “Lista para publicarse” y haga clic en “Publicar esta aplicación”.

Publicación listaCaptura de pantalla 2013-08-09 a la(s) 13.31.19

Monetizar con publicidad incrustada dentro de la propia aplicación

Quizás   ponerle precio a una aplicación  no sea muy interesante puesto que los ingresos vendrían exclusivamente por las descargas  una sóla vez  y   no es siempre fácil  conseguir que los usuarios paguen por una aplicación, pues  ya sabemos que la tendencia es que no éstas tengan ningún coste.

Hay  vías de conseguir ingresos todavía si su aplicación ha decidido que sea gratuita gracias a la inclusión de publicidad

Hay básicamente tres  vías de obtener ingresos en su aplicación  construida  con Mit App Inventor:

 

 1-Monetizar con Mobpartner.

Para poder acceder a esta vía  , es obligatorio subir previamente  la app creada con App Inventor a google play sin publicidad, y por supuesto  tenerla publicada para poder agregarle MobPartner.

Para acceder al  programa, primero debe  crearse una cuenta en MobPartner:

  1. Después nos validamos en la web de MobPartnerr ,iremos a  nuestro panel de control, e iremos a crear nuestro anuncio para nuestra App. Para ello pulsamos en la pestaña Sites & Apps y después en Add a new service y rellenamos el formulario con los enlaces de nuestra App.
  2. Buscaremos una campaña para nuestra aplicación en la pestaña  Campaigns y seleccionaremos  la campaña que queramos.
  3. Una vez que tengamos la campaña pulsamos en  html code y tendremos un código en html muy sencillo :href =”http://c.mobpartner.mobi/?pool=19413″> (<!–losculos de los anuncios–><img src=”http://r.mobpartner.mobi/?pool=19413&#8243; alt=”click here”/>(<!– banner que aparece en la aplicación–>)</a> 
  4. Ahora nos vamos a Mit App Inventor2 en nuestra app para agregar tres componentes: un botón,un activityStarter y un reloj ( así como la lógica asociada)
  5. Para los anuncios añdimos  un botón (en el ejemplo se llama button_ads)al que asociaremos una llamada a ActivityStarter_ads_page.StartActivity

    boton1

  6. Añadimos  tambien un ActivityStarter con la Acción: android.intent.action.VIEW y DataURI http://c.mobpartner.mobi/?pool=19413 ( obviamente, con el número de ID de su anuncio)                           .activity_starter

  7. Por último añadimos un objeto timer, con las propeiedades del  temporizador con TimerAlwaysFires controladas, TimerEnable marcada y TimerIntervall por ejemplo 15.000 (15 segundos, es suficiente ,no la coloque en 5 segundos, porque cada vez que el cambio de bandera en la aplicación hay un desfase) asociando ademas esta lógica:timer

Por ultimo compilaremos nuestra nueva aplicación en App Inventor , veremos que todo funciona como esperábamos y volveremos a publicar la aplicación esta vez con el nuevo formato con pubicidad.

2 Agregar Admob a su aplicación creada con App Inventor.

No han añadido por desgracia aún el componente de Admob  en Mit App Inventor 2, aunque hay una posibilidad de hacerlo  en modo local instalando un software llamado AiLiveComplete! la versión antigua de App Inventor (versión 1 ) en  local customizada con ese componente   ( el software esta  aqui en sourceForge)

Hay otra posibilidad  de monetizar su app creada con app inventor que tiene un coste de una donación la cual será de 25€ para la primera Aplicación y de 10€ para las posteriores::

 

  1. Entrar en la página oficial de Admob y crearse una cuenta.
  2. Una vez creada  vamos a la pestaña sitios y aplicaciones y pulsamos en agregar sitios/aplicaciones y seleccionamos Android.
  3. Rellenamos el cuestionario.
  4. Una vez aceptada, nos aparecerá abajo.
  5. Colocamos el ratón sobre el nombre de la App y pulsamos sobre gestionar aplicación y os aparecerá algo como esto:
    URL de sitio: market://details?id=appinventor.ai_flissby.HorariostranviadeVelez&feature=search_result
    ID de editor: a14e158798b2567 (Copiamos el id de editor)
  6. Una vez hecho esto tendrán que pasarnos su código fuente de la App y el id que han copiado.Nosotros nos encargaremos de agregar admob a su aplicación y devolveros el .apk ya con Admob.(está deberán confiar en nosotros al pasarnos su código.

 

 

 

 

3-Agregar el sistema de anuncios de Leadbolt a su aplicación creada con App inventor con unos sencillos pasos.

 

Para empezar , primero hay que registrarse  en Leadbolt  . Una vez registrado tiene que agregar su App.

  1. Pulse en create new App
  1. Rellene los datos: Nombre de App, plataforma en nuestro caso Android, etc..
  2. Para activarla pulse Set Active y rellene los datos de nuevo.
  3. Al rato le enviarán un correo confirmando su App.
  4. Una vez creada y activada pulse Add Ad
  5. Pica en la ventana Html Ads
  6. Pulse sobre App Wall
  7. Escoja una de las dos plantillas
  8. Dele un nombre y en la pestaña Appearance puedes configurar el diseño, colores y demás, una vez configurado pulse sobre add now.
  9. Copie la url que le dan que es la que tendremos que darle como home url al webviewer.
  10. En App inventor tenemos que añadir dos  timers, un elemento web y un elemento activitystarter: Publicidad en App inventor
  11. El webviewer tiene puesto en homeURL “file:///mnt/sdcard/AppInventor/assets/banner2.html” que es la url que utilizaremos para pruebas en el emulador.   Una vez instale la app en el móvil tendrá que cambiarla por esta otra: “file:///android_asset/banner2.html” sino no aparecerá la publicidad.
  12. Por ultimo el diseño de los bloques sería el siguiente:
Publicidad en App Inventor

 

 

Fuente aqui

App Inventor para Android: Servicio WebDB Tiny


En este post vamos a tratar el servicio Web de demostración  WEBDV TINY , el cual está diseñado para trabajar con App Inventor para Android y el componente TinyWebDB. El sitio está diseñado para su uso por las aplicaciones que se ejecutan en  un terminal Android a través de las solicitudes JSON.

 

También puede invocar las operaciones get y almacenar a mano de esta página web para probar la API, así como borrar las entradas individuales.

Este servicio es por tanto  sólo una demo de modo que la base de datos almacenará en la mayoría de las 250 entradas; añadiendo entradas más allá de eso hará que las entradas más antiguas se borren. Además, los valores de datos individuales se limitan a en la mayoría de 500 caracteres.

El código fuente de este servicio, diseñado para funcionar con Google App Engine, se incluye en la documentación de la aplicación Inventor.

Usted puede utilizar esta aplicación como un modelo para la implementación de sus propios servicios, con mayor capacidad y funciones adicionales, y crear aplicaciones que utilizan el componente TinyWebDB hablar con su servicio.

Llamadas disponibles:

  • / Storeavalue : Almacena un valor, dada una etiqueta y un valor a almacenar

api

 

  • / Getvalor : Recupera el valor almacenado en una etiqueta determinada. Devuelve la cadena vacía si no hay valor se almacena

api2

 

 

NOTA: Estos servicios dependen de sus creadores  que  pueden modificarlo, por lo que podrian desconectarse sin previo aviso

Fuente aqui

Crear un API para usar con App Inventor


TinyWebDB es un componente App Inventor que le permite acceder a la web desde una aplicación para Android. Usted puede utilizar TinyWebDB para acceder a una fuente de datos (API) o para almacenar los datos de la aplicación de forma persistente en una base de datos web. Estas notas le indican cómo hacer lo primero a crear un-Inventor compatible App API que devuelve los datos a una aplicación App Inventor. A menudo, el servicio se escribe para usarlo como un proxy y llamar a algún otro servicio de datos existente (por ejemplo, Twitter, Amazon, Yahoo Finance).

Aunque puede crear un Inventor-compatible-App API en muchos lenguajes y entornos, estas instrucciones que a continuacion se describe, son sobre  una API escrita en Python  utilizando el servicio de cloud computing libre App Engine de Google. Tambien seria factible  hacerlo en Java / App Engine, PHP

Para seguir estas instrucciones, usted tendrá que tener algunos conocimientos de programación y estar familiarizado con Python y servicios web (API).

Sneak Peak

Vas a descargar un código de ejemplo a continuación. Su poco de código HTML y Python que se puede implementar en la nube de Google usando App Engine. Sin embargo, para mostrar lo fácil que es crear una API App Inventor-conforme, vamos a echar un vistazo al código que usted realmente tiene que mirar y cambiar. La parte adaptable está en el main.py archivo y específicamente en la función GetValueHandler.get_value:

def get_Value (auto, etiqueta):

value = “hola” + tag
value = “\” “+ valor +” \ “”

si self.request.get (‘fmt’) == “html”:

WriteToWeb (auto, etiqueta, valor)

más:

WriteToPhone (auto, etiqueta, valor)

Para crear su propio servicio, usted simplemente cambie las líneas enfatizadas con cualquier código que te gustaría. Tal vez llamar a otro servicio web y retransmitir los datos a la aplicación. Tal vez usted va a realizar algunos cálculos. Usted puede hacer cualquier cosa, con la única limitación de que establece el “valor” variable a una cadena o una lista. Los datos que usted deposita en “valor” se envía a la aplicación que solicita a una solicitud TinyWebDB.GetValue.

Tenga en cuenta que la línea críptica debajo de la que va a cambiar:

value = “\” “+ valor +” \ “”

simplemente pone entre comillas el valor. Esto es necesario cuando se devuelva una cadena como valor y que la cadena cuenta con más de una palabra. Si devuelve una lista, que no es necesario añadir comillas, aunque puede que tenga que añadir alrededor de cada cadena en la lista.

App Inventor Protocolo TinyWebDB

TinyWebDB proporciona dos funciones clave: StoreValue (etiqueta, valor) y GetValue (tag) que permiten una aplicación para almacenar y recuperar los pares de etiquetas de valor. Para responder a la solicitud de la aplicación, una-Inventor compatible App servicio debe manejar peticiones POST como se define a continuación:

TinyWebDB Cliente Call Solicitud API
StoreValue (etiqueta, valor) store_value (etiqueta, valor)
GetValue (tag) obtiene_valor (tag)

Si la API no está proporcionando un almacenamiento de base de datos, y que acaban de volver de datos, basta con responder a get_Value (etiqueta) las solicitudes, como en el pico del chivato arriba.

Hola Tag ejemplo de la API

Puede descargar el API Tag Hola aquí

Este código de ejemplo es una versión básica de un servicio Web de App-Inventor-Compliant. Responde a get_Value (etiqueta) peticiones con “tag hola”. La muestra:

  • Proporciona tanto una página web y la interfaz API. Puede probar el servicio con la interfaz de la página web. Tu App Inventor App hablará con la interfaz API.
  • Implementa sólo la operación GetValue, no el StoreValue. No debe llamar StoreValue de su aplicación, si usted está utilizando este servicio.

Cuando se descarga la muestra, podrá ver que tiene los siguientes archivos:

  • main.py – El código del controlador de Python, esta es la carne de la API.
  • index.html – La plantilla de la página web para la interfaz web de la API.
  • app.yaml archivo config App Engine
Una vez que haya agregado el código personalizado, puede probar y desplegar el servicio siguiendo estas instrucciones:
  • Si no lo tiene, descárgue  App Engine para Python enhttp://code.google.com/appengine/ . Después de instalarlo, ejecute el GoogleAppEngineLauncher haciendo clic en su icono.
  • En el GoogleAppEngineLauncher, seleccione Archivo | Agregar aplicación existente. Vaya a establecer la ruta a la carpeta con tus code.Then haga clic en el botón Ejecutar. Esto lanzará un servicio web de prueba que se ejecuta en el equipo local.
  • Puede probar el servicio abriendo un navegador y entrar en “localhost: 8080” como la dirección URL. Verá la interfaz de la página web para su servicio web.El objetivo final de este servicio es para comunicarse con una aplicación móvil creada con App Inventor. Pero el servicio proporciona una interfaz de página Web para el servicio para ayudar a los programadores con la depuración. Puede invocar las operaciones get y tiendas a mano, ver las entradas existentes, así como eliminar las entradas individuales
  • Su aplicación no está aún en la web, y por lo tanto aún no puede acceder a una aplicación App Inventor. Para llegar allí, tienes que subirlo a los servidores de Google App Engine.
  • En el GoogleAppEngineLauncher, seleccione Panel. Ingresa tu información de cuenta de Google y usted será llevado a un panel de control de App Engine.
  • Elija Crear una aplicación. Tendrá que especificar una aplicación identificador único global. Recuerde que el identificador de aplicación, ya que lo necesitará más adelante. Proporcione un nombre a tu aplicación y haga clic en Crear solicitud a presentar. Si el identificador es único, ahora tiene una nueva aplicación, vacía en los servidores de Google.
  • Abra un editor de texto del equipo local y abrir la app.yaml archivo dentro de la carpeta del proyecto. Modifique la primera línea para que la aplicación coincide con el identificador de la aplicación se establece en Google.
  • En GoogleAppEngineLauncher, seleccione Desplegar y siga los pasos para implementar su aplicación.
  • Prueba para ver si su aplicación se está ejecutando en la web. En un explorador, introduzca myapp.appspot.com, sólo sustituir el identificador de la aplicación de “frontend”. La aplicación debe ser la misma que cuando se ejecutó en el servidor de prueba local. Sólo que ahora, está en la web y se puede acceder a él desde su App Inventor para aplicación Android.

Aplicaciones App Inventor Cliente

Una vez que usted tiene una “-App Inventor-compliant” servicio web, puede crear aplicaciones Inventor de la aplicación que accedan al mismo. Para la muestra que acaba de crear, haga lo siguiente:

  • Arrastre en un componente TinyWebDB en el Diseñador de componentes.
  • Modifique la propiedad ServiceURL del predeterminado (http://appinvtinywebdb.appspot.com/ ) a la URL de su servicio.
  • En el editor de bloques, llame TinyWebDB.getValue con una adecuada llave de su servicio.

Así es como los bloques buscan una llamada a la API de la muestra:

La aplicación recibe la entrada del usuario desde TagTextBox y lo envía como la etiqueta en la llamada GetValue del TinyWebDB. Esto desencadena una solicitud obtiene_valor API. El API devuelve el valor (hola: tag) en el teléfono. Cuando llegan los datos, el evento TinyWebDB.GotValue se dispara y la aplicación sólo muestra el valor en el valueLabel.

 

Fuente aqui

App Inventor y las API


En este pot, vamos a echar un vistazo más amplio a las aplicaciones que la información del origen de la Web.Vamos a empezar por la creación de una aplicación que le pide a un sitio web para generar un gráfico de barras (imagen) de las puntuaciones de un jugador del juego de la pantalla. Luego hablaremos de cómo TinyWebDB se puede utilizar para acceder a cualquier tipo de datos (no sólo imágenes) desde la Web, y le proporcionaremos una muestra que tiene acceso a los datos del stock de Yahoo! Finanzas. Por último, vamos a discutir cómo se puede crear sus propias fuentes de información web que pueden ser utilizados por la aplicación Inventor apps.

 

La web y el mundo de los móviles hay diferentes: sitios web y aplicaciones de contenido el remix de varias fuentes de datos, y la mayoría de los sitios están diseñados con la interoperabilidad en mente. Un ejemplo ilustrativo de un mashup web es Housing Maps ( http://www.housingmaps.com ), en la foto , que toma información de alquiler de apartamentos de Craigslist ( http://www.craigslist.org ) y los trata  con la API de Google Maps.

 

Mashups como Housing Maps son posibles porque los servicios como Google Maps proporcionan tanto un sitio web y una correspondiente API de servicios web . Nosotros, los humanos visitamos http://maps. google.com / en un navegador, pero aplicaciones como Mapas Viviendas comunicamos máquina a máquina con la API de Google Maps. Mashups procesan los datos, se combinan con los datos de otros sitios (por ejemplo, Craigslist), y luego lo presentan de maneras nuevas e interesantes.

Casi todos los sitios web popular ahora ofrece esta alternativa, el acceso de máquina a máquina. El programa proporciona los datos se denomina un servicio web y el protocolo de cómo un cliente de aplicación debe comunicarse con el servicio se denomina interfaz de programación de aplicaciones o API. En la práctica, el término API se utiliza para hacer referencia al servicio web también.

El servicio Web de Amazon (AWS) fue uno de los primeros servicios de Internet, como Amazon se dio cuenta de que la apertura de sus datos para su uso por parte de entidades de terceros eventualmente conducir a más libros a la venta.Cuando Facebook lanzó su API en el 2007, muchas personas alzaron sus cejas. Datos de Facebook no es el libro de los anuncios, por lo que ¿por qué debería dejar que otras aplicaciones “robar” los datos y potencialmente atraer a muchos usuarios fuera del sitio de Facebook (y su publicidad!). Pero su apertura condujo Facebook para convertirse en una plataforma en lugar de sólo un sitio-lo que significa que otros programas, como FarmVille, podrían aprovechar y explotar Facebook de funcionalidad-y ​​nadie puede discutir con su éxito en la actualidad. En el momento en Twitter puso en marcha en 2009, el acceso de la API era una expectativa, no una novedad, y Twitter actuó en consecuencia. Ahora bien, como se muestra abajo, la mayoría de los sitios web ofrecen tanto una API y una interfaz humano.

Así que la Web es una cosa que nosotros los seres humanos-un promedio de colección de sitios para visitar. Para los programadores, es la base de datos más grande y más diversa del mundo de la información. La comunicación de máquina a máquina ahora está lista para superar a la comunicación hombre-máquina en la Web!

Hablando con APIs web que generan Imágenes

Nota: La API de gráficos de Google ahora esta obsoleto. Usted todavía puede utilizarlo y este ejemplo, pero puede que no estar ahí para siempre. Sin embargo, esta muestra sigue siendo instructivo para su explicación de las URL y los parámetros

La mayoría de las API aceptan solicitudes en la forma de una URL y devolver los datos,(normalmente en formatos estándar como XML o Extensible Markup Language, y JSON, JavaScript Object Notation(para estas API, debe utilizar el TinyWebDB componente para comunicarse)

Algunas API, sin embargo, no devuelven datos; devuelven una imagen. En esta sección, vamos a discutir cómo se puede comunicar con estas API de generación de imágenes con el fin de ampliar las capacidades de la interfaz de usuario de App Inventor.

La API de gráficos de Google es un servicio de este tipo. Su aplicación puede enviar algunos datos dentro de una URL, y enviará de vuelta una carta que se puede mostrar en su aplicación. El servicio crea muchos tipos de gráficos, incluyendo gráficos de barras, gráficos circulares, mapas y diagramas de Venn. El API Chart es un gran ejemplo de un servicio web interoperables cuyo propósito es mejorar las capacidades de los otros sitios. Desde App Inventor no ofrece mucho en términos de componentes de visualización, la posibilidad de aprovechar un servicio como el API gráfico es crucial.

Lo primero que debe hacer es entender el formato de la URL debe enviar a la API. Si usted va al sitio del API Gráfico de Google ( http://code.google.com/apis/ ), podrás ver la información general se muestra mas abajo.

 

El sitio incluye una documentación completa y un asistente para crear gráficos de forma interactiva y explorar cómo construir las URLs. El asistente es especialmente útil, ya que se puede utilizar un formulario para especificar el tipo de gráfico que desee y luego examinar la dirección URL que genera el asistente de ingeniería inversa lo que usted desea enviarlo a sus datos específicos.

Seguir adelante y jugar con el sitio web y el asistente y crear algunas cartas, y luego echar un vistazo a los detalles de las direcciones URL utilizadas para construirlas.

Por ejemplo, si se introduce la dirección URL siguiente en un navegador:

http://chart.apis.google.com/chart?cht=bvg&chxt=y&chbh=a&chs=300×225&chco=A2C180&chtt=Vertical+bar+chart&chd=t:10,50,60,80,40,60,30

obtendrá el gráfico que se muestra a continuacion.

 

Para entender la URL bastante complicado de aspecto especificada anteriormente, es necesario entender cómo funcionan las direcciones URL. En su experiencia de navegación, te habrás dado cuenta URLs con signos de interrogación (?) Y los símbolos de unión (&). El? carácter especifica que el primer parámetro de la petición de URL está llegando. El carácter y luego separa cada parámetro siguiente. Cada parámetro tiene un nombre, un signo igual y un valor. Así que la URL de ejemplo está llamando a la API gráfico ( http://chart.apis.google.com/chart ) con los parámetros indicados en la  siguiente tabla.

 

Al modificar los parámetros, puede generar varios gráficos. Para obtener más información sobre los tipos de gráficos que se pueden crear, revisar la documentación de la API en https://developers.google.com/chart/

Ajuste de la image.picture propiedad a un API Gráfico

Ahora usted sabe cómo escribir la muestra Gráfico URL de la API en un navegador web para ver la tabla que se genera. Para obtener una tabla para aparecer en una aplicación, usted tendrá que ajustar la imagen característica de una imagen componente a la misma URL. Para explorar esto, haga lo siguiente:

  1. Crear una nueva aplicación con un título de la pantalla de “Gráfico Muestra App”.
  2. Añadir una imagen componente con un ancho de “padre de relleno” y la altura de 300.
  3. Ajuste el image.picture propiedad a la URL de la muestra ( .? http://chart.apis.google com / carta cht = bvg y chxt = y & = a & chs = 300×225 y CHCO = A2C180 y CHTT = Vert ical + bar + gráfica y chd = t: 10,50, 60,80,40,60,30 ).No se puede establecer la propiedad en el Diseñador de componentes, ya que sólo le permite cargar un archivo. Pero se puede establecer en el Editor de bloques, como se muestra en la Figura 24-5, por lo que añadir unScreen.Initialize controlador de eventos y establecer el image.picture propiedad hay (tenga en cuenta que no se puede copiar y pegar en algunas máquinas, por lo que ‘ll tiene que escribir la URL completa).

 

Cuando se inicia la aplicación, se establece la imagen a un gráfico de regresar de la URL Chart API

 

Usted debe ver la imagen anterior en su teléfono o emulador.

La construcción de una URL Chart API dinámicamente

El ejemplo anterior muestra cómo se puede obtener un gráfico generado en su aplicación, sino que utiliza una dirección URL con datos fijos (10,50,60,80,40,60,30). Generalmente, usted mostrará dinámicas datos en el gráfico-es decir, los datos almacenados en las variables. Por ejemplo, en una aplicación de juego, es posible mostrar las puntuaciones anteriores del usuario, que se almacenan en una variable Partituras .

Para crear un gráfico de tal dinámica, debe construir la URL de la API para gráficos y cargar los datos variables en ella. En el URL de la muestra, los datos del gráfico se fija y se especifican en el parámetro chd ( chd representa los datos del gráfico):

chd = t: 10,50,60,80,40,60,30

Para construir su puntuación de tabla de forma dinámica, usted comenzará con la parte fija, chd = t :, y luego paso a través de la lista de puntuaciones, la concatenación de cada puntuación en el texto (junto con una coma). La imagen de abajo  muestra una solución completa.

 

Vamos a examinar los bloques más de cerca, porque hay mucho que hacer aquí, muchos de los cuales hemos cubierto en los capítulos anteriores. Para entender este tipo de código, es importante prever algunos datos reales. Así que vamos a suponer que el usuario ha jugado tres partidos en esta aplicación y que las variables Partituras tiene tres artículos: 11, 22 y 15.

Los bloquesdefinir una variable chdParam para almacenar la parte de la URL que contendrá los chd datos. La primera fila de bloques inicializa el texto de la chdParam de la lista de marcadores .

Después se llevan a cabo estos bloques, chdParam contendrá chd = t: 11 , 11 como es el primer valor de la Partituras lista.

El siguiente conjunto de bloques, que se muestra abajo, añade el resto de las puntuaciones a la chdParam .

 

Utilizamos un tiempo global en este ejemplo, en lugar de un foreach debido foreach sólo le permite hacer lo mismo a cada elemento. Aquí, queremos insertar comas antes de que el segundo elemento y todos los elementos que vienen después de ella (pero no el primero). Con tiempo , podemos poner el primer elementoy luego de bucle a partir del segundo artículo, siempre insertando una coma antes de la partida (asegúrese de no colocar un espacio después).

Un índice se utiliza para realizar un seguimiento de dónde estamos en el Partituras lista. En cada iteración, hacer el texto agrega una coma y el siguiente elemento de Partituras . Después de realizar estos bloques, el chdParamcontendrá chd = t: 11,22,15 . Hemos construido el parámetro chd dinámicamente! (Y también hemos construido de manera que si se añaden más puntos más allá de estos primeros tres, seguirá siendo el trabajo.)

Último trabajo Los bloques “es concatenar el chd parámetro con el resto de la URL Chart API, como se muestra a continuación:

 

Los bloques de establecer el ScoreChartImage.Picture propiedad a esta dirección URL completa: ? http://chart .apis.google.com / carta cht = bvg y chxt = y & CHBH = a & chs = 300×225 y CHCO = A2C180 y CHTT = Juego + Resultados & chd = t: 11,22,15 . S

Se podría añadir una pantalla como a cualquier juego o aplicación mediante la adición de bloques similares a este ejemplo. También puede hablar con otras API que generan las imágenes y llevar a los en su aplicación también. La clave es que App Inventor proporciona una conexión útil a la Web a través de la imagen de los componentes.

Hablando con las API de datos Web

Nota: App Inventor ahora tiene un componente web que facilita el acceso a los datos de las API más fácil. Puede seguir utilizando el esquema TinyWebDB se describe a continuación, pero también echa un vistazo a esta muestra que utiliza el componente Web.

La API de gráficos de Google es una API web que responde a las solicitudes de devolución de una imagen. Más comúnmente, las API devolverán datos que una aplicación puede procesar y utilizar sin embargo que quiere. El “Amazonas en la Librería” de la aplicación en el capítulo 13, por ejemplo, devuelve los datos en forma de una lista de libros, con cada libro que incluye un título, actual precio más bajo, y el ISBN.

 

Para hablar con una API desde una aplicación App Inventor, que no es necesario para construir una URL, como lo hicimos con el ejemplo Chart AP:en su lugar, se consulta la API al igual que lo haría una base de datos web  sólo enviar su solicitud como la etiqueta a la TinyWebDB.GetValue bloque. El TinyWebDB componente se encarga de generar realmente el URL que usted envía a la API.

TinyWebDB no proporciona acceso a todas las API, incluso aquellos que devuelven un formato de datos estándar como RSS. TinyWebDB sólo puede hablar con los servicios web para la que un inventor “contenedor” servicio App, con un protocolo en particular, se ha creado. Afortunadamente, algunos de estos servicios se han creado ya, y más tardará en llegar. Usted puede encontrar algunos de estos en http://appinventorapi.com .

Exploración de la interfaz web de una API

En esta sección, usted aprenderá cómo utilizar TinyWebDB para traer los datos de precios de acciones desde el Inventor compatible API App en http://yahoostocks.appspot.com . Si usted va al sitio, verá la interfaz web (humana) del servicio representado a continuación.

 

Pruebe a escribir “IBM” o algún otro símbolo de la acción en la casilla Tag. La página web devuelve información actual como una lista, con cada elemento que representa una parte diferente de la información, como se describe en la lista numérica más abajo en la página.

Tenga en cuenta que esta interfaz web no se entiende como una nueva e interesante manera de encontrar información; su único objetivo es permitir a los programadores para explorar la API para comunicarse con el servicio Web subyacente de máquina a máquina.

Acceso a la API a través de TinyWebDB

El primer paso para crear una aplicación que se comunica con el servicio web anterior es arrastrar un TinyWebDB componente en el Diseñador de componentes. Sólo hay una propiedad asociada con TinyWebDB , su ServiceURL , que se muestra abajo Por defecto, está ajustado a una base de datos web por defecto, http://appinvtinywebdb.appspot.com . Dado que queremos acceder a su lugar el Yahoo! Stocks API, establezca esta propiedad enhttp://yahoostocks.appspot.com , el mismo URL que ha introducido en la barra de direcciones del navegador antes de ver la interfaz de la página web.

 

El siguiente paso es hacer una TinyWebDB.GetValue llamada a datos de la solicitud desde el sitio. Usted puede hacer esto en respuesta al usuario entrar en un símbolo de valor y haciendo clic en el botón Enviar en la interfaz de usuario de su aplicación, o usted puede hacerlo en el Screen.Initialize evento para traer a la información sobre una acción correcta en particular cuando se abre la aplicación. En cualquier caso, cuando se llama a GetValue , debe establecer la etiqueta a un símbolo de la acción, como se ilustra abajo, tal como lo hizo en la página web http:// yahoostocks.appspot.com .

 

 

TinyWebDB  asume  una comunicación  asíncrona : su aplicación solicita los datos con TinyWebDB.GetValue y luego va sobre su negocio. Usted debe proporcionar un controlador de eventos por separado, TinyWebDB.GotValue , para programar los pasos que la aplicación debe tomar cuando los datos realmente regresa desde el servicio web. De nuestro examen de la interfaz humana de http://yahoostocks.appspot.com , nos enteramos de que los datos devueltos desde GetValue es una lista, con particulares elementos de la lista que representan diferentes datos sobre la población.

Una aplicación cliente puede utilizar algunos o todos los datos que el servicio ofrece. Por ejemplo, si sólo quería mostrar el precio actual y su cambio desde la apertura de la jornada, es posible configurar los bloques como se muestra ahora:.

 

Si marca la especificación de la API en http://yahoostocks.appspot.com , verás que el segundo elemento de la lista devuelta es de hecho el precio actual y el quinto punto es el cambio ya que las reservas comenzaron a cotizar ese día.Esta aplicación simplemente extrae los elementos de lo que es devuelto por la API, y los muestra en la etiqueta PriceLabel y ChangeLabel . La imagen  siguinte ofrece una instantánea de la aplicación en acción.

 

Creación de sus propias APIs-Compliant Inventor de la aplicación

TinyWebDB es el puente de un Inventor aplicación App para la Web. Permite que en la aplicación Inventor los programadores hablen con los servicios web con el simple protocolo de etiqueta-valor inherente al GetValue función. Usted envía una etiqueta en particular como el parámetro, así como una lista o un objeto de texto se devuelve como el valor. De esta manera, el Inventor programador App está protegido de la programación difícil requerida para analizar (comprender y extraer los datos de) formatos de datos estándar como XML o JSON.

La desventaja es que la aplicación de Inventor aplicaciones pueden hablar sólo a los servicios web que siguen el protocolo esperado por TinyWebDB  que espera que los datos se devuelvan en una forma muy específica, y la API tiene para ofrecer a sus datos en consecuencia. App Inventor no tiene un componente de acceso a un servicio web que devuelve arbitraria formatos de datos estándar, como XML o JSON. Si no hay una-Inventor compatible API App ya  disponible, una persona con la capacidad de escribir un programa web debe crearlo.

En el pasado, las API de construcción fue difícil, ya que no sólo necesita entender los protocolos de programación y web, pero también se necesitan para configurar un servidor para alojar su servicio web y una base de datos para almacenar los datos. Ahora es mucho más fácil, ya que puede aprovechar las herramientas de computación en la nube como Google App Engine y Elastic Compute Cloud de Amazon para implementar de inmediato el servicio que usted cree. Estas plataformas no sólo alojar su servicio web, pero que también va a permitir que miles de usuarios acceder a él antes de cobrar un solo centavo. Como se puede imaginar, estos sitios son una gran bendición para la innovación.

Personalización de Código Plantilla

Escribir su propio API puede parecer desalentador, pero la buena noticia es que usted no tiene que empezar de cero. Usted puede aprovechar algo de código de plantilla siempre que lo hace especialmente fácil crear APIs-Inventor de la aplicación compatible. El código está escrito en el lenguaje de programación Python y utiliza App Engine de Google. La plantilla proporciona código repetitivo para obtener los datos en la forma que las necesidades de App Inventor, y una función, obtiene_valor , que se puede personalizar.

Puede descargar el código de la plantilla y las instrucciones para implementarlo en los servidores de Google App Engine en http://appinventorapi.com/using-tinywebdb-to-talk-to-an-api/ . Usted puede notar que el enlace te lleva a la misma appinventorapi. com sitio que se puede utilizar  para crear una base de datos web a medida. La construcción de una API es similar, sólo que en lugar de simplemente almacenar y recuperar datos, se le llama a otro servicio para acceder a los datos que necesita.

Para crear su propia API web, podrás descargar la plantilla, modificar unos pocos lugares clave en el código, y luego subirlo a App Engine. En cuestión de minutos, usted tendrá su propia API que se puede llamar utilizando TinyWebDB en una App Inventor App.

Aquí está el código particular de la plantilla que tendrá que personalizar (no se preocupe por el texto que viene después del símbolo #, al igual que los comentarios en App Inventor, sólo describe lo que el código se está haciendo):


	def get_Value (auto, etiqueta):    
		# Para este ejemplo sencillo, apenas volvemos hola: tag, que se envía en la etiqueta por el cliente    
		value = "hola" + tag 
		value = "\" "+ valor +" \ ""
		# Añade comillas si el valor es tiene varias palabras    
		si self.request.get ('fmt') == "html":         
		  WriteToWeb (auto, etiqueta, valor)    
		más:         
		  WriteToPhone (auto, etiqueta, valor) 

Este código es para una función (mismo que un procedimiento en el App Inventor) llamado obtiene_valor , y es de hecho el código que se invoca cuando su aplicación llama a una API con la TinyWebDB.GetValue función. tag es unparámetro de la función y corresponde a la etiquetar envía en el GetValue llamada.

El código en negrita es la parte que va a cambiar. Por defecto, simplemente toma la etiqueta enviado con la solicitud y la envía de vuelta “hola etiqueta.” (En otras palabras, si se llama a este código con la etiqueta “joe”, devuelve “hola joe”).Lo hace mediante la variable de valor , que se envía a la WriteToWeb función si la solicitud proviene de la Web, o WriteToPhone si la solicitud proviene de un teléfono.

Nota. Incluso si nunca has mirado Python u otro código de programación, usted puede encontrar el ejemplo anterior poco legible de su experiencia con App Inventor. La línea “def obtiene_valor …” define un procedimiento, las líneas “value =” … están preparando el “valor” variable para algo, y el “si ..” declaraciones debería parecer familiar. Los conceptos fundamentales son los mismos, es sólo de texto en lugar de los bloques.

Para personalizar la plantilla, reemplace el código en negrita con cualquier cálculo que desee, siempre y cuando ese código coloca algo en la variable valor . A menudo, su API hará una llamada a otra API (esto se llama “ajuste” de una llamada, más específicamente, su obtiene_valor función hará que la llamada a otra API).

Muchas API son complicados, con cientos de funciones y los regímenes de autorización de usuario complejas. Otros, sin embargo, son bastante simples, y usted puede incluso encontrar ejemplos de código para acceder a ellos en la Web, como se verá en la siguiente sección.

Invocar  la API de Finanzas Yahoo!

El Yahoo! Stocks API para App Inventor puede  utilizarse  mediante la modificación del código de la plantilla anterior con código que se encuentra a través de una simple búsqueda en Internet. Puesto que el objetivo estaba terminando el Yahoo! Stocks API para el uso de la aplicación Inventor, el desarrollador (Wolber) hizo una búsqueda en Internet de “Stocks Python API de Yahoo”. Desde el .gummy-stuff.org/Yahoo-data.htm http://www sitio, se encontró con que una URL en el formulario :http://download.finance.yahoo.com/d/quotes.csv?f=sl1d1t1c1ohgv&e=.cs v & s = IBM

Estpo eberia devolve un archivo de texto con una sola cadena separada por comas de los datos. La URL anterior devuelve la cadena de texto:

“IBM”, 140.85 “10/15/2010”, “15:00”, -0.65,142.10,142.10,140.60,4974553

Luego encontró algo de código Python para acceder a la API de Yahoo! Acciones en http://www .goldb.org / ystockquote.html. Con un poco de corte rápido y pegar y un poco de edición, el App Inventor wrapper API fue creado mediante la modificación de la plantilla de la siguiente manera:


	def get_Value (auto, etiqueta):    
	  # Necesidad de generar una cadena o una lista y enviarla a WriteToPhone / WriteToWeb    
	  # Cuerdas varias palabras deben tener comillas delante y detrás    
	  # Por ejemplo,    
	  # Value = "\" "+ valor +" \ ""    
	  # Llamar a la API de Yahoo Finance y obtener un identificador para el archivo que se devuelve    
	  quoteFile=urllib.urlopen("http://download.finance.yahoo.com/d/quotes.csv?f=sl1d1t1c1ohgv&e=.csv&s="+tag)    
	  line = quoteFile.readline () # sólo hay una línea de    
	  splitlist = linea.split (",") # divide los datos en una lista    
	  # Los datos tiene comillas alrededor de los objetos, por lo que los elimina    
	  i = 0       
	  mientras i <len (splitlist):        
	    item = splitlist [i]        
	    splitlist [i] = item.strip ('"') # elimina" en torno a las cadenas
	    i = i 1    
	  valor = splitlist    
	  si self.request.get ('fmt') == "html":         
	    WriteToWeb (auto, etiqueta, valor)    
	  más:         
	    WriteToPhone (auto, etiqueta, valor) 

El código en negrita llama a la API de Yahoo! dentro del urllib.urlopen llamada a la función (esto es una manera de llamar a las API del lenguaje Python). La URL tiene un parámetro, f , que especifica el tipo de datos de almacenamiento que desea (este parámetro es algo así como los parámetros crípticos requeridos por el API de gráficos de Google). Los datos devueltos por Yahoo! se pone entonces en la variable de la línea . El resto del código se divide los elementos a una lista, quita las comillas alrededor de cada artículo, y envía el resultado al solicitante (ya sea la interfaz web o una aplicación Inventor App).

 

Fuente  aqui

Cómo añadir una entrada USB al equipo de audio de su automovil


Es cierto que cada vez mas automóviles integran un conector usb host al que podemos enchufar cualquier  unidad  extraible con nuestra música favorita, pero  lamentablemente no todos los automóviles “modernos”    cuentan sin excepción con este útil accesorio  ( es más: en algunos modelos se suele incluir “toma USB”   como una opción mas de equipamiento  que se debe pagar aparte)

Ante la problemática de  poder conectar una unidad usb a nuestro equipo de audio de nuestro vehiculo  , es cierto que existen reproductores mp3 con toma de usb que transmiten en FM  lo cual significa que podrá ser reproducido  a través de un “simple” autoradio.

Sin embargo a pesar de que emitir en FM el audio del reproductor MP3  procedente del USB host incorporado  hacia el equipo de audio de nuestro vehículo podría  parecer una  idea interesante,esto conlleva algunos inconvenientes:

  • Posibles Interferencias  con  emisoras de FM  de frecuencias cercanas ala de transmisor FM
  • Dificultad de encontrar frecuencias  libres en movilidad
  • Ruidos de fondo
  • Baja calidad de audio de los transmisores de FM
  • Pérdida de la memoria de un canal
  • Baja potencia de RF en transmisión

 

¿Entonces existe alguna solución sencilla para poder contar con un resproductor mp3 en el automovil por poco coste?

Pues en efecto , gracias a un sencillo truco usando  ingenieria inversa  lo podemos conseguir simplemente adquiriendo un lector de  mp3  con toma usb  que transmita en fm , modificandolo nosotros para obtener el audio directo que conectaremos a la toma de audio in que ya  casi el 99,99 % de los autoradios   tienen

Para nuestro montaje  usaremos el reproductor de MP3 de Energy System  por su relación calidad /precio  el cual puede ser adquirido por unos 10€  en portales  de venta on-line

 

mp3

Las especificaciones técnicas de este reproductor son  las siguientes:
Marca Energy Sistem
Modelo Car
Nombre del modelo Car MP3 f2 Racing Red
Año de fabricación 2013
Peso del producto 32 g
Dimensiones del producto 4 x 8,5 x 5,5 cm
Número de modelo del producto Car
Número de producto Car
Interfaz del hardware USB
Otras características Tarjeta de lectura integrada
Tecnología de pantalla LCD
Dimensión de la pantalla 1 pulgadas
Tipo de pantalla LED
Decodificador integrado No
Tipo de salida de audio 3.5 mm
Formatos de audio compatibles MP3, WMA
Pilas / baterías incluidas No
Número de puertos USB 1
Tipo de conector Solo iPod Plug-In, USB
Formatos compatibles MP3, WMA
Tipo de medio MP3, WMA
Incluye mando

 

Este reproductor   parece   muy completo  pues en efecto tiene  todas estas facilidades

  • Transmisor FM que envía la música a la radio del coche sin cables en rango de frecuencia seleccionable de 87.5 a 108.0 MHz
  • Reproduce música en formatos MP3 y WMA con navegación por carpetas.
  • Compatible con tarjetas de memoria SDHC (hasta 32GB).
  • Conexión USB para escuchar música desde un pendrive (hasta 32GB).
  • Entrada de línea tipo jack de 3,5mm para conectar tu reproductor portátil.(si el lector ha leido bien entrada y no salida como seria de desear)
  • Mando a distancia con acceso a todas las funciones del dispositivo.
  • Funciona con fuentes de energía de 12V y 24V.
  •  Distancia efectiva hasta 5 metros.
  • Navegación por carpetas.
  •  8 modos de ecualización: Normal Rock Pop Classic Soft Jazz DBB y SRS. – 4 modos de reproducción incluyendo modo aleatorio.

 Modificación   a realizar

En efecto el lector usb descrito   parece ideal  para añadir un puerto host   a nuestro equipo sino fuera por un pequeño problema: el audio al  transmitirse por FM  esta sujeto a chasquidos , interferencias ,cortes ,etc  que se acusan sobre todo mucho más en movilidad

Por tanto aunque el fabricante  haya dotado la facilidad  inaáambrica para mejorar la usabilidad del producto a efectos prácticos  no lo ha conseguido ya que la calidad de audio no es la ideal básicamente por el medio usado de transmisión de la señal de audio ..¿pero y si fuese posible extraer la señal de BF directamente para conectarlo  a la entrada in de nuestro equipo de audio de nuestro automóvil?

Pues en efecto por ingeniería inversa es posible  , lo cual vamos a describir en unos momentos

 

1-Desmonte el cristal superior ( va pegado )

 

2-Destornille los 4 tornillos de la carcasa superior
DSCF2432

3-Extriga dando la vuelta  a la placa principal pues vamos a modificar  el circuito
DSCF2431

 

Como observaremos tenemos un conector hembra de jack de 2 1/2″ stereo sin utilidad ( es raro que queremos conectar un reproductor mp3  a este propio reproductor mp3)  que por tanto es proclive para usarlo como salida de  audio si  anulamos la electrónica asociada a la entrada .

Ademas de los  conectores ( jack ,usb, y sd)   y el lcd tenemos tres chips : el mas grande es propio reproductor de audio , uno de mas abajo de éste es el chip de BF y finalmente a la derecha es el modulador de RF

Conocida la electrónica  que alberga este reproductor  solo se trata de anular el jack de audio ( simplemente desoldaremos las dos resistencias  SMD que hay  arriba del propio conector y conectaremos en el  lado del jack  dos pequeños hilos que a su vez lo conectaremos a la salida del chip de audio tal y como se muestra en la fotografía

Respecto a la masa no hace falta una nueva conexión pues precisamente el jack tenia conectada la masa al lado común

!El jack de audio  ya  esta preparado para sacar el audio por BF en lugar de ser lo contrario ( audio in)!

DSCF2429

Y este seria el resultado del montaje:

DSCF2428

 

5-Finalmente ya hecha la modificación  seguiremos los pasos a la inversa:  vuelva a colocar la placa en su posición , ponga la carcasa superior , atornille los 4 tornillos  y finalmente pegue el cristal nuevamente

 

6-Ya puede conectar a la toma de  audio la salida directa del reproductor modificado y reproducir cualquier tema desde l reproductor modificado. Sinceramente la calidad de audio es muy superior a la que obteníamos modulando  por FM  la señal  y ademas  con este montaje ya no estaremos sujetos  a cortes e interferencias, ruido  etc ( y ademas no “gastaremos ” una memoria de nuestro  equipo de audio  en memorizar el canal que transmitía este equipo)

 

NOTA:

Como hay muchos  seguidores de este blog que  han tenido dificultades para localizar las resistencias SMD de la parte de entrada de audio del reproductor  de  MP3, se  adjunta una foto algo mas clarificadora  donde se marca  aproximadamente con dos círculos rojos  en el lugar  donde e  se  situarían  estas resistencias  que básicamente cumplen una función de protección de la entrada de   del circuito de audio ,  por lo que  si se eliminan dichas resistencias,  podemos usar el jack stereo de  3 1/2″   con seguridad sin interferir en el circuito de audio .

En todo caso el circuito debería  quedar como en la foto del circuito que se anexa  que aun hoy en día es funcional .

Se recomienda usar un soldador de punta muy fina  de poca   potencia  y si es posible una bomba de desoldar para  que el resultado  sea perfecto.

 

:circuito  modif

!Mucha  suerte   con esta pequeña modificación !

SI le interesa  el reproductor ,puede  comprarlo   directamente en Amazon siguiendo este enlace :Energy Sistem Car Mp3 F2 Racing Red – Reproductor MP3 para coche con transmisor FM (Fm-T, lector tarjetas, USB-Host, Line-In), Rojo!Gracias!!

Funciones avanzadas App Inventor


A continuación se describen algunos componentes  de App Inventor que nos pueden ser muy utiles de cara a dar  una mayor funcionalidad  a nuestra próxima aplicación  móvil como son la gestion de la conexion  por bluetooth, el reconocimiento vocal, trascripcion a voz,  un scanner de códigos QR o gestionar los servicios web.

 

 

ActivityStarter

Un componente que puede poner en marcha otra de las actividades de su aplicación.

Usted se comunica con el motor de arranque de actividad mediante el establecimiento de propiedades del componente para pasar información relacionada con la actividad, incluyendo la acción y la clase de actividad. Consulte Uso de la actividad de arranque de componentes para obtener más información y ejemplos.

Actividades que pueden ser lanzados incluyen:

  • Comenzando otra App Inventor para aplicación Android. Para ello, en primer lugar determinar la clase de la otra aplicación descargando el código fuente y el uso de un explorador de archivos o descomprimir utilidad para encontrar un archivo llamado “youngandroidproject / project.properties”. La primera línea del archivo comenzará con “main =” y será seguido por el nombre de la clase; Por ejemplo,principal = com.gmail.Bitdiddle.Ben.HelloPurr.Screen1Para hacer su ActivityStarter lanzar esta aplicación, establezca las siguientes propiedades:
    • ActivityPackage al nombre de clase, dejando caer el último componente (por ejemplo, com.gmail.Bitdiddle.Ben.HelloPurr)
    • ActivityClass a todo el nombre de la clase (por ejemplo, com.gmail.Bitdiddle.Ben.HelloPurr.Screen1)
  • Inicio de una actividad que se integra en el sistema operativoAndroid, como el uso de la cámara, o al hacer una búsqueda en Internet. Puede comenzar cámara ajustando las siguientes propiedades:
    • Acción: android.intent.action.MAIN
    • ActivityPackage: com.android.camera
    • ActivityClass: com.android.camera.Camera
  • Si realiza una búsqueda web: Suponiendo que el término que desea buscar es “vampiro” (no dude en sustituir su propia elección), establezca las propiedades de:
    • Acción: android.intent.action.WEB_SEARCH
    • ExtraKey: consulta
    • ExtraValue: vampiro
    • ActivityPackage: com.google.android.providers.enhancedgooglesearch
    • ActivityClass: com.google.android.providers.enhancedgooglesearch.Launcher
  • La apertura de un navegador a una página web específica. Asumiendo la página que desee ir a es ” www.facebook.com (enlace es externo)“(no dude en sustituir su propia elección), establezca las propiedades de:

También puede iniciar las aplicaciones de terceros instaladas en el teléfono, siempre y cuando sepas las adecuadas intentos de invocar, y también se puede poner en marcha actividades que producen resultados de texto y que vuelva a utilizar en la aplicación. La forma en que estos datos se extrae depende de cómo se ha implementado la aplicación.

Propiedades

Acción: texto
Acción de la actividad que se lanzará.
ActivityClass: texto
Nombre de clase de la actividad que se lanzará.
ActivityPackage: texto
Nombre del paquete de la actividad que se lanzará.
DataType
DataURI: texto
URI pasado a la actividad que se lanzará.
ExtraKey: texto
Nombre de clave de texto pasa a la actividad.
ExtraValue: texto
Valor de texto pasa a la actividad.
Resultado: texto
Valor devuelto por la actividad que se inició.
ResultName: texto
El nombre que se utiliza para extraer el resultado devuelto por la actividad que se inició.
ResultType: texto
Escriba la información de regresar de la actividad que se inició.
ResultUri: texto
URI (o datos) información devuelta de la actividad que se inició.

Eventos

ActivityError (mensaje de texto)
Indica que se ha producido un error al usar este ActivityStarter.
AfterActivity (resultado de texto)
Llamado después de que termine la actividad.

Métodos

ResolveActivity text ()
Devuelve el nombre de la actividad que corresponde a este ActivityStarter, o una cadena vacía si se puede encontrar ninguna actividad correspondiente. Usted puede usar este antes de iniciar una aplicación externa para garantizar que la aplicación está instalada en el teléfono.
StartActivity ()
Inicie la actividad asociada a este componente.

BarcodeScanner

Este componente no visible usa la cámara del teléfono para leer un código de barras 1-dimensional o de código de barras de 2 dimensiones (código QR). Para que este componente funcione, la aplicación de escáner de código de barras de ZXing debe estar instalado en el teléfono. Esta aplicación se encuentra disponible de forma gratuita en el Android Market.

Propiedades

Resultado
El resultado de texto del último análisis acertado. Esto se obtiene después AfterScan ha señalado. Este valor también se devuelve como el valor del resultado.

Eventos

AfterScan (resultado de texto)
Llamado después de escanear extremos.

Métodos

Doscan ()
Ejecutar un análisis

BluetoothClient

Componente de cliente de Bluetooth

Propiedades

AddressesAndNames
Una lista de las direcciones y los nombres de los dispositivos Bluetooth vinculados.
Disponible
Di si Bluetooth está disponible en el dispositivo Android.
CharacterEncoding
La codificación de caracteres para utilizar al enviar y recibir texto.
DelimiterByte
El byte delimitador a utilizar cuando se pasa un número negativo para el parámetro NumberOfBytes al llamar ReceiveText, ReceiveSignedBytes o ReceiveUnsignedBytes.
Activado
Di si Bluetooth está activada.
HighByteFirst
Ya sea de 2 y 4 números de bytes deben ser enviados y recibidos con el alto (o más significativo) Byte primero. Consulte la documentación para el dispositivo con el cual su aplicación se comunica para el ajuste apropiado. Esto también se conoce como big endian.
IsConnected
Indica si una conexión Bluetooth se ha hecho.
Asegurar
Ya sea para invocar SSP (Secure Pairing simple), que es compatible con dispositivos con Bluetooth v2.1 o superior. Cuando se trabaja con dispositivos Bluetooth integrados, es posible que este inmueble que se establece en False. Para Android 2.0-2.2, se ignorará este valor de la propiedad.

Eventos

ninguno

Métodos

número BytesAvailableToReceive ()
Devuelve una estimación del número de bytes que se pueden recibir sin bloquear
boolean Connect (dirección del texto)
Conecte el dispositivo Bluetooth con la dirección especificada y el perfil de puerto serie (SPP). Devuelve true si la conexión se ha realizado correctamente. El parámetro de dirección puede contener caracteres adicionales después de la dirección MAC si hay un espacio inmediatamente después de la dirección MAC.Esto significa que usted puede pasar un elemento de la lista devuelta por la propiedad AddressesAndNames sin dividir aparte la dirección y el nombre.
boolean ConnectWithUUID (dirección del texto, uuid texto)
Conecte el dispositivo Bluetooth con la dirección y el UUID especificado. Devuelve true si la conexión se ha realizado correctamente. El parámetro de dirección puede contener caracteres adicionales después de la dirección MAC si hay un espacio inmediatamente después de la dirección MAC. Esto significa que usted puede pasar un elemento de la lista devuelta por la propiedad AddressesAndNames sin dividir aparte la dirección y el nombre.
Disconnect ()
Desconecte el dispositivo Bluetooth conectado.
boolean IsDevicePaired (dirección del texto)
Comprueba si el dispositivo Bluetooth con la dirección especificada está emparejado.
número ReceiveSigned1ByteNumber ()
Recibe un número de 1 byte con signo desde el dispositivo Bluetooth conectado.
número ReceiveSigned2ByteNumber ()
Recibe un número de 2 bytes con signo desde el dispositivo Bluetooth conectado.
número ReceiveSigned4ByteNumber ()
Recibe un número de 4 bytes con signo desde el dispositivo Bluetooth conectado.
Lista ReceiveSignedBytes (NumberOfBytes número)
Recibe múltiples valores de byte firmado desde el dispositivo Bluetooth conectado. Si NumberOfBytes es menor que 0, leer hasta que se reciba un valor de byte delimitador.
ReceiveText texto (NumberOfBytes número)
Recibir mensajes de texto desde el dispositivo Bluetooth conectado. Si NumberOfBytes es menor que 0, leer hasta que se reciba un valor de byte delimitador.
número ReceiveUnsigned1ByteNumber ()
Recibe un número de 1 byte sin signo desde el dispositivo Bluetooth conectado.
número ReceiveUnsigned2ByteNumber ()
Recibe un número de 2 bytes sin signo desde el dispositivo Bluetooth conectado.
número ReceiveUnsigned4ByteNumber ()
Recibe un número de 4 bytes sin signo desde el dispositivo Bluetooth conectado.
Lista ReceiveUnsignedBytes (NumberOfBytes número)
Recibe múltiples valores de byte sin signo desde el dispositivo Bluetooth conectado. Si NumberOfBytes es menor que 0, leer hasta que se reciba un valor de byte delimitador.
Send1ByteNumber (número de texto)
Enviar un número de 1 byte para el dispositivo Bluetooth conectado.
Send2ByteNumber (número de texto)
Enviar un número de 2 bytes al dispositivo Bluetooth conectado.
Send4ByteNumber (número de texto)
Enviar un número de 4 bytes al dispositivo Bluetooth conectado.
SendBytes (lista de la lista)
Enviar una lista de valores de byte con el dispositivo Bluetooth conectado.
SendText (texto texto)
Enviar mensajes de texto al dispositivo Bluetooth conectado.

BluetoothServer

Componente de servidor Bluetooth

Propiedades

Disponible: boolean
Di si Bluetooth está disponible en el dispositivo Android.
CharacterEncoding: texto
La codificación de caracteres para utilizar al enviar y recibir texto.
DelimiterByte: número
El byte delimitador a utilizar cuando se pasa un número negativo para el parámetro NumberOfBytes al llamar ReceiveText, ReceiveSignedBytes o ReceiveUnsignedBytes.
Habilitado: boolean
Di si Bluetooth está activada.
HighByteFirst: boolean
Ya sea de 2 y 4 números de bytes deben ser enviados y recibidos con el alto (o más significativo) Byte primero. Consulte la documentación para el dispositivo con el cual su aplicación se comunica para el ajuste apropiado. Esto también se conoce como big endian.
IsAccepting: boolean
Indica si este componente BluetoothServer está aceptando una conexión entrante.
IsConnected: boolean
Indica si una conexión Bluetooth se ha hecho.
Asegurar
Ya sea para invocar SSP (Secure Pairing simple), que es compatible con dispositivos con Bluetooth v2.1 o superior. Cuando se trabaja con dispositivos Bluetooth integrados, es posible que este inmueble que se establece en False. Para Android 2.0-2.2, se ignorará este valor de la propiedad.

Eventos

ConnectionAccepted ()
Indica que una conexión bluetooth ha sido aceptada.

Métodos

AcceptConnection (serviceName texto)
Aceptar una conexión entrante con el perfil de puerto serie (SPP).
AcceptConnectionWithUUID (serviceName texto, uuid texto)
Aceptar una conexión entrante con un UUID específico.
número BytesAvailableToReceive ()
Devuelve una estimación del número de bytes que se pueden recibir sin bloquear
Disconnect ()
Desconecte el dispositivo Bluetooth conectado.
número ReceiveSigned1ByteNumber ()
Recibe un número de 1 byte con signo desde el dispositivo Bluetooth conectado.
número ReceiveSigned2ByteNumber ()
Recibe un número de 2 bytes con signo desde el dispositivo Bluetooth conectado.
número ReceiveSigned4ByteNumber ()
Recibe un número de 4 bytes con signo desde el dispositivo Bluetooth conectado.
Lista ReceiveSignedBytes (NumberOfBytes número)
Recibe múltiples valores de byte firmado desde el dispositivo Bluetooth conectado. Si NumberOfBytes es menor que 0, leer hasta que se reciba un valor de byte delimitador.
ReceiveText texto (NumberOfBytes número)
Recibir mensajes de texto desde el dispositivo Bluetooth conectado. Si NumberOfBytes es menor que 0, leer hasta que se reciba un valor de byte delimitador.
número ReceiveUnsigned1ByteNumber ()
Recibe un número de 1 byte sin signo desde el dispositivo Bluetooth conectado.
número ReceiveUnsigned2ByteNumber ()
Recibe un número de 2 bytes sin signo desde el dispositivo Bluetooth conectado.
número ReceiveUnsigned4ByteNumber ()
Recibe un número de 4 bytes sin signo desde el dispositivo Bluetooth conectado.
Lista ReceiveUnsignedBytes (NumberOfBytes número)
Recibe múltiples valores de byte sin signo desde el dispositivo Bluetooth conectado. Si NumberOfBytes es menor que 0, leer hasta que se reciba un valor de byte delimitador.
Send1ByteNumber (número de texto)
Enviar un número de 1 byte para el dispositivo Bluetooth conectado.
Send2ByteNumber (número de texto)
Enviar un número de 2 bytes al dispositivo Bluetooth conectado.
Send4ByteNumber (número de texto)
Enviar un número de 4 bytes al dispositivo Bluetooth conectado.
SendBytes (lista de la lista)
Enviar una lista de valores de byte con el dispositivo Bluetooth conectado.
SendText (texto texto)
Enviar mensajes de texto al dispositivo Bluetooth conectado.
StopAccepting ()
Deje de aceptar una conexión entrante.

Notificador

Un notificador es un componente no visible que puede mostrar tipos verious de alertas y puede registrar la información. Utilice un notificador para mostrar los avisos y alertas a los usuarios de su aplicación, así como para registrar la información que puede ayudarle a depurar su aplicación.

Propiedades

ninguno

Eventos

AfterChoosing (selección de texto)
Signaled vez que el usuario ha hecho una elección en respuesta a ShowChooseDialog. El argumento es el texto en el botón que el usuario intervenido.
AfterTextInput (respuesta de texto)
Señalizadas por una vez el usuario ha respondido a ShowTextDialog. El argumento es el texto en el botón que el usuario ha introducido.

Métodos

ShowMessageDialog (mensaje de texto, el título del texto, texto buttonText)
Aparece un aviso que se mantiene hasta que el usuario toca un botón con el texto dado. Los argumentos son el mensaje que se muestra, el título de la convocatoria, y la etiqueta del botón.
ShowChooseDialog (mensaje de texto, el título del texto, button1Text Texto, Texto button2Text, cancelable boolean)
Aparece un aviso que el usuario debe responder a pulsando uno de los dos botones con el texto dado. Los argumentos son el mensaje que se muestra, el título de la convocatoria, y las etiquetas de los botones izquierdo y derecho, respectivamente. El evento AfterChoosing se señala después el usuario toca una de las teclas.
ShowTextDialog (mensaje de texto, el título del texto, cancelable boolean)
Aparece un aviso que el usuario debe responder a mediante la introducción de un texto. Los argumentos son el mensaje que se muestra y el título de la convocatoria. El evento AfterTextInput se señaliza después de que el usuario entra en el texto.
ShowAlert (mensaje de texto)
Aparece un aviso de temporal, que desaparece después de unos segundos. El argumento es el texto del anuncio.
LogError (mensaje de texto)
Loginfo (mensaje de texto)
LogWarning (mensaje de texto)
Estos métodos son para uso en la depuración. Ellos escriben mensajes a los diversos registros en el dispositivo Android. Los registros se pueden leer con el uso de herramientas de depuración para Android, como el Puente de depuración Android (ADB).

SpeechRecognizer

Utilizar un componente de reconocimiento de voz para escuchar el discurso de usuario y convertir el sonido hablado en texto utilizando la función de reconocimiento de voz de Android.

Propiedades

Resultado
El último texto producido por el reconocedor.

Eventos

AfterGettingText (resultado de texto)
Signaled después de que el reconocedor ha producido texto. El argumento es el resultado del texto que fue producido.
BeforeGettingText ()
Marcó justo antes se llama el reconocedor.

Métodos

GetText ()
Pregunta al usuario a hablar, y convierte la voz en texto. Las señales de evento AfterGettingText cuando el resultado está disponible.

TextToSpeech

Utilizar un componente de conversión de texto a voz para que el texto hable dispositivo audible.

Para que este componente funcione, el dispositivo debe tener el TTS Extended aplicación Servicio por el Proyecto Ojos libres instalado. Puede descargarlo desde http://code.google.com/p/eyes-free/downloads/list(enlace es externo)

El componente de conversión de texto a voz tiene propiedades que puede establecer para guiar la pronunciación del texto que se habla. Estas propiedades utilizan códigos de tres letras para especificar el idioma y el país donde se habla esa lengua. Por ejemplo, puede especificar Británico o Inglés EE.UU.. Para Inglés británico, el código del idioma es eng y el código de país es GBR , mientras que para EE.UU. Inglés, el código del idioma es eng y el código de país esEE.UU. . La lista completa se encuentra a continuación.

Propiedades

País
El código de país para la producción del habla.
Idioma
El código de idioma para la producción del habla.
Resultado

Eventos

AfterSpeaking (resultado de texto)
Signaled después se habla el texto. El argumento es el resultado del texto que fue producido.
BeforeSpeaking ()
Marcó justo antes se habla el texto.

Métodos

Speak (mensaje de texto)
Habla el texto dado.

Estos son los códigos de idioma y país que puede utilizar. Los códigos se organizaron por primera vez por el lenguaje; entonces, en cada unidad lingüística es una lista de posibles códigos de país:

  • ces (Rep.Chec)
    • CZE
  • spa (Español)
    • ESP
    • EE.UU.
  • deu (alemán)
    • AUT
    • BEL
    • CHE
    • DEU
    • LIE
    • LUX
  • fra (francés)
    • BEL
    • CAN
    • CHE
    • FRA
    • LUX
  • nld (holandés)
    • BEL
    • NLD
  • ita (italiano)
    • CHE
    • ITA
  • pol (polaco)
    • POL
  • eng (Inglés)
    • AUS
    • BEL
    • BWA
    • BLZ
    • CAN
    • GBR
    • HKG
    • IRL
    • IND
    • JAM
    • MHL
    • MLT
    • NAM
    • NZL
    • PHL
    • PAK
    • SGP
    • TTO
    • EE.UU.
    • VIR
    • ZAF
    • ZWE

TinyWebDB

Componente no visible que se comunica con un servicio Web para almacenar y recuperar información.

Consulte Creación de un servicio TinyWebDB personalizada .

Propiedades

ServiceURL

Eventos

GotValue (texto tagFromWebDB, cualquier valueFromWebDB)
Indica que una petición del servidor GetValue ha tenido éxito.
ValueStored ()
Evento que indica que una solicitud del servidor StoreValue ha tenido éxito.
WebServiceError (mensaje de texto)
Indica que la comunicación con el servicio Web de un error es

Métodos

GetValue (etiqueta de texto)
GetValue pide el servicio web para obtener el valor almacenado en la etiqueta dada. Corresponde al servicio web lo que se devuelve si no hay un valor almacenado en la etiqueta. Este componente sólo acepta lo que sea devuelto.
StoreValue (etiqueta de texto, cualquier valueToStore)
Pide al servicio Web para almacenar el valor dado bajo la etiqueta dada

Web

Componente no visible que proporciona funciones para HTTP GET, POST, PUT y DELETE peticiones.

Propiedades

AllowCookies
Si las cookies de respuesta deben ser guardados y utilizados en las solicitudes posteriores. Las cookies sólo se admiten en la versión Android 2.3 o superior.
RequestHeaders
Las cabeceras de petición, como una lista de sublistas de dos elementos. El primer elemento de cada lista secundaria representa el nombre de cabecera de las peticiones. El segundo elemento de cada lista secundaria representa los valores de los campos de encabezado de la solicitud, ya sea un único valor o una lista que contiene varios valores.
ResponseFileName
El nombre del archivo donde se guardará la respuesta. Si SaveResponse es verdadera y ResponseFileName está vacío, entonces se generará un nuevo nombre de archivo.
SaveResponse
Ya sea que la respuesta debe ser guardado en un archivo.
Url
La dirección URL de la solicitud Web.

Eventos

GotFile (url texto, número responseCode, responseType texto, nombre de archivo de texto)
Evento que indica que una solicitud ha terminado.
GotText (url texto, número responseCode, responseType texto, responseContent texto)
Evento que indica que una solicitud ha terminado.

Métodos

texto BuildRequestData (lista de la lista)
Convierte una lista de sublistas de dos elementos, que representan pares nombre-valor, a una cadena con formato como application /-form-urlencoded x-www tipo de medio, adecuado para pasar a PostText.
ClearCookies ()
Borra todas las cookies de este componente Web.
Eliminar ()
Realiza una solicitud DELETE HTTP utilizando la propiedad Url y recupera la respuesta. Si la propiedad SaveResponse es cierto, la respuesta se guardará en un archivo y el evento GotFile se disparará. La propiedad ResponseFileName se puede utilizar para especificar el nombre del archivo. Si la propiedad SaveResponse es falsa, el evento GotText se disparará.
Get ()
Realiza una solicitud GET HTTP utilizando la propiedad Url y recupera la respuesta.
Si la propiedad SaveResponse es cierto, la respuesta se guardará en un archivo y el evento GotFile se disparará. La propiedad ResponseFileName se puede utilizar para especificar el nombre del archivo.
Si la propiedad SaveResponse es falsa, el evento GotText se disparará.
HtmlTextDecode texto (htmlText texto)
Decodifica el valor de texto HTML dado. Entidades HTML carácter tales como &, <,>, “, y” se cambian a &, ‘, y “. Entidades como hhhh, y nnnn se cambian a los caracteres apropiados.
JsonTextDecode texto (texto jsonText)
Decodifica el valor de texto JSON dado. Si el texto JSON dada está entre comillas, se eliminarán las comillas.
POSTFILE (trayecto de texto)
Realiza una petición POST HTTP mediante la propiedad Url y los datos desde el archivo especificado.
Si la propiedad SaveResponse es cierto, la respuesta se guardará en un archivo y el evento GotFile se disparará. La propiedad ResponseFileName se puede utilizar para especificar el nombre del archivo.
Si la propiedad SaveResponse es falsa, el evento GotText se disparará.
PostText (texto texto)
Realiza una petición POST HTTP mediante la propiedad Url y el texto especificado.
Los caracteres del texto se codifican utilizando codificación UTF-8.
Si la propiedad SaveResponse es cierto, la respuesta se guardará en un archivo y el evento GotFile se disparará. La propiedad responseFileName se puede utilizar para especificar el nombre del archivo.
Si la propiedad SaveResponse es falsa, el evento GotText se disparará.
PostTextWithEncoding (texto texto, codificación de texto)
Realiza una petición POST HTTP mediante la propiedad Url y el texto especificado.
Los caracteres del texto se codifican utilizando la codificación determinada.
Si la propiedad SaveResponse es cierto, la respuesta se guardará en un archivo y el evento GotFile se disparará. La propiedad ResponseFileName se puede utilizar para especificar el nombre del archivo.
Si la propiedad SaveResponse es falsa, el evento GotText se disparará.
PutFile (trayecto de texto)
Realiza una solicitud HTTP PUT mediante la propiedad Url y los datos desde el archivo especificado.
Si la propiedad SaveResponse es cierto, la respuesta se guardará en un archivo y el evento GotFile se disparará. La propiedad ResponseFileName se puede utilizar para especificar el nombre del archivo.
Si la propiedad SaveResponse es falsa, el evento GotText se disparará.
PutText (texto texto)
Realiza una solicitud HTTP PUT mediante la propiedad Url y el texto especificado.
Los caracteres del texto se codifican utilizando codificación UTF-8.
Si la propiedad SaveResponse es cierto, la respuesta se guardará en un archivo y el evento GotFile se disparará. La propiedad responseFileName se puede utilizar para especificar el nombre del archivo.
Si la propiedad SaveResponse es falsa, el evento GotText se disparará.
PutTextWithEncoding (texto texto, codificación de texto)
Realiza una solicitud HTTP PUT mediante la propiedad Url y el texto especificado.
Los caracteres del texto se codifican utilizando la codificación determinada.
Si la propiedad SaveResponse es cierto, la respuesta se guardará en un archivo y el evento GotFile se disparará. La propiedad ResponseFileName se puede utilizar para especificar el nombre del archivo.
Si la propiedad SaveResponse es falsa, el evento GotText se disparará.
UriEncode texto (texto de texto)
Codifica el valor de texto dada de modo que se puede utilizar en una dirección URL.
Fuente  aqui