来自queryIntentActivityOptions的ResolveInfo项的优先级始终为0

时间:2018-05-07 18:34:59

标签: android android-intent android-activity share

我正在为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对象的List,其中包含每个匹配活动的一个条目,从最佳到最差排序。

但是我的情况并没有正确排序,而且我的活动混乱了。你能帮我吗?

0 个答案:

没有答案