Bienvenido, soy Miguel y en esta ocasión les traigo este post.
Índice
Comunicación entre aplicaciones con filtros de intención
¿Qué es un filtro de intención?
Para comprender los conceptos básicos de ACTION_PROCESS_TEXT
, debe saber qué es un filtro de intención y cómo funciona. Así que comencemos desde cero.
¿Qué es una intención?
Una intención es el bloque de comunicación básico para activar una acción de otro componente de Android. Por lo general, la funcionalidad se reduce a tres casos de uso fundamentales: iniciar una actividad, un servicio o una transmisión.
Hay dos tipos de intenciones en Android.
Intenciones explícitas: Este tipo de intención se utiliza para activar otro componente en su aplicación porque conocemos el nombre de la clase de destino.
val send = Intent(this@MainActivity, SecondActivity::class.java)
startActivity(send)
Intenciones implícitas: Este tipo de intención nos ayuda a navegar por los componentes de los que no somos conscientes. Por ejemplo, para abrir una URL en el navegador externo, no conocemos el nombre del componente de la aplicación del navegador.
val send = Intent()
send.action = Intent.ACTION_VIEW
send.data = Uri.parse(url)
startActivity(send)
Entonces aquí tenemos que usar ACTION
. No es más que una cadena que especifica la acción genérica a realizar. Cuando desencadena una intención con ACTION
, las aplicaciones que soportan el ACTIONS
se mostrará (un caso de uso típico es compartir la intención).
Intención-Filtro
Hasta ahora, hemos visto todo desde el lado del remitente. ¿Qué pasa con el receptor y cómo las aplicaciones del receptor admiten ACTIONS
? La respuesta son los filtros de intención.
Al declarar un componente de Android en el manifiesto, podemos usar un intent-filter
etiqueta para registrar ese componente en uno o más filtros de intención. De acuerdo a Desarrolladores de Android:
“Cada filtro de intención especifica el tipo de intenciones que acepta en función de la acción, los datos y la categoría de la intención. El sistema entrega una intención implícita al componente de su aplicación solo si la intención puede pasar por uno de sus filtros de intención «.
Echar un vistazo:
<activity android:name="com.example.SplashActivity" android:theme="@style/AppThemeSplash"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity>
Uso de filtros de intención en el archivo de manifiesto
¿Por qué necesita ACTION_PROCESS_TEXT?
A partir de Android 6.0 Marshmallow, se introdujo una nueva barra de herramientas de selección de texto flotante que ofrece opciones como copiar, pegar y cortar más cerca del texto seleccionado.
Es bueno tener opciones universales, pero es igualmente importante mostrar las aplicaciones necesarias de la barra de herramientas. Por ejemplo, mostrar un traductor como una de las opciones cuando el usuario selecciona algún texto.
Mostrar aplicaciones que no están integradas en el sistema no depende del sistema operativo. La interacción debe ser de ambos lados. Aquí es donde ACTION_PROCESS_TEXT
entra la intención y entra.
¿Qué es ACTION_PROCESS_TEXT?
ACTION_PROCESS_TEXT
no es más que una ACTION
cadena que se introdujo en el nivel de API 23. El uso de esta acción con intent-filter
un componente de Android en el archivo de manifiesto indicará al sistema que esta aplicación puede manejar el texto seleccionado.
Entonces, el sistema operativo mostrará la aplicación respectiva en la barra de herramientas de selección de texto flotante. Una vez que el usuario selecciona una aplicación, se activa una intención implícita ACTION_PROCESS_TEXT
como ACTION
y el texto seleccionado en los extras para que el desarrollador pueda recuperarlos en el componente de Android respectivo.
Basta de teoría. Hagamos algo de codificación.
Configuración de filtros de intención
El primer paso debe ser implementar filtros de intención en el componente de Android que desea mostrar en la barra de herramientas flotante. Es bastante sencillo. Necesitamos incluir la intent-filter
etiqueta y establecer ACTION
como android.intent.action.PROCESS_TEXT
.
También podemos configurar el tipo de mímica para restringir su aplicación a una categoría específica (por ejemplo, para mostrar solo cuando se selecciona texto). Echar un vistazo:
<activity android:name=".ProcessTextActivity"> <intent-filter> <action android:name="android.intent.action.PROCESS_TEXT" /> <category android:name="android.intent.category.DEFAULT" /> <data android:mimeType="text/plain" /> </intent-filter> </activity>
Filtro de intención de procesamiento de texto
En ese momento, si ejecuta la aplicación y selecciona texto en cualquier lugar del dispositivo, su aplicación se mostrará en la barra de herramientas flotante.
Obtener el texto seleccionado
Ahora que hemos mostrado la aplicación en la barra de herramientas de selección de texto, el siguiente paso es manejar los datos entrantes. Esto es facil. Solo necesitamos verificar si la intención entrante ACTION
es android.intent.action.PROCESS_TEXT
:
if (intent.action != null && intent.action.equals(Intent.ACTION_PROCESS_TEXT) ){ }
Si es así true
, entonces necesitamos leer los datos de entrada. De forma predeterminada, la clave para leer los datos de entrada es Intent.EXTRA_PROCESS_TEXT
. Esto devolverá CharSequence
, que debemos convertir en una cadena y luego usar. Echar un vistazo:
if (intent.action != null && intent.action.equals(Intent.ACTION_PROCESS_TEXT) ){ if (intent.hasExtra(Intent.EXTRA_PROCESS_TEXT)){ inputData = intent.getStringExtra(Intent.EXTRA_PROCESS_TEXT) } }
Entrada de lectura de proceso de texto.
Actualizar el resultado
Habrá algunos casos en los que necesitemos devolver el texto (por ejemplo, si su aplicación es como una de esas fuentes con estilo, entonces deberá convertir los datos de entrada en su estilo respectivo y reemplazarlos en el archivo fuente).
Para hacer esto primero, necesitamos verificar si la fuente puede observar el resultado actualizado. Para esto, obtenemos otro parámetro en los extras de la intención – EXTRA_PROCESS_TEXT_READONLY
. Echar un vistazo:
isReadOnly = intent.getBooleanExtra( Intent.EXTRA_PROCESS_TEXT_READONLY, false)
Si es así true
, la fuente no puede actualizar el texto. Si es falso, podemos enviar el texto procesado a través de setResult
. Echar un vistazo:
Intent intent = new Intent(); intent.putExtra(Intent.EXTRA_PROCESS_TEXT, replacementText); setResult(RESULT_OK, intent);
Conclusión
Si los desarrolladores usan funciones como esta de la manera correcta (como en Wikipedia y Google Translate ), mejorará la calidad de Android. Por otro lado, su mal uso conducirá a una mala experiencia con Android.
No todas las aplicaciones necesitan usar este tipo de comunicación entre aplicaciones, por lo que le sugiero que aproveche la personalización del sistema operativo de Android solo si agrega valor a los usuarios finales.
Eso es todo por ahora. Espero que hayas aprendido algo útil.
¡Gracias por leer!
Añadir comentario