Question Sur Android M, comment configurer les fonctionnalités de "partage direct" (image, texte) et comment interroger les éléments?


Contexte

Selon une nouvelle fonctionnalité sur Android M (lien ici) les applications en dehors de votre application peuvent offrir une intention de partage directe à l’une de ses activités, permettant par exemple à une application de chat de partager le contenu avec un contact précis, de sorte que vous choisissez même temps (une étape au lieu de 2). Cela peut être montré sur cette image:

enter image description here

Ou du moins c'est ce que j'ai compris.

La question

J'ai 2 questions concernant cette nouvelle fonctionnalité:

  1. Dans la description, ils montrent uniquement ce qu'il faut insérer dans le manifeste et mentionnent l'utilisation de "ChooserTargetService". Que faut-il faire pour fournir les textes et les images?

  2. Je voudrais savoir comment faire le contraire: comment puis-je interroger tous ces éléments "partages directs" (images, textes et intentions) et pouvoir les afficher dans un dialogue personnalisé?

    Je veux le faire car j'ai moi-même un dialogue personnalisé, qui permet de choisir quoi partager et comment, et pas seulement à travers quelle application.


18
2018-05-28 22:48


origine


Réponses:


question 1

Dans la description, ils montrent uniquement ce qu'il faut mettre dans le manifeste, et   ils mentionnent l'utilisation de "ChooserTargetService". Que devrait-on faire en   ordre de fournir les textes et les images?

Commencez par étendre ChooserTargetService. Vous devrez retourner un List de ChooserTarget et comment vous créez ces cibles est entièrement à vous.

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

Maintenant, vous devrez déclarer votre ChooserTargetService dans ton AndroidManifest et faire deux choses:

  1. Lier le Service en utilisant le android.permission.BIND_CHOOSER_TARGET_SERVICE autorisation
  2. Inclure un IntentFilter avec le android.service.chooser.ChooserTargetService action

Par exemple:

<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>

dans le Activity qui va gérer le Intent, vous devrez ajouter le meta-data marque android.service.chooser.chooser_target_service. Par exemple:

<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 là, il s'agit surtout d'appeler Intent.createChooser et ensuite gérer les données si l'utilisateur choisit votre application.

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"));

Résultats

results

Choses à noter

Le score de classement pour chacun ChooserTarget est utilisé pour trier les cibles, mais n'est utilisé que si l'interface utilisateur décide de l'utiliser. Selon ChooserTarget.getScore

L'interface utilisateur affichant la cible mai prendre en compte ce score quand   trier et fusionner des cibles à partir de plusieurs sources

Aussi, autant que je sache, cette fonctionnalité n'est pas encore implémentée dans l'aperçu Android MNC. le ChooserActivity contient un TODO pour ça:

TODO: Maintenir le tri en classant les scores

Lors de la création d'un nouveau android.graphics.drawable.Icon, vous devrez utiliser l'un des static les initialiseurs.

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

question 2

Je voudrais savoir comment faire le contraire: comment puis-je interroger tous   articles "à partage direct" (images, textes et intentions) et pouvoir montrer   les sur un dialogue personnalisé?

Les données fournies à ChooserTargetService.onGetChooserTargets est dynamique. Donc, pour autant que je sache, il n’existe aucun moyen direct d’accéder à ces éléments.


15
2018-06-09 00:11



J'ai une compréhension différente de cet avenir.

Jusqu'à présent, lorsque l'utilisateur souhaitait partager quelque chose, il lui était demandé de choisir l'application avec laquelle il souhaitait partager, puis cette application gérait le partage.

Maintenant, au lieu que l'utilisateur choisisse l'application, il choisira le contenu de l'application qui gérera le partage. Chacune de ces options est encapsulée dans android.service.chooser.ChooserTargetService.

Donc, comme vous voyez sur l'image, il montre des produits de ChooserTargetService, l'utilisateur voit certains contacts sans déjeuner ou partager tout de suite.

Je crois que votre dialogue peut être déclenché de la même manière.


0
2018-05-29 21:45