На Android M, Как настроить возможности" direct-share " (изображение, текст), и как запросить элементы?
фон
в соответствии с новой функцией на Android M (ссылка здесь), приложения за пределами вашего приложения могут предложить дать прямое намерение обмена для одного из своих действий, что позволяет, например, в чате приложение, чтобы поделиться контентом с точным контактом, так что вы выбираете как чат-приложение и контакт в то же время (один шаг вместо 2) . Это можно показать на этом изображении:
или, по крайней мере, это то, что я понял из него.
вопрос
у меня есть 2 вопроса относительно этой новой функции:
в описании они показывают только то, что нужно поместить в манифест, и они упоминают использование "ChooserTargetService". Что нужно сделать для того, чтобы предоставить тексты и изображения?
-
Я хотел бы знать, как сделать наоборот : как я могу запросить все эти элементы" прямого обмена " (изображения, тексты и намерения) и иметь возможность показать их в настроенном диалоговом окне?
Я хочу сделать это, потому что у меня есть настроенный диалог, который позволяет выбрать, чем поделиться и как, а не только через какое приложение.
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
и сделайте две вещи:
- связать
Service
С помощьюandroid.permission.BIND_CHOOSER_TARGET_SERVICE
разрешение - включить
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"));
результаты
Примечание
рейтинг оценка для каждого 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 без обеда или обмена только что.
Я считаю, что ваш диалог может быть запущен на том же пути.