PDA

Ver la Versión Completa : [ TUTORIAL ] Tutorial y recopilación de Intents


ATaskREADOS
03/02/14, 19:55:14
Este tutorial es en realidad la unión de dos. Uno escrito por el miembro de Xda.developers Badhri y sacado del foro de esa web , y el otro escrito unos post más abajo por nuestro compañero de foro, Maid450. Respecto del tutorial de Xda me he tomado la libertad eso si de darle una traducción libre además de que no esta el texto entero, he seleccionado lo que me parecía más interesante

Enlace al post original de Xda Developers:
http://forum.xda-developers.com/show....php?t=2489449

INTRODUCCIÓN:

Básicamente y para los que no tengan ni idea del tema lo que conseguimos con los intent es que Tasker pueda utilizar una acción de esa app como si fuera suya. Para ello utiliza la acción Enviar Intent.
Del otro lado está el Obtener Intent. Esto quiere decir que en ciertos casos Tasker podrá “escuchar” un intent de una app, y por tanto que cuando esta app realice ese intent Tasker reaccione como lo haría con un contexto de evento.


GUIA-TASKER: ACCIÓN ENVIAR INTENT

Para ser franco, antes de usar Tasker y su foro de Grupos de Google, no tenía ni idea de lo que era una cosa llamada "Intent". Así que no soy un experto en esto. A pesar de que el título del hilo dice GUIDE, no es, eh…, exactamente eso. Esta más orientado a servir de ejemplo y estos ejemplos, que estoy a punto de mostrar aquí, no son míos tampoco. Con el conocimiento que recogí del foro de Tasker, busqué en la web y descubrí estas cosas. Así que el verdadero mérito es para el que hizo el trabajo duro inicial y consiguió hacer estos intents.

Intent Android
Un Intent, IMO, es la manera que tiene Android de hacer posible la comunicación entre aplicaciones. Un Intent en si, es como un paquete de información con ciertos datos que el sistema operativo y las aplicaciones pueden "lanzar" y a su vez pueden definir filtros para recibir los que les interesen. Si una aplicación tiene esto debidamente implementado, se puede, en esencia, invocar una parte de ella desde otra aplicación. El intent puede invocarse desde dentro de una aplicación Android (a través de código de Java, un desarrollador de aplicaciones muy probablemente lo haría) o desde la parte Linux del teléfono a través del shell usando el comando 'am'. Hay unos pocos programas, como Tasker y Llama, que permiten a los usuarios construir un Intent al usuario final y lo envían hacia fuera.

Para más información sobre los intents echa un vistazo a:

1 http://developer.android.com/referen...nt/Intent.html
2 http://stackoverflow.com/questions/8...s-available-in

Tasker-acción Enviar Intent (tareas -> Acción -> Miscelaneo -> Enviar Intent):

El uso de este pequeña acción en Tasker, podría abrir una nueva dimensión para ti. La acción enviar Intent tiene los siguientes campos. Consulta la Guía oficial Tasker para ver la función de cada uno de estos campos (http://tasker.dinglisch.net/userguide/en/intents.html )

ESTRUCTURA DE UN INTENT:

- ficha de un Intent:

Nombre la app o categoría del intent:
Pequeña descripción:
Código:
Acción:
Categ:
Tipo Mime:
datos:
extra:
extra:
paquete:
Clase:
Objetivo:

Acción: La acción a realizar (sorpresa), es opcional, pero en la mayoría de los casos.
Hay acciones genéricas del sistema (que son las que se usan con mayor frecuencia) como por ejemplo android.intent.action.VIEW para "ver" algo (abrir la ficha de un contacto, ver una imágen, una web, abrir un fichero de texto),android.intent.action.EDIT para "editar" algo (abrir un editor de imágenes para retocar una foto, un fichero de texto para editarlo, la información de un contacto), android.intent.action.SEND y android.intent.action.SENDTO para enviar datos (es lo que manda el sistema cuando le damos al botón "compartir" de una app, por ejemplo, la diferencia entre SEND y SENDTO en principio es que en la segunda especificas un destino concreto y en la primera no, pero por lo que diré despues la verdad es que es confuso y no le veo mucho sentido a que existan las 2...).
Las aplicaciones también pueden definir sus propias acciones para hacer cosas específicas de su aplicación, estas suelen empezar por el paquete de su app, por ejemplo: "au.com.shiftyjelly.pocketcasts.action.PLAY" para emular el "play" en pocketcasts.
Categoría: añade más información sobre la acción del intent, casi siempre será "android.intent.category.DEFAULT" pero en determinados casos puede ser otra.
Tipo Mime: indica el tipo de datos que contiene el intent, es opcional, pero si por ejemplo queremos enviar texto y no especificamos una aplicación concreta, poniendo aqui el tipo "text/plain" nos mostrará una lista de las apps que pueden enviar texto (email, mensajería instantánea...), mientras que si no lo ponemos podría mostrar también apps que solo permiten enviar imágenes.
Datos: Los datos del intent, aunque pudiera parecer lógico que se usara para poner por ejemplo el texto en una acción SEND de texto, los datos deben ser una URI (formato tipo URL), con lo que se usa para decir por ejemplo que telefono marcar en una accion DIAL (tel:XXXX), la ruta del fichero a editar en una accion EDIT (file:///ruta/a/fichero), etc...
Extras: Datos adicionales inluidos en el intent. Se pueden usar para cualquier cosa dependiendo de la acción y la aplicación, Tasker por ejemplo los usa entre otras para comunicar las variables entre Tasker y sus plugins, por ejemplo. Estos tienen tela porque no forman parte de los filtros, con lo que no se puede saber si una aplicación los usa si el desarrollador no lo documenta.
Igual que las acciones, los hay estándar del sistema como por ejemplo "android.intent.extra.SUBJECT" o "android.intent.extra.TEXT" para indicar el asunto y/0 texto para un email o mensajería instantanea o cada aplicación puede definir sus propios. Tasker solo permite enviar 2.
Paquete: Permite especificar hacia que que app va dirigida el intent, evitando que otras respondan a el.
Clase: En caso de que una app tenga varias pantallas (activities) o servicios que puedan responder a un mismo intent con finalidades distintas, permite especificar exactamente a cual va dirigida.
Por ejemplo en el que has puesto de "OpenVPN", la cción VIEW dirigida hacia la clase "net.openvpn.openvpn.OpenVPNClient" conecta a la VPN, mientras que el mismo intent dirigido hacia "net.openvpn.openvpn.OpenVPNDisconnect" la desconecta.
Target: Indica si el objetivo del intent es una pantalla de una app (activity), un servicio en segundo plano (service) o un "escuchador de difusiones" (Broadcast receiver, en español suena fatal).
Para los usos de un usuario normalmente será una activity.

Como veis, la mayoría de los datos son opcionales, pero nos permiten refinar más exactamente lo que queremos hacer como he ido explicando por ejemplo en el tipo mime, la categoría, el paquete, etc...

Pongamos por ejemplo el de enviar texto que esta en el listado:
Código:
Action:android.intent.action.SEND
Cat: Default
Mime Type:text/plain
Data:
Extra:android.intent.extra.TEXT: MY TEST TEXT
Extra:
Package:
Class:
Target:Activity
Con esta información Android saca su megafono y dice: "se buscan aplicaciones que tengan activities que puedan hacer android.intent.action.SEND con datos de categoría Default y tipo text/plain" las aplicaciones en cuestion (Twitter, Whatsapp, Gmail, etc...) responderán, por lo cual android mostrará la típica lista de decisión "con qué aplicación de estas quieres hacer esto?" y al elegir una, android le envía el intent completo con todos sus datos, los extras, etc...
Si se enviase el mismo intent especificando el package de twitter, solo esta podría contestar y por eso se enviaría directamente a la app sin mostrar la lista.

GET INTENT:

Esta es la otra cara de los intents. No sólo los podemos enviar sino también escuchar.

Tasker-Contexto Intent Recibido (Contextos>Evento>Sistema>Intent Recibido)

El tema de los intents broadcast (difusión) los usa el sistema operativo para muchas cosas de "interés general" para otras aplicaciones, por ejemplo "android.intent.action.BATTERY_CHANGED", "android.intent.action.ACTION_POWER_CONNECTED" , "android.intent.action.BOOT_COMPLETED", etc... a los cuales se suscriben ciertas apps que necesitan saber esa información (os suenan de contextos de tasker? ;) ese es el motivo de que estos no gasten prácticamente batería, Tasker no está preguntando cada X tiempo si pasan esas cosas, el propio sistema lo va diciendo tanto si está tasker instalado como si no, y tasker solo se pone a escucharlos si se definen perfiles que los usen)

LIMITACIONES CONOCIDAS:
1 ) Sólo se dispone de dos campos adicionales . Si usted requiere más, entonces usted tendrá que usar la acción Ejecutar consola y luego usar el comando ' am ' .
2 ) No se puede utilizar el campo de Datos y Tipo Mime campo juntos ( ambos no pueden tener valor para la acción , al mismo tiempo). Pero el desarrollador de Tasker dijo que él va a corregir en el futuro.

CONSEJOS BÁSICOS PARA OBTENER UN INTENT:

1 ) Hay tres tipos de objetivos : Receptor Broadcast, Actividad y Servicio. Nos ocuparemos en su mayoría del tipo Actividad en este hilo. (No he explorado las otras dos aún)

2 ) En general , si tienes una aplicación que deseas iniciar / hacer - algo - con , y no sabes lo que intent utilizar, a entonces:
a-Busca en Google: “Android + nombre + aplicación App Intents “ . Ejemplo : Android Facebook Intents de aplicación
b-Si el desarrollador de la aplicación es amable y atento , mandale un mail diciendo que deseas " invocar " tal o cual actividad a través de Tasker (o una aplicación similar ) y si esto es posible o no. Si no, pregúntale si lo hará posible en el futuro. Esta es tu mejor baza. Si existe un foro para la aplicación, entonces utilízalo.
c-Hay ciertas aplicaciones como “Intent Intercep” ( que intercepta de hecho una serie de intents ) , Android System Info ( que le ayuda a ver al archivo de manifiesto de la aplicación que contiene los filtros de los intents de esa app) u otras aplicaciones similares, que te ayudarán a identificar la estructura de tu acción de Tasker ' Enviar Intent ".
d-Pida ayuda en Tasker - Grupos de Google ( o en este subforo jeje).
e-Utiliza el Logcat para olfatear que hay de nuevo , bajo el capó ( Nunca he probado esto. Puede que sea lo que debería hacer a partir de ahora )

3 ) Hay otros usos de Intents ( aparte de los Intents sólo orientados a las aplicaciones ) , como el establecimiento de algunas configuraciones en las rom CyanogenMod . No tengo la menor idea sobre las mismas. Si lo sabes, entonces por favor iluminame .

4 ) Todos estos ejemplos han sido testados y probados en Android 4.3 Stock rom – Acceso Root - BusyBox instalado

Como dice el autor de esta guía por favor si conoces más intents o cosas relacionadas con su funcionamiento por favor compártelo con los demás. De esta manera conseguiremos tener una extensa recopilación de intents para uso y disfrute de todos.
-En el siguiente post tienes un listado completo de intents y sus fichas.-


FDO: Mlesir.

ATaskREADOS
03/02/14, 19:55:56
Enlace al post original:
http://forum.xda-developers.com/showthread.php?t=2489449


(NOTA: Alguna notas no he sabido traducirlas por eso he preferido dejarlas en inglés antes de poner algo incorrecto.)

Llamadas y SMS

1) Muestra el dialer con el número ya marcado. Usa voicemail para voicemail, en vez de tel:
Code:
Send Intent [
Action:android.intent.action.DIAL
Cat:None
Mime Type:
Data:tel:9999999999
Extra:
Extra:
Package:
Class:
Target:Activity ]

2) Llamar al número directamente:
Code:
Send Intent [
Action:android.intent.action.CALL
Cat:None
Mime Type:
Data:tel:9999999999
Extra:
Extra:
Package:
Class:
Target:Activity ]
3) Muestra el registro de llamadas:
Code:
Send Intent [
Action:android.intent.action.VIEW
Cat:None
Mime Type:vnd.android.cursor.dir/calls
Data:
Extra:
Extra:
Package:
Class:
Target:Activity ]

4)Muestra los contactos:
Code:
Send Intent [
Action:android.intent.action.VIEW
Cat:None
Mime Type:vnd.android.cursor.dir/contact
Data:
Extra:
Extra:
Package:
Class:
Target:Activity ]

5) Muestra la pantalla de Sms con el número y texto ya rellenos:
Send Intent [
Action:android.intent.action.VIEW
Cat:None
Mime Type:
Data:sms:9999999999
Extra:sms_body:hello
Extra:
Package:
Class:
Target:Activity ]

6) Muestra la pantalla de Sms con el número y texto ya rellenos usando la acción enviar:
Code:
Send Intent [
Action:android.intent.action.SENDTO
Cat:None
Mime Type:
Data:smsto:9999999999
Extra:sms_body:hello
Extra:
Package:
Class:
Target:Activity ]

Intents compartir y enviar:

1) Enviar mensajes de texto a alguna otra aplicación. Abre una lista de aplicaciones para su selección:
Code:
Send Intent [
Action:android.intent.action.SEND
Cat: Default
Mime Type:text/plain
Data:
Extra:android.intent.extra.TEXT: MY TEST TEXT
Extra:
Package:
Class:
Target:Activity ]

2) Envía texto a una app. Especifica la app en el package. Ej: Twitter como se muestra aquí (no funciona en todas las apps, FB por ejemplo)
Code:
Send Intent [
Action:android.intent.action.SEND
Cat: Default
Mime Type:text/plain
Data:
Extra:android.intent.extra.TEXT: MY TEST TEXT
Extra:
Package:com.twitter.android
Class:
Target:Activity ]

3) Told u ! It doesn't work for FB. Add a Run Shell with root with cmd input text 'blah', if you still need it.
Code:
Send Intent [
Action:android.intent.action.SEND
Cat: Default
Mime Type:text/plain
Data:
Extra:android.intent.extra.TEXT: MY TEST TEXT
Extra:
Package:com.facebook.katana
Class:
Target:Activity ]

4) Abre una URL. Indica el package name del navegador para abrirlo con uno en concreto. Ej: mobi.mgeek.TunnyBrowser para Dolphin browser
Code:
Send Intent [
Action:android.intent.action.VIEW
Cat: Default
Mime Type:
Data:http://www.ebay.in
Extra:
Extra:
Package:mobi.mgeek.TunnyBrowser
Class:
Target:Activity ]

5) Realiza una busqueda en Google para "hello"
Code:
Send Intent [
Action:android.intent.action.WEB_SEARCH
Cat: Default
Mime Type:
Data:
Extra:query:hello
Extra:
Package:
Class:
Target:Activity ]

6) Imita la acción de lanzar Google Now busqueda. Si tienes otra app está podría también abrirse, xej Autovoice. El comportamiento es diferente para cada móvil.
Code:
Send Intent [
Action:android.intent.action.ASSIST
Cat: Default
Mime Type:
Data:
Extra:
Extra:
Package:
Class:
Target:Activity ]

Video y Cámara

1) Abre la app de cámara. Añade una pequeña espera seguida de Input-> Button(camara) para capturar la imagen:
Code:
Send Intent [
Action:android.media.action.STILL_IMAGE_CAMERA
Cat:None
Mime Type:
Data:
Extra:
Extra:
Package:
Class:
Target:Activity ]

2) Abre la imagen capturada. But haven't figured out how to specify the output path. It could be coupled successfully with 3rd party camera apps(not all) as well by mentioning the package.
Code:
Send Intent [
Action:android.media.action.IMAGE_CAPTURE
Cat:None
Mime Type:
Data:
Extra:
Extra:
Package:
Class:
Target:Activity ]

3) Abre la grabación de video. Añade una pequeña espera seguida de Input-> Button(camara) para empezar a grabar:
Code:
Send Intent [
Action:android.media.action.VIDEO_CAPTURE
Cat:None
Mime Type:
Data:
Extra:
Extra:
Package:
Class:
Target:Activity ]

Mapas:

1) Google Maps: Navegar a un destino (daddr)
Code:
Send Intent [
Action:android.intent.action.VIEW
Cat:None
Mime Type:
Data:http://maps.google.com/maps?daddr=12.345678,76.543210
Extra:
Extra:
Package:
Class:
Target:Activity ]

2) Google maps: Navegar desde una dirección (saddr) a otra (daddr) (Edit alas coordenadas antes de usarlo)
Code:
Send Intent [
Action:android.intent.action.VIEW
Cat:None
Mime Type:
Data:http://maps.google.com/maps?saddr=12.345678,76.543210&daddr=19.345678,96.543210
Extra:
Extra:
Package:
Class:
Target:Activity ]

3) Google maps: Navegar desde una dirección (saddr) a otra (daddr) and dirflg=w para andando, r para transporte público, h evitar autopistas, t evitar peajes.
Code:
Send Intent [
Action:android.intent.action.VIEW
Cat:None
Mime Type:
Data:http://maps.google.com/maps?saddr=12.345678,76.543210&daddr=19.345678,96.543210&dirflg=w
Extra:
Extra:
Package:
Class:
Target:Activity ]

4) Google maps: ver localización
Code:
Send Intent [
Action:android.intent.action.VIEW
Cat:None
Mime Type:
Data:geo:12.345678,76.543210
Extra:
Extra:
Package:
Class:
Target:Activity ]

5) Google maps: Ver localización con zoom (z=1 to 23)
Code:
Send Intent [
Action:android.intent.action.VIEW
Cat:None
Mime Type:
Data:geo:12.345678,76.543210?z=11
Extra:
Extra:
Package:
Class:
Target:Activity ]

6) Google maps: Ver buscar localización:
Code:
Send Intent [
Action:android.intent.action.VIEW
Cat:None
Mime Type:
Data:geo:0,0?q=downing+street+london
Extra:
Extra:
Package:
Class:
Targy ]

7) Abrir la localización de los contactos en G+
Referencia: https://groups.google.com/forum/#!to...er/i4PS01GcBFE
Code:
Send Intent [
Action:com.google.android.apps.plus.LOCATION_PLUS_ MAP
Cat: Default
Mime Type:
Data:
Extra:
Extra:
Package:com.google.android.apps.plus
Class:
Target:Activity ]

Evernote

Ref:
http://dev.evernote.com/doc/articles...id_intents.php
http://discussion.evernote.com/topic...notebook-guid/

1) Crear una nota nueva con título y texto específico:
Code:
Send Intent [
Action:com.evernote.action.CREATE_NEW_NOTE
Cat:None
Mime Type:
Data:
Extra:android.intent.extra.TITLE: Blah tITLE
Extra:android.intent.extra.TEXT: Blah text
Package:
Class:
Target:Activity ]

2) Crear una nueva nota con un título especifico en un libro de notas específico:
Code:
Send Intent [
Action:com.evernote.action.CREATE_NEW_NOTE
Cat:None
Mime Type:
Data:
Extra:android.intent.extra.TITLE:Specific notebook %DATE
Extra:NOTEBOOK_GUID: (Your notebook GUID)
Package:
Class:
Target:Activity ]

3) Crear una nueva nota with no GUI-input y un contenido específico. Usando un campo extra también puedes indicar el título.
Code:
Send Intent [
Action:com.evernote.action.CREATE_NEW_NOTE
Cat:None
Mime Type:
Data:
Extra:QUICK_SEND:true
Extra:android.intent.extra.TEXT: Quick send text
Package:
Class:
Target:Activity ]

4) Abre una nota en particular. Reemplaza (Your note GUID) con el valor actual:
Code:
Send Intent [
Action:com.evernote.action.VIEW_NOTE
Cat:None
Mime Type:
Data:
Extra:NOTE_GUID: (Your note GUID)
Extra:
Package:
Class:
Target:Activity ]

5) Muestra la pantalla de Evernote de Snapshot.
Code:
Send Intent [
Action:com.evernote.action.NEW_SNAPSHOT
Cat:None
Mime Type:
Data:
Extra:
Extra:
Package:
Class:
Target:Activity ]

6) Añade una nueva nota de voz:
Code:
Send Intent [
Action:com.evernote.action.NEW_VOICE_NOTE
Cat:None
Mime Type:
Data:
Extra:
Extra:
Package:
Class:
Target:Activity ]

7) Muestra la pantalla de busqueda de Evernote.
Code:
Send Intent [
Action:com.evernote.action.SEARCH
Cat:None
Mime Type:
Data:
Extra:
Extra:
Package:
Class:
Target:Activity ]

P.S.: To find NOTE_GUID and NOTEBOOK_GUID read this
Notebook GUID:
1) Sign in to Evernote.com.
2) Select the notebook you want the GUID for.
3) The GUID of the notebook is in the URL, typically after "Home.action#b=" and stops at "&st" and is a combination of alpha and numeric characters and dashes.


Facebook

Hay un montón de opciones para mostrar las actividades de Facebook. Pueden ser lanzadas de manera pareccida a los tres ejemplos que indico abajo:
Refer http://stackoverflow.com/questions/4...from-other-app para otras opciones.

1) Eventos:
Send Intent [ Action:android.intent.action.VIEW Cat:None Mime Type: Data:fb://events Extra: Extra: Package: Class: Target:Activity ]

2) Amigos:

Send Intent [ Action:android.intent.action.VIEW Cat:None Mime Type: Data:fb://friends Extra: Extra: Package: Class: Target:Activity ]

3) Chats:
Send Intent [ Action:android.intent.action.VIEW Cat:None Mime Type: Data:facebook:/chat Extra: Extra: Package: Class: Target:Activity

VPN:

1) Para conectar:

* Action: android.intent.action.VIEW
* Cat: None
* Mime Type:
* Data:
* Extra: net.openvpn.openvpn.AUTOSTART_PROFILE_NAME: example.com/autologin
* Extra:
* Package: net.openvpn.openvpn
* Class: net.openvpn.openvpn.OpenVPNClient
* Target: Activity

2)Para desconectar:
* Action: android.intent.action.VIEW
* Cat: None
* Mime Type:
* Data:
* Extra:
* Extra:
* Package: net.openvpn.openvpn
* Class: net.openvpn.openvpn.OpenVPNDisconnect
* Target: Activity

ARCHIVO:

Aquí están los intents para abrir archivos o direcctorios. Se muestran como una sentencia en el shell pero son fácilmente trasladables a la acción de Tasker:

1) Abrir un archivo con el explorador por defecto:
Code:
am start -a android.intent.action.VIEW -d "file:///sdcard/"

2) Abrir un archivo con el explorador indicado:
Code:
am start -a android.intent.action.VIEW -d "file:///sdcard/"

3) También puedes especificar el campo mime para forzar abrir un archive de texto con el editor de texto:
Código:
am start -a android.intent.action.VIEW -d "file:///sdcard/file.txt" -t "text/plain"

ESP

1)Empezar:
Código:
Action: android.intent.action.MAIN
Package: com.estrongs.android.pop
Class: com.estrongs.android.pop.ftp.ESFtpShortcut
Target: Activity

2 )Parar:
Código:
Misc-Send Intent,
Action: android.intent.action.MAIN
Extra1: mode:2
Package: com.estrongs.android.pop
Class: com.estrongs.android.pop.ftp.ESFtpShortcut
Target: Activity

Screem dimmer:

1) Interruptor START / STOP
Code:
Send Intent [
Action:sebmorand.brightcom.action.TOGGLE
Cat:None
Mime Type:
Data:
Extra:
Extra:
Package:
Class:
Target:Service ]

2) Dimmer START
Code:
Send Intent [
Action:sebmorand.brightcom.action.START
Cat:None
Mime Type:
Data:
Extra:
Extra:
Package:
Class:
Target:Service ]

3) Dimmer STOP
Code:
Send Intent [
Action:sebmorand.brightcom.action.STOP
Cat:None
Mime Type:
Data:
Extra:
Extra:
Package:
Class:
Target:Service ]

4) Dimmer Mas opacidad:
Code:
Send Intent [
Action:sebmorand.brightcom.action.MORE_OPACITY
Cat:None
Mime Type:
Data:
Extra:
Extra:
Package:
Class:
Target:Service ]

5) Dimmer Menos opacidad:
Code:
Send Intent [
Action:sebmorand.brightcom.action.LESS_OPACITY
Cat:None
Mime Type:
Data:
Extra:
Extra:
Package:
Class:
Target:Service ]

Light flow:

com.rageconsulting.android.lightflow.SLEEP_TOGGLE

com.rageconsulting.android.lightflow.SLEEP_ON

com.rageconsulting.android.lightflow.SLEEP_OFF

FDO: Mlesir.

maid450
04/02/14, 10:25:40
Buen aporte! La verdad es que los intents son un sistema muy interesande desde un punto de vista técnico, y saberlos usar desde Tasker como dices puede abrir muchas puertas.
Simplemente quería aportar un poco sobre lo que sé de ellos.
Si a alguien le interesa ahondar en el tema y no le da miedo el inglés puede consultar la página sobre los intents (http://developer.android.com/reference/android/content/Intent.html) de la web de información para desarrolladores, no todo lo que se dice es sobre programación, también se habla de los conceptos detrás de los intents.

Un Intent en si, es como un paquete de información con ciertos datos que el sistema operativo y las aplicaciones pueden "lanzar" y a su vez pueden definir filtros para recibir los que les interesen.
Veamos primero los datos que pueden componer un intent:
Acción: La acción a realizar (sorpresa), es opcional, pero en la mayoría de los casos pondremos algo.
Hay acciones genéricas del sistema (que son las que se usan con mayor frecuencia) como por ejemplo android.intent.action.VIEW para "ver" algo (abrir la ficha de un contacto, ver una imágen, una web, abrir un fichero de texto), android.intent.action.EDIT para "editar" algo (abrir un editor de imágenes para retocar una foto, un fichero de texto para editarlo, la información de un contacto), android.intent.action.SEND y android.intent.action.SENDTO para enviar datos (es lo que manda el sistema cuando le damos al botón "compartir" de una app, por ejemplo, la diferencia entre SEND y SENDTO en principio es que en la segunda especificas un destino concreto y en la primera no, pero por lo que diré despues la verdad es que es confuso y no le veo mucho sentido a que existan las 2...).
Las aplicaciones también pueden definir sus propias acciones para hacer cosas específicas de su aplicación, estas suelen empezar por el paquete de su app, por ejemplo: "au.com.shiftyjelly.pocketcasts.action.PLAY" para emular el "play" en pocketcasts.
Categoría: añade más información sobre la acción del intent, casi siempre será "android.intent.category.DEFAULT" pero en determinados casos puede ser otra.
Tipo Mime: indica el tipo de datos que contiene el intent, es opcional, pero si por ejemplo queremos enviar texto y no especificamos una aplicación concreta, poniendo aqui el tipo "text/plain" nos mostrará una lista de las apps que pueden enviar texto (email, mensajería instantánea...), mientras que si no lo ponemos podría mostrar también apps que solo permiten enviar imágenes.
Datos: Los datos del intent, aunque pudiera parecer lógico que se usara para poner por ejemplo el texto en una acción SEND de texto, los datos deben ser una URI (formato tipo URL), con lo que se usa para decir por ejemplo que telefono marcar en una accion DIAL (tel:XXXX), la ruta del fichero a editar en una accion EDIT (file:///ruta/a/fichero), etc...
Extras: Datos adicionales inluidos en el intent. Se pueden usar para cualquier cosa dependiendo de la acción y la aplicación, Tasker por ejemplo los usa entre otras para comunicar las variables entre Tasker y sus plugins, por ejemplo. Estos tienen tela porque no forman parte de los filtros, con lo que no se puede saber si una aplicación los usa si el desarrollador no lo documenta.
Igual que las acciones, los hay estándar del sistema como por ejemplo "android.intent.extra.SUBJECT" o "android.intent.extra.TEXT" para indicar el asunto y/0 texto para un email o mensajería instantanea o cada aplicación puede definir sus propios. Tasker solo permite enviar 2.
Paquete: Permite especificar hacia que que app va dirigida el intent, evitando que otras respondan a el.
Clase: En caso de que una app tenga varias pantallas (activities) o servicios que puedan responder a un mismo intent con finalidades distintas, permite especificar exactamente a cual va dirigida.
Por ejemplo en el que has puesto de "OpenVPN", la cción VIEW dirigida hacia la clase "net.openvpn.openvpn.OpenVPNClient" conecta a la VPN, mientras que el mismo intent dirigido hacia "net.openvpn.openvpn.OpenVPNDisconnect" la desconecta.
Target: Indica si el objetivo del intent es una pantalla de una app (activity), un servicio en segundo plano (service) o un "escuchador de difusiones" (Broadcast receiver, en español suena fatal).
Para los usos de un usuario normalmente será una activity.

Como veis, la mayoría de los datos son opcionales, pero nos permiten refinar más exactamente lo que queremos hacer como he ido explicando por ejemplo en el tipo mime, la categoría, el paquete, etc...
Pongamos por ejemplo este de enviar texto que has puesto:

Action:android.intent.action.SEND
Cat: Default
Mime Type:text/plain
Data:
Extra:android.intent.extra.TEXT: MY TEST TEXT
Extra:
Package:
Class:
Target:Activity
Con esta información Android saca su megafono y dice: "se buscan aplicaciones que tengan activities que puedan hacer android.intent.action.SEND con datos de categoría Default y tipo text/plain" las aplicaciones en cuestion (Twitter, Whatsapp, Gmail, etc...) responderán, por lo cual android mostrará la típica lista de decisión "con qué aplicación de estas quieres hacer esto?" y al elegir una, android le envía el intent completo con todos sus datos, los extras, etc...
Si se enviase el mismo intent especificando el package de twitter, solo esta podría contestar y por eso se enviaría directamente a la app sin mostrar la lista.

El tema de los intents broadcast (difusión) los usa el sistema operativo para muchas cosas de "interés general" para otras aplicaciones, por ejemplo "android.intent.action.BATTERY_CHANGED", "android.intent.action.ACTION_POWER_CONNECTED", "android.intent.action.BOOT_COMPLETED", etc... a los cuales se suscriben ciertas apps que necesitan saber esa información (os suenan de contextos de tasker? ;) ese es el motivo de que estos no gasten prácticamente batería, Tasker no está preguntando cada X tiempo si pasan esas cosas, el propio sistema lo va diciendo tanto si está tasker instalado como si no, y tasker solo se pone a escucharlos si se definen perfiles que los usen)

enlagar
05/02/14, 11:43:30
Muy interesante el hilo. Dejo unos Intents que para configurarlos y que me parecen muy útiles:

Xposed Frameworks + módulo GravityBox para cambiar entre 2G/3G/4G:

1) Cambiar a 2G:
Código:
Acción: gravitybox.intent.action.CHANGE_NETWORK_TYPE
Categ:
Tipo Mime:
datos:
extra: networkType:1
extra:
paquete:
Clase:
Objetivo:

2) Cambiar a 3G:
Código:
Acción: gravitybox.intent.action.CHANGE_NETWORK_TYPE
Categ:
Tipo Mime:
datos:
extra: networkType:2
extra:
paquete:
Clase:
Objetivo:

3) Cambiar a 2G+3G:
Código:
Acción: gravitybox.intent.action.CHANGE_NETWORK_TYPE
Categ:
Tipo Mime:
datos:
extra: networkType:3
extra:
paquete:
Clase:
Objetivo:

4) Cambiar a 4G (LTE)
Código:
Acción: gravitybox.intent.action.CHANGE_NETWORK_TYPE
Categ:
Tipo Mime:
datos:
extra: networkType:9
extra:
paquete:
Clase:
Objetivo:

En la última actualización de GravityBox, he visto que han incluido 2 más, pero que creo que no son para EEUU y no para España. Los dejo por si acaso. Creo que solo habría que cambiar en Extra el "networkType":

--- added shortcut for GSM/WCDMA preferred network mode (type 0)
--- added shortcut for LTE Global network mode (type 10)

mlesir
06/02/14, 02:01:58
Gracias Enlagar por el aporte. Creo que ya estan en la lista, salvo el de 4G. En cuanto pueda lo compruebo y añado lo que corresponda. Por cierto tu tambien tienes un Chromecast eh? Bueno ya hablaremos a ver si se le puede meter mano con Tasker.
Maid genial tu aporte. Te parece q edite el primer post y juntemos todo? Quieres hacerlo tu o lo hago yo? Si lo hago yo si quieres antes te paso una copia por privado a ver q te parece.

maid450
06/02/14, 08:05:26
Maid genial tu aporte. Te parece q edite el primer post y juntemos todo? Quieres hacerlo tu o lo hago yo? Si lo hago yo si quieres antes te paso una copia por privado a ver q te parece.
Me parece perfecto, no hace falta que me lo mandes, coge lo que consideres de mi post y añadelo al primero ;-)

enlagar
12/02/14, 11:41:01
Por cierto tu tambien tienes un Chromecast eh? Bueno ya hablaremos a ver si se le puede meter mano con Tasker.

Cierto! jeje.. al final HTCmania no es tan grande! Estaré atento a ver que se te ocurre.

ATaskREADOS
21/02/14, 12:52:13
Listo. YA está hecho el "refrito" de tutorial. Creo que ha quedado bastante bien, la verdad es que Maid lo redactaste de tal manera que ha sido muy fácil. Cualquier cosa que quieras cambiar o que veas que no esta del todo bien lo cambiamos. Gracias como siempre Maid.

FDO: Mlesir

mlesir
21/02/14, 13:38:12
Más intents: (extraidos de dos post de “Peter Goncharouk” en la Comunidad Autoapps en Google Plus):

For google plus
action - android.intent.action.VIEW
cat - Default
data -http://plus.google.com/u/0/people/find (to open people tab)
or http://plus.google.com/u/o/events (to open events tab)
or http://plus.google.com/u/0/communities (to open communties tab)
package - com.google.android.apps.plus
class - com.google.android.apps.plus.phone.UrlGateway
target - Activity

action - android.intent.action.VIEW
cat - Default
data -http://plus.google.com/u/0/me (to open your profile page)
package - com.google.android.apps.plus
class - com.google.android.apps.plus.phone.UrlGateway
target - Activity


For IMDB
action - android.intent.action.VIEW
cat - Default
data - http://www.imdb.com/showtimes/ (opens movies showing tab)
package - com.imdb.mobile
class - com.imdb.mobile.intents.IntentsActivity
target – Activity

action - android.intent.action.VIEW
cat - Default
data - http://www.imdb.com/event (opens events page)
package - com.imdb.mobile
class - com.imdb.mobile.intents.IntentsActivity
target - Activity


For Wikipedia app
opens specific wikipedia search page (variable i set in this intent %srch) . Each word in query (%srch) must start with capital letter . Best to load app first followed by 2s Wait action , then intent . Also recommended to back out of wiki page to home . Query must be a entry in Wiki's pages . Can use autosearch wiki app first for search titles . Use with caution
{"id":"1ceefeee-0156-4c29-aecf-c1fcc0c5279c","name":"Open Specific Wikipedia Page","appname":"AutoShare","package":"org.wikipedia","target":"Activity","data":"http:\/\/en.wikipedia.org\/wiki\/%srch","action":"android.intent.action.VIEW","class":"org.wikipedia.WikipediaActivity","categories":[{"category":"android.intent.category.BROWSABLE","name":"browser"}],"hasOutput":false,"extras":[{"isOutput":false,"type":"Integer","description":"mmmm?","key":"com.google.android.shared.util.SimpleIntentStarter .ERROR_TOAST_ID:2131363032","name":"extra1"},{"isOutput":false,"type":"String","description":"mmmm?","key":"android.os.Bundle:com.android.browser.headers","name":"extra2"},{"isOutput":false,"type":"Boolean","description":"mmmm?","key":"com.google.android.shared.util.SimpleIntentStarter .USE_FAST_FADE_TRANSITION:true","name":"extra3"}]}

For google maps
action - android.intent.action.VIEW
cat - default
data - http://maps.google.com/maps/?myl=saddr&t=k(opens with satellite tab enabled for your location )
or - http://maps.google.com/maps/?myl=saddr&layer=t (opens with traffic tab enabled for your location)
package - com.google.android.apps.maps
target - activity

ATaskREADOS
21/02/14, 14:21:24
Gracias Enlagar por el aporte. Subido al recopilatorio. Por cierto que normal que te dijera que ya estaban en la lista, los pusiste tu hace tiempo, aunque el de 4g no estaba.
Lo que he hecho es poner el enlace a los dos post ( el que publicaste y este). Tu me dirás si es mejor ponerlo a este sólo o son complementarios.
Aquí tienes la copa virtual que premia a los que aportan al foro: :winner: Gracias.

FDO: mlesir

maid450
21/02/14, 14:25:38
Listo. YA está hecho el "refrito" de tutorial. Creo que ha quedado bastante bien, la verdad es que Maid lo redactaste de tal manera que ha sido muy fácil. Cualquier cosa que quieras cambiar o que veas que no esta del todo bien lo cambiamos. Gracias como siempre Maid.

Perfecto, solo hay un fallo que estaba tambien mal en mi post:

Acción: La acción a realizar (sorpresa), es opcional, pero en la mayoría de los casos pondremos algo.

Se ve que corrigiendo o algo me comí el final de la frase... jeje

Lukevalci
21/02/14, 22:25:48
No consigo hacer el cambio entre 2g y 3g con el xposed + gravitybox.
Hay que tener activo algo en el modulo tal vez?

Caravantes
16/03/14, 19:08:45
El-Androide-Libre está publicando una especie de curso titulado "Aprende Android en 20 conceptos". La lección o concepto 7 está dedicada a los Intents.
http://www.elandroidelibre.com/2014/03/aprende-android-en-20-conceptos-conceptos-7-y-8.html

z3us
16/03/14, 21:17:58
Oruxmaps:

com.oruxmaps.INTENT_START_RECORD_NEWTRACK : Inicia grabación de nuevo track
com.oruxmaps.INTENT_START_RECORD_NEWSEGMENT: Inicia grabación de nuevo segmento.
com.oruxmaps.INTENT_START_RECORD_CONTINUE : continúa la grabación
com.oruxmaps.INTENT_STOP_RECORD : detiene la grabación
com.oruxmaps.INTENT_NEW_WAYPOINT : Añade un waypoint en la posición actual

mlesir
11/05/14, 14:12:12
Grabar video:

https://plus.google.com/117587078108302060044/posts/HiNZw5dmLDQ

isaakmg
24/05/14, 12:35:56
Muy interesante el hilo. Dejo unos Intents que para configurarlos y que me parecen muy útiles:

Xposed Frameworks + módulo GravityBox para cambiar entre 2G/3G/4G:

1) Cambiar a 2G:
Código:
Acción: gravitybox.intent.action.CHANGE_NETWORK_TYPE
Categ:
Tipo Mime:
datos:
extra: networkType:1
extra:
paquete:
Clase:
Objetivo:

2) Cambiar a 3G:
Código:
Acción: gravitybox.intent.action.CHANGE_NETWORK_TYPE
Categ:
Tipo Mime:
datos:
extra: networkType:2
extra:
paquete:
Clase:
Objetivo:

3) Cambiar a 2G+3G:
Código:
Acción: gravitybox.intent.action.CHANGE_NETWORK_TYPE
Categ:
Tipo Mime:
datos:
extra: networkType:3
extra:
paquete:
Clase:
Objetivo:

4) Cambiar a 4G (LTE)
Código:
Acción: gravitybox.intent.action.CHANGE_NETWORK_TYPE
Categ:
Tipo Mime:
datos:
extra: networkType:9
extra:
paquete:
Clase:
Objetivo:

En la última actualización de GravityBox, he visto que han incluido 2 más, pero que creo que no son para EEUU y no para España. Los dejo por si acaso. Creo que solo habría que cambiar en Extra el "networkType":

--- added shortcut for GSM/WCDMA preferred network mode (type 0)
--- added shortcut for LTE Global network mode (type 10)


Muy interesante el inttent de gravity box para cambiar el modo de red. Gracias por el aporte.

Cómo sería el inttent con gravity para activar el GPS y desactivarlo?

Gracias de antemano....

isaakmg
24/05/14, 14:38:30
Encontré activar GPS con gravity box:

https://groups.google.com/forum/m/#!topic/tasker/SZvowZOx2gE

send intent -> action: gravitybox.intent.action.SET_LOCATION_MODE -> extra: locationMode:3


* *exit task (gps battery save): send intent -> action: gravitybox.intent.action.SET_LOCATION_MODE -> extra: locationMode:2


#############################


Intent:*
gravitybox.intent.action.SET_LOCATION_MODE
Extra: locationMode - integer, values:
0 - off
1 - sensors only
2 - battery saving
3 - high accuracy

El problema viene en que aunque ejecuta bien el inttent, te pide confirmar. Cómo solucionarlo para saltarse ese paso? Tanto al activar en la entrada, como desactivar en la salida.... Gracias de antemano...

http://img.tapatalk.com/d/14/05/24/e6u5yga5.jpg

mlesir
24/05/14, 14:43:50
Has probado a activarlo con secure settings? Igual no te pide confirmación.
En todo caso puedes hacer que acepte con emular pulsaciones en pantalla, viene en el recopilatorio cómo se hace.

isaakmg
24/05/14, 14:51:19
Has probado a activarlo con secure settings? Igual no te pide confirmación.
En todo caso puedes hacer que acepte con emular pulsaciones en pantalla, viene en el recopilatorio cómo se hace.

Me he bajado secure settings, pero no sé como hacerlo.

En cuanto a lo emular pulsaciones, lo he intentado sin éxito.

Estoy muy verde en esto.

Gracias por la respuesta.

mlesir
24/05/14, 14:56:31
Secure settings lo que hace es añadir acciones a tasker. Las tienes en la categoría de acciones "plugin" eliges secure y hay buscas la de gps.
Antes tendrás que instalar el helper de secure mira en su página o las instrucciones q vienen en el plugin.

isaakmg
24/05/14, 16:01:51
Conseguido con el modulo xposed disable location consent.

Es más chapucero, pero práctico para la gente que como yo, está muy verde.

Gracias por el interés mostrado. :)

Rsc
02/09/15, 12:31:35
Buenas, he estado investigando un poco pero no doy con la solución. Estoy tratando de mandar un intent a un contacto de Whastapp concreto.

Por lo pronto siguiendo este tutorial, puedo mandar un intent con un texto plano, para que se abra con whatsapp directamente, después debo elegir de forma manual con que contacto quiero compartir ese texto.

El intent que mando es este:

Intent Enviar Whatsapp

Acción:android.intent.action.SEND
Categ.:Default
Tipo Mime:text/plain
Datos:
Extra:android.intent.extra.TEXT: Texto de prueba
Extra:
Extra:
Paquete:com.whatsapp
Clase:
Objetivo:Activity ]

En algunos foros he leido que hay que añadir el ID del contacto, pero lo he intentado de muchas maneras y no hay forma. También he probado con el plugin autoshortcut, que si que deja crear un atajo a un contacto concreto, pero ni aún copiando el comando que figura en el plugin lo consigo.

Un saludo.

isaakmg
11/08/16, 00:21:50
Hola chicos. Veo que el hilo anda un poco caído. Voy a subirlo un poco. ;)

Estoy buscando los intents para activar y desactivar la aplicación Speaky for notification

https://play.google.com/store/apps/details?id=com.one.speakify

Ya he escrito al desarrollador, hace semanas, pero no me dice nada.

He intentado sacar el intent con la app intent intercept y no lo consigo.

Si me ayudáis os estaría agradecido.

Saludos.

Enviado desde mi MI 5 mediante Tapatalk

ATaskREADOS
29/08/16, 02:14:52
Añadido al recopilatorio/sección Intents este tutorial y video en inglés de la web de NotEnouhTech:

http://www.notenoughtech.com/tasker/android-intents-in-tasker/

Fdo: Mlesir.

Caravantes
29/08/16, 17:33:17
Añadido al recopilatorio/sección Intents este tutorial y video en inglés de la web de NotEnouhTech:
http://www.notenoughtech.com/tasker/...nts-in-tasker/

Yo no encuentro ahí ningún vídeo, pero el enlace sigue siendo muy valioso; gracias. Destaco un fragmento del texto, que copio traducido del inglés:

En Tasker, la forma más fácil de ejecutar un intent es utilizar AutoShare . Ya hay varios intents disponibles para ser descargados a su aplicación... También hay una página de constructor de la intención que es muy útil!...

Efectivamente, resulta que Joao tiene "recopilados" y configurados un montón de intents en formato XML, para que puedan ser directamente utilizados por medio de su app AutoShare.

Investigaré seriamente este tema porque parece que nos ayuda a entender la estructura de un intent y -sobre todo- porque nos va a facilitar mucho el uso de intents relacionados con apps y servicios populares, como los siguientes:


Google Now
Google+
Google Play Music
Google Translate
Google Play Games
Search and Play Media (Search and Play Album, etc)
Media Control (Play/Pause Down Play/Pause Up, etc)
Image (Take Photo, etc)
BubbleUPnP
Twilight
Sleep as Android
Poweramp
Evernote
Pocket Casts
ES File Explorer
Clock (Set Alarm, etc)
Pick Stuff: use results in Tasker
Open File
Send Email
Browse URL
Search and Play Media
Shazam It
SoundHound It
Send AVRCP Data
Yatse Voice Command
Open Contact
IMDB
Wikipedia Open Page
Recent Apps
Search TV Show Favs
Search Netflix
Open App Settings
Uninstall App


Todo eso, y más, en http://joaoapps.com/autoshare/intents/

Enlace a la app AutoShare: https://play.google.com/store/apps/details?id=com.joaomgcd.autoshare

Mx WaR HaBiB
25/09/17, 23:19:19
buenas tardes

revisando los metodos para reabrir una aplicacion en 2do plano me encontre con el "envio de intent" alguien sabe si con esto puedo abrir una app sin entrar directamente?

mi teoria es que ver el archivo AndroidManifest.xml (adjunto dato):

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

-<manifest platformBuildVersionName="6.0-2438415" platformBuildVersionCode="23" package="com.lennox.keycut" xmlns:android="http://schemas.android.com/apk/res/android">

<uses-feature android:required="false" android:name="android.hardware.telephony"/>

<uses-feature android:required="false" android:name="android.hardware.nfc"/>

<uses-feature android:required="false" android:name="android.hardware.camera"/>

<uses-feature android:required="false" android:name="android.hardware.location"/>

<uses-feature android:required="false" android:name="android.hardware.location.network"/>

<uses-feature android:required="false" android:name="android.hardware.location.gps"/>

<uses-feature android:required="false" android:name="android.hardware.bluetooth_le"/>

<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>

<uses-permission android:name="android.permission.BLUETOOTH"/>

<uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>

<uses-permission android:name="android.permission.BROADCAST_STICKY"/>

<uses-permission android:name="android.permission.CALL_PHONE"/>

<uses-permission android:name="android.permission.CAMERA"/>

<uses-permission android:name="android.permission.CAMERA.FLASHLIGHT"/>

<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"/>

<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>

<uses-permission android:name="android.permission.DISABLE_KEYGUARD"/>

<uses-permission android:name="android.permission.EXPAND_STATUS_BAR"/>

<uses-permission android:name="android.permission.FLASHLIGHT" android:protectionLevel="normal" android:permissionGroup="android.permission-group.HARDWARE_CONTROLS"/>

<uses-permission android:name="android.permission.GET_TASKS"/>

<uses-permission android:name="android.permission.INTERNET"/>

<uses-permission android:name="android.permission.KILL_BACKGROUND_PROCESSES"/>

<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS"/>

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>

<uses-permission android:name="android.permission.READ_CALL_LOG"/>

<uses-permission android:name="android.permission.READ_CONTACTS"/>

<uses-permission android:name="android.permission.READ_PHONE_STATE"/>

<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>

<uses-permission android:name="android.permission.RECORD_AUDIO"/>

<uses-permission android:name="android.permission.REORDER_TASKS"/>

<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>

<uses-permission android:name="android.permission.VIBRATE"/>

<uses-permission android:name="android.permission.WAKE_LOCK"/>

<uses-permission android:name="android.permission.WRITE_CALL_LOG"/>

<uses-permission android:name="android.permission.WRITE_CONTACTS"/>

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

<uses-permission android:name="android.permission.WRITE_SETTINGS"/>

<uses-permission android:name="android.permission.INTERNET"/>

<uses-permission android:name="android.permission.GET_ACCOUNTS"/>

<uses-permission android:name="android.permission.WAKE_LOCK"/>

<permission android:name="com.lennox.keycut.permission.C2D_MESSAGE" android:protectionLevel="signature"/>

<uses-permission android:name="com.lennox.keycut.permission.C2D_MESSAGE"/>

<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE"/>

<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>

<uses-permission android:name="android.permission.READ_PHONE_STATE"/>

<uses-permission android:name="android.permission.SEND_SMS"/>

<uses-permission android:name="android.permission.CALL_PRIVILEGED"/>

<uses-permission android:name="android.permission.CHANGE_COMPONENT_ENABLED_STATE"/>

<uses-permission android:name="android.permission.CONNECTIVITY_INTERNAL"/>

<uses-permission android:name="android.permission.MEDIA_CONTENT_CONTROL"/>

<uses-permission android:name="android.permission.MODIFY_PHONE_STATE"/>

<uses-permission android:name="android.permission.REBOOT"/>

<uses-permission android:name="android.permission.RECOVERY"/>

<uses-permission android:name="android.permission.SHUTDOWN"/>

<uses-permission android:name="android.permission.WRITE_SECURE_SETTINGS"/>

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>

<uses-feature android:required="true" android:glEsVersion="0x00020000"/>

<uses-permission android:name="android.permission.USE_CREDENTIALS"/>


-<application android:name="com.lennox.keycut.KeyCutApplication" android:theme="@style/Theme.Custom" android:largeHeap="true" android:label="@string/app_name" android:icon="@drawable/ic_launcher" android:hardwareAccelerated="true" android:allowBackup="true">

<meta-data android:name="com.facebook.sdk.ApplicationId" android:value="@string/facebook_app_id"/>


-<activity android:name="com.lennox.authentication.EnterActivity" android:label="@string/app_name" android:launchMode="singleTop">


-<intent-filter>

<action android:name="android.intent.action.MAIN"/>

<category android:name="android.intent.category.DEFAULT"/>

</intent-filter>

</activity>


-<activity android:name="com.lennox.authentication.SigninActivity" android:label="@string/title_activity_signin" android:launchMode="singleTop">


-<intent-filter>

<action android:name="com.lennox.authentication.SIGNINACTIVITY"/>

<category android:name="android.intent.category.DEFAULT"/>

</intent-filter>

</activity>


-<activity android:name="com.lennox.authentication.ForgotpwdActivity" android:label="@string/title_activity_forgotpwd" android:launchMode="singleTop">


-<intent-filter>

<action android:name="com.lennox.authentication.FORGOTPWDACTIVITY"/>

<category android:name="android.intent.category.DEFAULT"/>

</intent-filter>

</activity>


-<activity android:name="com.lennox.authentication.SignupActivity" android:label="@string/title_activity_signup" android:launchMode="singleTop">


-<intent-filter>

<action android:name="com.lennox.authentication.SIGNUPACTIVITY"/>

<category android:name="android.intent.category.DEFAULT"/>

</intent-filter>

</activity>


-<activity android:name="com.lennox.authentication.VerifycodeActivity" android:label="@string/title_activity_verifycode" android:launchMode="singleTop">


-<intent-filter>

<action android:name="com.lennox.authentication.VERIFYCODEACTIVITY"/>

<category android:name="android.intent.category.DEFAULT"/>

</intent-filter>

</activity>


-<activity android:name="com.lennox.keycut.RequestCAB" android:label="@string/cab_toggel" android:launchMode="singleTop">


-<intent-filter>

<action android:name="com.lennox.authentication.REQUESTCAB"/>

<category android:name="android.intent.category.DEFAULT"/>

</intent-filter>

</activity>


-<activity android:name="com.lennox.keycut.CardDetailsActivity" android:label="@string/card_detalis_activity_label" android:launchMode="singleTop">


-<intent-filter>

<action android:name="com.lennox.authentication.CARDDETAILSACTIVITY"/>

<category android:name="android.intent.category.DEFAULT"/>

</intent-filter>

</activity>


-<activity android:name="com.lennox.keycut.BlankContainner" android:label="@string/blank_containner_label" android:launchMode="singleTop">


-<intent-filter>

<action android:name="com.lennox.authentication.BLANKCONTAINNER"/>

<category android:name="android.intent.category.DEFAULT"/>

</intent-filter>

</activity>


-<activity android:name="com.lennox.keycut.BlankContainnerWalkWithMe" android:label="@string/blank_containner_walk_with_me_label" android:launchMode="singleTop">


-<intent-filter>

<action android:name="com.lennox.authentication.BLANKCONTAINNERWALKWITHM E"/>

<category android:name="android.intent.category.DEFAULT"/>

</intent-filter>

</activity>


-<activity android:name="com.lennox.keycut.AddCardActivity" android:label="@string/add_card_label" android:launchMode="singleTop">


-<intent-filter>

<action android:name="com.lennox.authentication.ADDCARDACTIVITY"/>

<category android:name="android.intent.category.DEFAULT"/>

</intent-filter>

</activity>


-<activity android:name="com.lennox.keycut.RequestSafeDrink" android:label="@string/safe_drink" android:launchMode="singleTop">


-<intent-filter>

<action android:name="com.lennox.authentication.REQUESTSAFEDRINK"/>

<category android:name="android.intent.category.DEFAULT"/>

</intent-filter>

</activity>


-<activity android:name="com.lennox.keycut.SplashActivity" android:theme="@style/NoActionBar" android:label="@string/splash_activity" android:launchMode="singleTop">


-<intent-filter>

<action android:name="android.intent.action.MAIN"/>

<category android:name="android.intent.category.LAUNCHER"/>

</intent-filter>

</activity>


-<activity android:name="com.lennox.keycut.SequenceActivity" android:theme="@style/NoActionBar" android:label="@string/splash_activity" android:launchMode="singleTop">


-<intent-filter>

<action android:name="android.intent.action.MAIN"/>

<category android:name="android.intent.category.DEFAULT"/>

</intent-filter>

</activity>

<service android:name="com.lennox.keycut.services.UserLocationUpdateServi ce" android:exported="false" android:enabled="true"/>

<service android:name="com.lennox.keycut.services.TTSServices" android:exported="false" android:enabled="true"/>


-<activity android:name="com.lennox.btkey.BlankBLEScanContainner" android:label="@string/blank_ble_scan_containner_label" android:launchMode="singleTop">


-<intent-filter>

<action android:name="com.lennox.btkey.BLANKBLESCANCONTAINNER"/>

<category android:name="android.intent.category.DEFAULT"/>

</intent-filter>

</activity>

<service android:name="com.lennox.btkey.services.BluetoothLeService" android:enabled="true"/>

<service android:name="com.lennox.btkey.services.PlayWarningSoundServices" android:enabled="true"/>

<service android:name="com.lennox.btkey.services.PlayFindSoundServices" android:enabled="true"/>


-<receiver android:name="com.lennox.btkey.broadcasts.BroadcastReceiver_BLE_ GATT" android:enabled="true">


-<intent-filter>

<action android:name="com.mswitch.btkey.ACTION_GATT_CONNECTED"/>

<action android:name="com.mswitch.btkey.ACTION_GATT_DISCONNECTED"/>

<action android:name="com.mswitch.btkey.ACTION_GATT_SERVICES_DISCOVERED"/>

<action android:name="com.mswitch.btkey.ACTION_DATA_AVAILABLE"/>

</intent-filter>

</receiver>


-<activity android:name="com.lennox.keycut.KeyCutActivity" android:label="@string/app_name" android:launchMode="singleTop" android:windowSoftInputMode="adjustPan">


-<intent-filter>

<action android:name="android.intent.action.MAIN"/>

<category android:name="android.intent.category.DEFAULT"/>

</intent-filter>


-<intent-filter>

<action android:name="com.lennox.keycut.SETTINGS_ACTIVITY"/>

<category android:name="android.intent.category.DEFAULT"/>

</intent-filter>

</activity>


-<activity android:name="com.lennox.keycut.LongPressActivity" android:theme="@android:style/Theme.Translucent.NoTitleBar" android:launchMode="singleInstance">


-<intent-filter android:priority="2147483647">

<action android:name="android.speech.action.WEB_SEARCH"/>

<category android:name="android.intent.category.DEFAULT"/>

</intent-filter>


-<intent-filter android:priority="2147483647">

<action android:name="android.speech.action.VOICE_SEARCH_HANDS_FREE"/>

<category android:name="android.intent.category.DEFAULT"/>

</intent-filter>

</activity>


-<activity android:name="com.lennox.keycut.FakeLongPressActivity" android:theme="@android:style/Theme.Translucent.NoTitleBar" android:launchMode="singleInstance" android:enabled="false">


-<intent-filter android:priority="2147483647">

<action android:name="android.speech.action.WEB_SEARCH"/>

<category android:name="android.intent.category.DEFAULT"/>

</intent-filter>


-<intent-filter android:priority="2147483647">

<action android:name="android.speech.action.VOICE_SEARCH_HANDS_FREE"/>

<category android:name="android.intent.category.DEFAULT"/>

</intent-filter>

</activity>


-<receiver android:name="com.lennox.keycut.MediaButtonReceiver" android:enabled="true">


-<intent-filter android:priority="2147483647">

<action android:name="android.intent.action.MEDIA_BUTTON"/>

<category android:name="android.intent.category.DEFAULT"/>

</intent-filter>


-<intent-filter>

<action android:name="com.lennox.keycut.action.KEY_PRESS"/>

</intent-filter>


-<intent-filter>

<action android:name="com.lennox.keycut.action.KEY_LONGPRESS"/>

</intent-filter>


-<intent-filter>

<action android:name="com.lennox.keycut.intent.action.SAVE_PREFERENCES"/>

</intent-filter>


-<intent-filter>

<action android:name="com.mswitch.btkey.action.KEY_PRESS"/>

</intent-filter>

</receiver>


-<receiver android:name="com.lennox.keycut.BootReceiver" android:enabled="true">


-<intent-filter>

<action android:name="android.intent.action.BOOT_COMPLETED"/>

<action android:name="android.intent.action.QUICKBOOT_POWERON"/>

</intent-filter>

</receiver>


-<receiver android:name="com.lennox.keycut.CallStateReceiver" android:enabled="true">


-<intent-filter>

<action android:name="android.intent.action.PHONE_STATE"/>

</intent-filter>

</receiver>


-<receiver android:name="com.lennox.keycut.CodeReceiver" android:enabled="true">


-<intent-filter>

<action android:name="android.provider.Telephony.SECRET_CODE"/>

<data android:scheme="android_secret_code" android:host="539288"/>

</intent-filter>

</receiver>


-<receiver android:name="com.lennox.keycut.HeadsetReceiver" android:exported="false" android:enabled="true">


-<intent-filter>

<action android:name="com.lennox.keycut.action.HEADSET_PLUG"/>

</intent-filter>


-<intent-filter>

<action android:name="com.lennox.keycut.action.HEADSET_UNPLUG"/>

</intent-filter>


-<intent-filter>

<action android:name="com.lennox.keycut.action.DISABLE_SERVICE"/>

</intent-filter>


-<intent-filter>

<action android:name="com.lennox.keycut.action.RESTART_SERVICE"/>

</intent-filter>

</receiver>

<service android:name="com.lennox.keycut.KeyService" android:icon="@drawable/ic_launcher" android:enabled="true" android:process=":service"/>


-<service android:name="com.lennox.keycut.WearListenerService">


-<intent-filter>

<action android:name="com.google.android.gms.wearable.MESSAGE_RECEIVED"/>

<data android:scheme="wear" android:host="*" android:pathPrefix="/request-network"/>

</intent-filter>

</service>

<activity android:name="com.lennox.actions.ActivityPicker" android:theme="@style/Theme.Custom.Apps" android:label="@string/menu_activity_picker_label" android:finishOnCloseSystemDialogs="true"/>

<activity android:name="com.lennox.actions.ActivityShortcutPicker" android:theme="@style/Theme.Custom.Apps" android:label="@string/menu_activity_picker_label" android:finishOnCloseSystemDialogs="true"/>

<activity android:name="com.lennox.actions.ActionPickerTabs" android:theme="@style/Theme.Custom.ActionPicker" android:label="@string/action_picker_label" android:finishOnCloseSystemDialogs="true"/>


-<activity android:name="com.lennox.launchers.ActionLauncher" android:theme="@android:style/Theme.Translucent.NoTitleBar" android:label="@string/app_name_actions" android:launchMode="singleInstance" android:enabled="true" android:finishOnCloseSystemDialogs="true" android:taskAffinity="com.lennox.launchers" android:excludeFromRecents="true" android:configChanges="keyboardHidden|orientation|screenSize">


-<intent-filter>

<action android:name="com.lennox.actions.keycut.LAUNCH_ACTION"/>

<category android:name="android.intent.category.DEFAULT"/>

</intent-filter>

</activity>


-<activity android:name="com.lennox.launchers.ActivityLauncher" android:theme="@android:style/Theme.Translucent.NoTitleBar" android:label="@string/app_name_actions" android:launchMode="singleInstance" android:enabled="true" android:finishOnCloseSystemDialogs="true" android:taskAffinity="com.lennox.launchers" android:excludeFromRecents="true" android:configChanges="keyboardHidden|orientation|screenSize">


-<intent-filter>

<action android:name="com.lennox.actions.keycut.LAUNCH_ACTIVITY"/>

<category android:name="android.intent.category.DEFAULT"/>

</intent-filter>

</activity>

<activity android:name="com.lennox.actions.HotwordsActivity" android:theme="@android:style/Theme.Translucent.NoTitleBar" android:label="@string/hotword" android:launchMode="singleTask" android:finishOnCloseSystemDialogs="true" android:taskAffinity=".hotwords" android:excludeFromRecents="true" android:configChanges="keyboardHidden|orientation|screenSize"/>

<activity android:name="com.lennox.actions.HotwordSetupActivity" android:label="HotwordSetupActivity" android:finishOnCloseSystemDialogs="true" android:taskAffinity=".hotwords" android:excludeFromRecents="true" android:configChanges="keyboardHidden|orientation|screenSize"/>

<activity android:name="com.lennox.actions.ToolboxActivity" android:theme="@android:style/Theme.Translucent.NoTitleBar" android:label="@string/toolbox" android:launchMode="singleTask" android:finishOnCloseSystemDialogs="true" android:taskAffinity=".toolbox" android:excludeFromRecents="true" android:configChanges="keyboardHidden|orientation|screenSize"/>


-<receiver android:name="com.lennox.actions.KeyAdminReceiver" android:permission="android.permission.BIND_DEVICE_ADMIN">

<meta-data android:name="android.app.device_admin" android:resource="@xml/device_admin"/>


-<intent-filter>

<action android:name="android.app.action.DEVICE_ADMIN_ENABLED"/>

</intent-filter>

</receiver>

<activity android:name="com.lennox.actions.RebootDialog" android:theme="@style/TransparentDialogTheme" android:launchMode="singleTask" android:finishOnCloseSystemDialogs="true" android:taskAffinity=".reboot" android:excludeFromRecents="true"/>


-<receiver android:name="com.lennox.keycut.KeyCutWidgetProvider" android:label="@string/app_name">


-<intent-filter>

<action android:name="android.appwidget.action.APPWIDGET_UPDATE"/>

<action android:name="com.lennox.actions.keycut.WIDGET_PRESSED"/>

</intent-filter>

<meta-data android:name="android.appwidget.provider" android:resource="@xml/appwidget_info"/>

</receiver>

<service android:name="com.lennox.flashlight.FlashlightService" android:label="@string/toggle_flashlight" android:enabled="true" android:process=":flashlight"/>


-<receiver android:name="com.lennox.flashlight.FlashlightSwitch" android:label="@string/toggle_flashlight" android:exported="false" android:enabled="true" android:process=":flashlight">


-<intent-filter>

<action android:name="com.lennox.actions.keycut.FLASHLIGHT_TOGGLE"/>

<action android:name="com.lennox.actions.keycut.FLASHLIGHT_ABORT_CAMERA"/>

</intent-filter>

</receiver>

<service android:name="com.lennox.soundrecorder.RecorderService" android:exported="false"/>


-<receiver android:name="com.lennox.common.GcmBroadcastReceiver" android:permission="com.google.android.c2dm.permission.SEND">


-<intent-filter>

<action android:name="com.google.android.c2dm.intent.RECEIVE"/>

<action android:name="com.google.android.c2dm.intent.REGISTRATION"/>

<category android:name="com.lennox.keycut"/>

</intent-filter>

</receiver>


-<receiver android:name="com.lennox.keycut.receiver.ClickEventReceiver">


-<intent-filter>

<action android:name="myswitch.intent.action.click"/>

</intent-filter>

</receiver>

<service android:name="com.lennox.common.SendSMS" android:exported="false"/>

<service android:name="com.lennox.common.GCMNotificationIntentService"/>

<activity android:name="com.facebook.FacebookActivity" android:theme="@android:style/Theme.Translucent.NoTitleBar" android:label="@string/app_name" android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|s creenSize"/>

<meta-data android:name="io.fabric.ApiKey" android:value="219eb3cc2c65921079c4edc2430717eec9e51796"/>

<meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version"/>

<provider android:name="com.google.android.gms.measurement.AppMeasurementC ontentProvider" android:exported="false" android:authorities="com.lennox.keycut.google_measurement_service"/>


-<receiver android:name="com.google.android.gms.measurement.AppMeasurementR eceiver" android:enabled="true">


-<intent-filter>

<action android:name="com.google.android.gms.measurement.UPLOAD"/>

</intent-filter>

</receiver>

<service android:name="com.google.android.gms.measurement.AppMeasurementS ervice" android:exported="false" android:enabled="true"/>

<activity android:name="com.google.android.gms.ads.AdActivity" android:theme="@android:style/Theme.Translucent" android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|s creenSize|smallestScreenSize|uiMode"/>

<activity android:name="com.google.android.gms.ads.purchase.InAppPurchaseA ctivity" android:theme="@style/Theme.IAPTheme"/>

<activity android:name="com.google.android.gms.auth.api.signin.internal.Si gnInHubActivity" android:theme="@android:style/Theme.Translucent.NoTitleBar" android:exported="false" android:excludeFromRecents="true"/>

<activity android:name="com.uber.sdk.android.rides.RideRequestActivity" android:exported="false" android:screenOrientation="portrait"/>

<activity android:name="com.uber.sdk.android.rides.auth.LoginActivity" android:exported="false" android:screenOrientation="portrait"/>

<meta-data android:name="com.google.android.wearable.beta.app" android:resource="@xml/android_wear_micro_apk"/>

</application>

</manifest>

y de ahi aplicar el envio de intents...

segun yo quedaria asi (esto ya en Tasker):

Envio Intent:
Accion: android.intent.action.PHONE_STATE
Cat: Default
Tipo Mime: application/*
Datos: com.lennox.keycut.action.RESTART_SERVICE
...
Paquete: com.lennox.keycut
...
Objetivo: Service

pero no funciona... alguien que me pueda apoyar? :loco:

de antemano gracias :cucu:

danko9696
27/09/17, 13:08:36
buenas tardes

revisando los metodos para reabrir una aplicacion en 2do plano me encontre con el "envio de intent" alguien sabe si con esto puedo abrir una app sin entrar directamente?
Yo llevo tiempo intentando averiguar como conseguir lanzar con intents shortcuts (del estilo de los que permiten lanzar una tarea específica de Tasker, p.e.) sin conseguirlo, y lo que tu quieres hacer me parece bastante más complicado aún. Porque con los atajos está claro que la aplicación tiene un sistema preestablecido para poder ser usados, pero lo de lanzar una app en segundo plano no. Si esa app en segundo plano no tiene métodos internos para recibir intents no podrás hacerlo, si el creador de la app no ha permitido adrede esa posibilidad olvídate..

Aparte de eso, para el tema de intents no deberías fiarte mucho del androidmanifest. La recepción de intents puede generarse en tiempo real, o sea, una app puede no tener el menor rastro de que puede recibirlos y dinámicamente poder hacerlo sobre la marcha. Yo lo he hecho en Lightning Launcher para poder enviar desde Tasker intents personalizados y así sustituir el plugin.

Mx WaR HaBiB
27/09/17, 20:22:05
Yo llevo tiempo intentando averiguar como conseguir lanzar con intents shortcuts (del estilo de los que permiten lanzar una tarea específica de Tasker, p.e.) sin conseguirlo, y lo que tu quieres hacer me parece bastante más complicado aún. Porque con los atajos está claro que la aplicación tiene un sistema preestablecido para poder ser usados, pero lo de lanzar una app en segundo plano no. Si esa app en segundo plano no tiene métodos internos para recibir intents no podrás hacerlo, si el creador de la app no ha permitido adrede esa posibilidad olvídate..

Aparte de eso, para el tema de intents no deberías fiarte mucho del androidmanifest. La recepción de intents puede generarse en tiempo real, o sea, una app puede no tener el menor rastro de que puede recibirlos y dinámicamente poder hacerlo sobre la marcha. Yo lo he hecho en Lightning Launcher para poder enviar desde Tasker intents personalizados y así sustituir el plugin.

Hola danko9696!!! gracias por tomarte el tiempo en responder.

lo que pasa es que quiero hacer lo siguiente... hay una aplicacion que se cierra por la optimizacion de mi telefono y no puedo omitir la aplicacion para que no termine su proceso.

mi idea es en Tasker crear un Perfil donde cada 2 horas abra la aplicacion pero que no tenga que ser en primer plano (encender el movil, desbloquear, iniciar la app, y luego salir) puesto que creo es problematico ver mi movil encenderse cada 2 horas solo para eso...

entonces me vi a la tarea de ver si se podia con "ejecutar consola" con la siguiente funcion:

am start -a android.intent.action.MAIN -n com.lennox.keycut/com.lennox.keycut.action.RESTART_SERVICE

donde no funciona :loco:

luego estuve viendo el tema de los intent y pense que por ahi era el camino pero por lo que mencionas tampoco lo es :cry:

alguna sugerencia mi buen danko9696??? :risitas:

gracias por todo...

danko9696
27/09/17, 20:30:26
Si el proceso en segundo plano no está a la escucha no hay nada que hacer, lo más probable es que no lo esté y aunque sí lo esté es muy fácil que no aparezca en el manifest, con lo que deberías conocer qué enviar (suponiendo que se pueda). Lo único que se me ocurre es mandar un correo a los desarrolladores preguntando si es posible.