我正在为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,其中包含每个匹配活动的一个条目,从最佳到最差排序。
但是我的情况并没有正确排序,而且我的活动混乱了。你能帮我吗?