studio permisos multiples lector huellas huella escaner digitales dactilar android android-intent android-manifest android-6.0-marshmallow

permisos - En Android M, ¿cómo configurar las capacidades de "compartir directamente"(imagen, texto) y cómo consultar los elementos?



multiples permisos android studio (2)

Tengo una comprensión diferente de este futuro.

Hasta ahora, cuando el usuario quería compartir algo, se le pedía que eligiera la aplicación con la que desea compartir, y luego esta aplicación manejaba el recurso compartido.

Ahora, en lugar de que el usuario elija la aplicación, elegirá el contenido de la aplicación que manejará el recurso compartido. Cada una de esas opciones está encapsulada en android.service.chooser.ChooserTargetService .

Como ve en la imagen, muestra algunos productos de ChooserTargetService , el usuario ve algunos contactos sin almorzar o compartir por el momento.

Creo que su diálogo podría activarse de la misma manera.

Fondo

Según una nueva función en Android M (enlace aquí ), las aplicaciones externas a su aplicación pueden ofrecer una intención de compartir directa a una de sus actividades, permitiendo, por ejemplo, una aplicación de chat para compartir el contenido a un contacto exacto, para que pueda elija tanto la aplicación de chat como el contacto al mismo tiempo (un paso en lugar de 2). Esto se puede mostrar en esta imagen:

O, al menos eso es lo que he entendido por eso.

La pregunta

Tengo 2 preguntas con respecto a esta nueva característica:

  1. En la descripción, solo muestran qué incluir en el manifiesto, y mencionan el uso de "ChooserTargetService". ¿Qué se debe hacer para proporcionar los textos y las imágenes?

  2. Me gustaría saber cómo hacer lo contrario: ¿cómo puedo consultar todos los elementos de "compartir directamente" (imágenes, textos e intenciones) y ser capaz de mostrarlos en un cuadro de diálogo personalizado?

    Quiero hacerlo porque tengo un diálogo personalizado, que permite elegir qué compartir y cómo, y no solo a través de qué aplicación.


Pregunta 1

En la descripción, solo muestran qué incluir en el manifiesto, y mencionan el uso de "ChooserTargetService". ¿Qué se debe hacer para proporcionar los textos y las imágenes?

Comience por extender ChooserTargetService . Deberá devolver una List de ChooserTarget y la forma de crear esos objetivos depende exclusivamente de usted.

public class YourChooserTargetService extends ChooserTargetService { @Override public List<ChooserTarget> onGetChooserTargets(ComponentName targetActivityName, IntentFilter matchedFilter) { final List<ChooserTarget> targets = new ArrayList<>(); for (int i = 0; i < length; i++) { // The title of the target final String title = ... // The icon to represent the target final Icon icon = ... // Ranking score for this target between 0.0f and 1.0f final float score = ... // PendingIntent to fill in and send if the user chooses this target final PendingIntent action = ... targets.add(new ChooserTarget(title, icon, score, action)); } return targets; } }

AndroidManifest

Ahora deberá declarar su ChooserTargetService en su AndroidManifest y hacer dos cosas:

  1. Enlace el Service utilizando el permiso android.permission.BIND_CHOOSER_TARGET_SERVICE
  2. Incluye un IntentFilter con la acción android.service.chooser.ChooserTargetService

Por ejemplo:

<service android:name=".YourChooserTargetService" android:label="@string/yourLabel" android:permission="android.permission.BIND_CHOOSER_TARGET_SERVICE"> <intent-filter> <action android:name="android.service.chooser.ChooserTargetService" /> </intent-filter> </service>

En la Activity que manejará la Intent , deberá agregar la etiqueta de meta-data android.service.chooser.chooser_target_service . Por ejemplo:

<activity android:name=".YourShareActivity"> <intent-filter> <action android:name="android.intent.action.SEND" /> <category android:name="android.intent.category.DEFAULT" /> <data android:mimeType="text/plain" /> </intent-filter> <meta-data android:name="android.service.chooser.chooser_target_service" android:value=".YourChooserTargetService" /> </activity>

A partir de aquí, es principalmente una cuestión de llamar a Intent.createChooser y luego manejar los datos si el usuario elige su aplicación.

final Intent target = new Intent(Intent.ACTION_SEND); target.setType("text/plain"); target.putExtra(Intent.EXTRA_TITLE, "Your title"); target.putExtra(Intent.EXTRA_TEXT, "Your text"); startActivity(Intent.createChooser(target, "ChooserTargetService Example"));

Resultados

Cosas para notar

El puntaje de clasificación para cada ChooserTarget se usa para ordenar los objetivos, pero solo se usa si la UI decide usarlo. Según ChooserTarget.getScore

La interfaz de usuario que muestra el objetivo puede tener en cuenta este puntaje cuando clasifique y combine objetivos de múltiples fuentes

Además, hasta donde yo sé, esta función aún no está implementada en la vista previa de Android MNC. El ChooserActivity contiene un TODO para ello:

TODO: Mantener orden por puntajes de clasificación

Al crear un nuevo android.graphics.drawable.Icon , necesitará usar uno de los inicializadores static .

Icon.createWithBitmap(); Icon.createWithContentUri() Icon.createWithData() Icon.createWithFilePath() Icon.createWithResource()

Pregunta 2

Me gustaría saber cómo hacer lo contrario: ¿cómo puedo consultar todos los elementos de "compartir directamente" (imágenes, textos e intenciones) y ser capaz de mostrarlos en un cuadro de diálogo personalizado?

Los datos suministrados a ChooserTargetService.onGetChooserTargets son dinámicos. Entonces, no hay una forma directa de acceder a esos artículos, hasta donde yo sé.