在Android中自定义“分享到”视图

时间:2015-09-09 11:25:20

标签: android

你好我正在开发一个Android应用程序,我不想使用系统“分享到”窗口,我想自定义它。 那么有没有办法获得可能的共享意图列表并将它们放在自定义ListView布局中?

3 个答案:

答案 0 :(得分:5)

是的,你可以。

第一步是建立共享意图:

Intent sendIntent = new Intent();
sendIntent.setAction(Intent.ACTION_SEND);
sendIntent.putExtra(Intent.EXTRA_TEXT, "This is my text to send.");
sendIntent.setType("text/plain");

然后,不要创建选择器意图,而是向包管理器询问可以为sendIntent提供服务的活动:

List<ResolveInfo> infos = getPackageManager().queryIntentActivities(sendIntent, 0);

这将为您提供选择器也会显示的活动(应用程序)列表。

您可以从ResolveInfo获取应用的图标和标签,并将其显示在用户的列表中:

ResolveInfo info; 
Drawable icon = info.loadIcon(getPackageManager());
String label = info.loadLabel(getPackageManager());

用户选择ResolveInfo后,您可以使用所选活动丰富sendIntent来处理您的意图,然后开始活动:

sendIntent.setClassName(info.activityInfo.packageName, info.activityInfo.name);
startActivity(sendIntent);

我们询问系统哪些活动可以处理sendIntent,然后让用户选择其中一个活动。因此,根据定义,该活动可以处理sendIntent。在sendIntent上设置活动的类名会将意图直接发送到该活动。

答案 1 :(得分:1)

您可以在resolveActivity()课程中使用Intent方法。因此,您必须创建一个Intent来共享一些内容,而不是调用startActivity(),您可以通过调用resolveActivity()来检索匹配的活动。

http://developer.android.com/reference/android/content/Intent.html#resolveActivity%28android.content.pm.PackageManager%29

使用“活动”信息,您可以构建自定义“共享”对话框/屏幕。

修改

对不起我的错误 - resolveActivity只返回一个ComponentName - 所以你只检索包名而不是列表但只检索一个对象。如果您想要检索有关活动的完整信息(与您的意图匹配的多项活动),您应该使用PackageManager.queryIntentActivities() - http://developer.android.com/reference/android/content/pm/PackageManager.html#queryIntentActivities%28android.content.Intent,%20int%29

答案 2 :(得分:1)