android - 操纵'分享'菜单

时间:2012-02-12 23:36:49

标签: android api menu

首先关闭 - 让我说我不是在询问如何在我的应用程序中实现共享按钮或类似的东西。我知道所有关于使用Intent和Intent Filters等的信息。

我要问的是:有没有办法访问“共享”菜单本身?换句话说,我想建立一个应用程序,过滤掉我从未使用过的一些服务,但我不想完全从手机中删除。

我尝试在Android API中查找,但只找到有关让您的应用显示在菜单中或在应用中添加“分享”按钮等信息。

由于我仍然是一名新手程序员,我还想知道在构建/显示“共享”菜单时,是否有某种方法可以嗅出正在创建/使用的API对象?好像我可以在调试器会话中做到这一点,但我不知道如何。

提前谢谢你。 B'/ P>

1 个答案:

答案 0 :(得分:1)

嗯,有两种方法可以绕过“共享”菜单。第一个是使用

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

}

此代码段显示了如何获取能够处理共享请求的活动列表。您接下来需要做的是显示您自己的UI。这取决于你要选择的是什么。