На Android M, Как настроить возможности" direct-share " (изображение, текст), и как запросить элементы?

фон

в соответствии с новой функцией на Android M (ссылка здесь), приложения за пределами вашего приложения могут предложить дать прямое намерение обмена для одного из своих действий, что позволяет, например, в чате приложение, чтобы поделиться контентом с точным контактом, так что вы выбираете как чат-приложение и контакт в то же время (один шаг вместо 2) . Это можно показать на этом изображении:

enter image description here

или, по крайней мере, это то, что я понял из него.

вопрос

у меня есть 2 вопроса относительно этой новой функции:

  1. в описании они показывают только то, что нужно поместить в манифест, и они упоминают использование "ChooserTargetService". Что нужно сделать для того, чтобы предоставить тексты и изображения?

  2. Я хотел бы знать, как сделать наоборот : как я могу запросить все эти элементы" прямого обмена " (изображения, тексты и намерения) и иметь возможность показать их в настроенном диалоговом окне?

    Я хочу сделать это, потому что у меня есть настроенный диалог, который позволяет выбрать, чем поделиться и как, а не только через какое приложение.

2 ответов


Вопрос 1

в описании они показывают только то, что нужно поместить в манифест, и они упоминают использование "ChooserTargetService". Что следует сделать в чтобы предоставить тексты и изображения?

начать с расширения ChooserTargetService. Вам нужно будет вернуть List of ChooserTarget и как вы создаете эти цели полностью зависит от вас.

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

теперь вам нужно будет объявить свой ChooserTargetService в своем AndroidManifest и сделайте две вещи:

  1. связать Service С помощью android.permission.BIND_CHOOSER_TARGET_SERVICE разрешение
  2. включить IntentFilter С android.service.chooser.ChooserTargetService действие

например:

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

на Activity это будет обрабатывать Intent, вам нужно добавить meta-data tag android.service.chooser.chooser_target_service. Например:

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

отсюда, это в основном звоню Intent.createChooser и затем обработка данных, если пользователь выбирает ваше приложение.

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

результаты

results

Примечание

рейтинг оценка для каждого ChooserTarget используется для сортировки целей, но используется только если UI решает использовать его. Согласно ChooserTarget.getScore

пользовательский интерфейс, отображающий цель мая примите этот счет во внимание, когда сортировка и объединение целей из нескольких источников

кроме того, насколько я знаю, эта функция еще не реализована в Android MNC preview. The ChooserActivity содержит TODO для этого:

TODO: поддерживать сортировку по рейтинговым баллам

при создании нового android.graphics.drawable.Icon, вам нужно будет использовать один из static инициализаторы.

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

Вопрос 2

я хотел бы чтобы знать, как сделать обратное : как я могу запросить все это "direct-share" элементы (изображения, тексты и намерения) и иметь возможность показать их в настроенном диалоге?

данные, предоставленные ChooserTargetService.onGetChooserTargets динамический. Насколько мне известно, прямого доступа к этим предметам нет.


у меня другое понимание этого будущего.

до сих пор, когда пользователь хотел поделиться чем-то, им было предложено выбрать приложение, с которым они хотят поделиться, а затем это приложение обработало долю.

теперь вместо выбора пользователем приложения они будут выбирать контент из приложения, которое будет обрабатывать общий ресурс. Каждый такой параметр инкапсулируется в android.service.chooser.ChooserTargetService.

Так как вы видите на изображении, он показывает некоторые продукты ChooserTargetService, пользователь видит некоторые контакты ui без обеда или обмена только что.

Я считаю, что ваш диалог может быть запущен на том же пути.