获取可以共享数据的应用程序列表
Get list of applications which can share data
此代码显示默认共享对话框
Intent sharingIntent = new Intent(Intent.ACTION_SEND);
sharingIntent.setType("text/html");
sharingIntent.putExtra(android.content.Intent.EXTRA_TEXT, "Message"));
startActivity(Intent.createChooser(sharingIntent,"Share using"));
问题:我不想在默认系统对话框中显示应用程序列表,而是想获取应用程序列表并在我的自定义列表中显示它们。
使用带有 Intent 的 PackageManager 来获取可以侦听 SEND Intent 的应用程序列表。从返回的应用程序列表中,获取您想要显示的详细信息,例如。图标、名称等。当用户单击它时,您需要包名称才能启动应用程序。
PackageManager pm = getActivity().getPackageManager();
Intent mainIntent = new Intent(Intent.ACTION_SEND, null);
mainIntent.setType("text/plain");
List<ResolveInfo> resolveInfos = pm.queryIntentActivities(mainIntent, 0); // returns all applications which can listen to the SEND Intent
for (ResolveInfo info : resolveInfos) {
ApplicationInfo applicationInfo = info.activityInfo.applicationInfo;
//get package name, icon and label from applicationInfo object and display it in your custom layout
//App icon = applicationInfo.loadIcon(pm);
//App name = applicationInfo.loadLabel(pm).toString();
//App package name = applicationInfo.packageName;
}
有了这组应用程序详细信息后,您可以在 GridView 的适配器中使用它并显示详细信息。
因此,您想要一个在网格视图中显示应用程序的自定义弹出窗口,而不是通常在列表中显示应用程序的弹出窗口?
这可以通过自己创建一个带有网格视图的弹出窗口来实现。不管它是共享操作。
然后构建您想要展示的应用程序列表。您可以使用 Intent
中的 resolveActivity
方法获取这些(或查看 Swayam 的回答)。
然后使用该列表填充网格视图。
此代码显示默认共享对话框
Intent sharingIntent = new Intent(Intent.ACTION_SEND);
sharingIntent.setType("text/html");
sharingIntent.putExtra(android.content.Intent.EXTRA_TEXT, "Message"));
startActivity(Intent.createChooser(sharingIntent,"Share using"));
问题:我不想在默认系统对话框中显示应用程序列表,而是想获取应用程序列表并在我的自定义列表中显示它们。
使用带有 Intent 的 PackageManager 来获取可以侦听 SEND Intent 的应用程序列表。从返回的应用程序列表中,获取您想要显示的详细信息,例如。图标、名称等。当用户单击它时,您需要包名称才能启动应用程序。
PackageManager pm = getActivity().getPackageManager();
Intent mainIntent = new Intent(Intent.ACTION_SEND, null);
mainIntent.setType("text/plain");
List<ResolveInfo> resolveInfos = pm.queryIntentActivities(mainIntent, 0); // returns all applications which can listen to the SEND Intent
for (ResolveInfo info : resolveInfos) {
ApplicationInfo applicationInfo = info.activityInfo.applicationInfo;
//get package name, icon and label from applicationInfo object and display it in your custom layout
//App icon = applicationInfo.loadIcon(pm);
//App name = applicationInfo.loadLabel(pm).toString();
//App package name = applicationInfo.packageName;
}
有了这组应用程序详细信息后,您可以在 GridView 的适配器中使用它并显示详细信息。
因此,您想要一个在网格视图中显示应用程序的自定义弹出窗口,而不是通常在列表中显示应用程序的弹出窗口?
这可以通过自己创建一个带有网格视图的弹出窗口来实现。不管它是共享操作。
然后构建您想要展示的应用程序列表。您可以使用 Intent
中的 resolveActivity
方法获取这些(或查看 Swayam 的回答)。
然后使用该列表填充网格视图。