Я реализую пользовательскую функцию общего доступа для ACTION_SEND
намерения. Я хочу исключить свое собственное приложение из списка обмена. Для этого я получаю все подходящие действия, используя getPackageManager().queryIntentActivityOptions(...)
, а затем проверяю пакет.
Проблема в том, что getPackageManager().queryIntentActivityOptions(...)
возвращает мне список ResolveInfo
объектов, где priority
всегда 0
, а приложения упорядочены неправильно - не так, как в диалоге общего ресурса по умолчанию. Таким образом, приложения не имеют правильного порядка в списке, и это неудобно для пользователя.
Вот код, который делает обмен:
public void shareExcludingApp(String packageNameToExclude, Uri imagePath) {
List<Intent> targetedShareIntents = new ArrayList<>();
Intent share = new Intent(android.content.Intent.ACTION_SEND);
share.setType("image/*");
List<ResolveInfo> resInfo = mContext.getPackageManager().queryIntentActivities(createShareIntent(imagePath), 0);
if (!resInfo.isEmpty()) {
for (ResolveInfo info : resInfo) {
Intent targetedShare = createShareIntent(imagePath);
if (!info.activityInfo.packageName.equalsIgnoreCase(packageNameToExclude)) {
targetedShare.setPackage(info.activityInfo.packageName);
targetedShareIntents.add(targetedShare);
}
}
Intent chooserIntent = Intent.createChooser(targetedShareIntents.remove(0), mContext.getString(R.string.choose_an_app));
chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, targetedShareIntents.toArray(new Parcelable[]{}));
mContext.startActivity(chooserIntent);
}
}
private Intent createShareIntent(Uri uri) {
Intent share = new Intent(Intent.ACTION_SEND);
share.setType("image/*");
share.putExtra(Intent.EXTRA_STREAM, uri);
return share;
}
Я неправильно настраиваю намерение? Нужно ли предоставлять куда-нибудь больше данных?
Спасибо
Обновление:
Благодаря @CommonsWare я понял, что не должен сам использовать priority
для упорядочивания списка, вместо этого список уже должен быть отсортирован (queryIntentActivities):
Возвращает список объектов ResolveInfo, содержащих одну запись для каждого совпадающего действия, упорядоченный от лучшего к худшему.
Но в моем случае это не отсортировано должным образом, и я перепутал действия. Можете ли вы помочь мне?