gpt4 book ai didi

android - 根据已安装的 Android 包名称自定义过滤 Intent 选择器

转载 作者:IT王子 更新时间:2023-10-28 23:40:16 30 4
gpt4 key购买 nike

我想利用内置的 Intent 选择器显示自定义过滤的应用列表供用户选择和启动。

我知道如何获取已安装软件包的列表:

final Intent myIntent = new Intent(android.content.Intent.ACTION_MAIN);  
List<ResolveInfo> resInfoList = getPackageManager().queryIntentActivities(myIntent, 0);

此时我想根据包名称中包含的特定字符串(或字符串的变体)过滤列表,我也可以弄清楚如何做。

但这就是我卡住的地方。据我所知, Intent.createChooser() 只接受一个目标 Intent 作为参数。我希望有一个基于包和类名或其他东西的 Intent 列表的重载。但我没有看到类似的东西。我在某个地方错过了吗?

所以问题是,这可能与内置选择器有关,还是我必须使用 AlertDialog Builder 构建自己的选择器?我希望避免后者。

提前致谢。

最佳答案

这是我提出的一个解决方案。我使用它为选择器中的每个选择提供不同的 Intent 数据,但您也可以轻松地从列表中删除一个 Intent 。希望这会有所帮助:

List<Intent> targetedShareIntents = new ArrayList<Intent>();
Intent shareIntent = new Intent(android.content.Intent.ACTION_SEND);
shareIntent.setType("text/plain");
List<ResolveInfo> resInfo = getPackageManager().queryIntentActivities(shareIntent, 0);
if (!resInfo.isEmpty()) {
for (ResolveInfo resolveInfo : resInfo) {
String packageName = resolveInfo.activityInfo.packageName;
Intent targetedShareIntent = new Intent(android.content.Intent.ACTION_SEND);
targetedShareIntent.setType("text/plain");
targetedShareIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, "subject to be shared");
if (TextUtils.equals(packageName, "com.facebook.katana")) {
targetedShareIntent.putExtra(android.content.Intent.EXTRA_TEXT, "http://link-to-be-shared.com");
} else {
targetedShareIntent.putExtra(android.content.Intent.EXTRA_TEXT, "text message to shared");
}
targetedShareIntent.setPackage(packageName);
targetedShareIntents.add(targetedShareIntent);
}
Intent chooserIntent = Intent.createChooser(targetedShareIntents.remove(0), "Select app to share");
chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, targetedShareIntents.toArray(new Parcelable[targetedShareIntents.size()]));
startActivity(chooserIntent);
}

编辑

在使用此方法时,我将某些应用程序的名称获取为 android 系统。如果有人收到此错误,请在 targetedShareIntents.add(targetedShareIntent);

之前添加以下行
 targetedShareIntent.setClassName(
resolveInfo.activityInfo.packageName,
resolveInfo.activityInfo.name);

来源:Android share intent Twitter: How to share only by Tweet or Direct Message?

关于android - 根据已安装的 Android 包名称自定义过滤 Intent 选择器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5734678/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com