你好我正在开发一个Android应用程序,我不想使用系统“分享到”窗口,我想自定义它。 那么有没有办法获得可能的共享意图列表并将它们放在自定义ListView布局中?
答案 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()
来检索匹配的活动。
使用“活动”信息,您可以构建自定义“共享”对话框/屏幕。
对不起我的错误 - resolveActivity
只返回一个ComponentName - 所以你只检索包名而不是列表但只检索一个对象。如果您想要检索有关活动的完整信息(与您的意图匹配的多项活动),您应该使用PackageManager.queryIntentActivities()
- http://developer.android.com/reference/android/content/pm/PackageManager.html#queryIntentActivities%28android.content.Intent,%20int%29
答案 2 :(得分:1)