使用共享操作提供程序时检测共享者应用程序

时间:2013-03-21 04:56:26

标签: android shareactionprovider

在使用共享操作提供程序时,有什么方法可以检测到选择了哪个共享器应用程序,以便我可以为不同的应用程序发送不同的邮件? 我正在使用以下方法进行共享操作提供程序,

mShareActionProvider = (ShareActionProvider) menu.findItem(R.id.menu_item_share).getActionProvider();

        mShareActionProvider.setShareIntent(getDefaultShareIntent());

和意图,

 public Intent getDefaultShareIntent(){
              String message = Fname + Mobileno + Homeno + Workmail + Homemail
                + Gtalk + Skype + Address + Company + Title + Website;
      Intent shareIntent = new Intent(Intent.ACTION_SEND);
              shareIntent.putExtra(Intent.EXTRA_TEXT, message); 


         return shareIntent; 


    }

3 个答案:

答案 0 :(得分:6)

<强>更新

最简单的解决方案是:

@Override
public boolean onShareTargetSelected(ShareActionProvider source, Intent intent) {
  String shareTarget = intent.getComponent().getPackageName();
  ...
}

无需复制文件或任何内容。


如果您碰巧使用后者,请从Android源或ActionBarSherlock复制一些文件:

  • ActivityChooserModel.java
  • ActivityChooserView.java
  • ShareActionProvider.java

确保您引用这些文件,而不是应用中的原始文件。

ActivityChooserModel.java 中,修改为:

if (mActivityChoserModelPolicy != null) {
  ResolveInfo info = getActivity(index);
  choiceIntent.putExtra("user_selected_activity", (info.activityInfo != null) ? info.activityInfo.packageName : info.serviceInfo.packageName);
  final boolean handled = mActivityChoserModelPolicy.onChooseActivity(this, choiceIntent);
  if (handled)
    return null;
}

它会将所选活动的包名称存储到intent中。然后,您可以在处理程序中阅读它:

@Override
public boolean onShareTargetSelected(ShareActionProvider source, Intent intent) {
  String shareTarget = intent.getStringExtra("user_selected_activity");
  ...
}

并根据所选活动决定处理方式。

答案 1 :(得分:3)

试试这个。

myShareActionProvider.setOnShareTargetSelectedListener(new ShareActionProvider.OnShareTargetSelectedListener() {
            @Override
            public boolean onShareTargetSelected(ShareActionProvider source, Intent intent) {
                String shareTarget = intent.getComponent().getPackageName();
                return false;
            }
        });

答案 2 :(得分:2)

看起来不像。但是没有什么能阻止你将它复制并粘贴到你的项目中并按你认为合适的方式进行修改。