获取可共享数据的应用程序列表

时间:2016-06-08 13:59:32

标签: android android-package-managers

此代码显示默认共享对话框

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"));

share dialog

问题:我想要获取应用程序列表并将其显示在我的自定义列表中,而不是在默认系统对话框中显示应用程序列表。

2 个答案:

答案 0 :(得分:5)

将PackageManager与Intent一起使用以获取可以收听SEND意图的应用程序列表。从返回的应用程序列表中,获取您想要显示的详细信息,例如。图标,名称等。当用户点击它时,您需要包名称来启动应用程序。

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的适配器中使用它并显示详细信息。

答案 1 :(得分:0)

因此,不是通常的弹出窗口显示列表中的应用程序,而是需要一个自定义弹出窗口,在网格视图中显示应用程序?

这可以通过自己创建一个带有网格视图的弹出窗口来实现。无论是股票行动。 然后构建一个您想要显示的应用程序列表。您可以使用Intent中的resolveActivity方法获取这些内容(或参阅Swayam的回答)。
然后使用该列表填充网格视图。