嗯,有四处共享菜单两种方式。第一种是使用
startActivity(Intent.createChooser(Intent, CharSequence)
但在这种情况下,我不知道如何获取到所创建的共享菜单访问,怎么它是一个独立的活动。 但是,如果您希望控制应用程序显示的共享项目列表,还有另一种方法可以实现您的共享菜单项目实现。 看看这个代码片段:
//Prepare an intent to filter the activities you need
//Add a List<YourItemType> where you going to store the share-items
List<YourItemType> myShareList = new List<YourItemType>;
PackageManager packageManager = mContext.getPackageManager();
List<ResolveInfo> activities = packageManager.queryIntentActivities(intent, 0);
int numActivities = activities.size();
for (int i = 0; i != numActivities; ++i) {
final ResolveInfo info = activities.get(i);
String label = info.loadLabel(packageManager).toString();
//now you can check label or some other info and decide whether to add the item
//into your own list of share items
//Every item in your list should have a runnable which will execute
// proper share-action (Activity)
myShareList.add(new YourItemType(label, info.loadIcon(packageManager), new Runnable()
{
public void run() {
startResolvedActivity(intent, info);
}
}));
}
这段代码演示了如何获取它们能够处理共享请求的活动的列表。接下来你需要做的是展示你自己的用户界面。这取决于你要选择什么。
感谢亚历克斯,这是有价值的信息 - 但我想,我是不是我想要做的彻底清除。我不打算在我的应用程序中筛选“共享”项目 - 我想在所有应用程序中筛选它们! 我猜它可能是不可能的,因为每个应用程序都在它自己的沙箱中实现了共享菜单,但是我所希望的是为那些嵌入到系统API中的“共享”菜单项提供某种钩子将允许我过滤和合并列表中显示的项目 - 再次为*每个*应用程序。 – 2012-02-13 23:18:38
也 - 我知道,在ICS中,您可以在*自己的应用程序中实现代码*,这会导致您的更频繁使用的项目浮动到“共享”菜单的顶部......所以我想,也许有一些直接访问它的属性的方法。 – 2012-02-13 23:22:34
啊,我明白了。我误解了你的“构建一个应用程序,它过滤掉了我从未使用过的某些服务”。那么,不能确定这一点,因为我从来没有尝试过。但是如果列表是基于来自包管理器的信息动态生成的(我相信是这种情况),我看到全局操作共享列表的唯一方法是使用PackageManager。但是,简单地研究了它的API,我不知道如何实现你的目标。 关于ICS的事情:这听起来很有趣 - 你能给我一个链接或什么? – 2012-02-13 23:54:30