Элементы ResolveInfo из queryIntentActivityOptions всегда имеют приоритет 0 - PullRequest
0 голосов
/ 07 мая 2018

Я реализую пользовательскую функцию общего доступа для 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, содержащих одну запись для каждого совпадающего действия, упорядоченный от лучшего к худшему.

Но в моем случае это не отсортировано должным образом, и я перепутал действия. Можете ли вы помочь мне?

...