1

我正在尝试实现一个简单的共享操作,该操作将向用户显示 Facebook、Twitter 和电子邮件的菜单,他们可以在其中共享我预设的一组消息,例如“我在http://www.xyz上使用了一个很棒的应用程序.com

到目前为止,我所拥有的是样式:

<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:id="@+id/menu_share"
          android:title="@string/share"
          android:showAsAction="ifRoom"
          android:actionProviderClass="android.widget.ShareActionProvider" />
</menu> 

我在网上看到很多这样的例子:

Intent intent=new Intent(android.content.Intent.ACTION_SEND);
intent.setType("text/plain");
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET);

// Add data to the intent, the receiving app will decide what to do with it.
intent.putExtra(Intent.EXTRA_SUBJECT, “Some Subject Line”);
intent.putExtra(Intent.EXTRA_TEXT, “Body of the message, woot!”);   

但这只是打开电子邮件。但是,我将如何打开该菜单,其中包含可以共享文本和链接的所有可能位置?

谢谢!

4

2 回答 2

1

但这只是打开电子邮件

那么要么您使用它的时间Intent不正确,要么设备上唯一广告支持的应用程序ACTION_SENDtext/plain“电子邮件”。

但是,我将如何打开该菜单,其中包含可以共享文本和链接的所有可能位置?

以下活动来自这个示例应用程序,在我的 Galaxy Nexus 上运行,显示了 8 个可能的共享目的地,一些是内置的(蓝牙、消息)和一些第三方(记住牛奶、印象笔记):

public class MainActivity extends SherlockFragmentActivity implements
    ShareActionProvider.OnShareTargetSelectedListener, TextWatcher {
  private ShareActionProvider share=null;
  private Intent shareIntent=new Intent(Intent.ACTION_SEND);
  private EditText editor=null;

  @Override
  public void onCreate(Bundle icicle) {
    super.onCreate(icicle);
    setContentView(R.layout.activity_main);

    shareIntent.setType("text/plain");
    editor=(EditText)findViewById(R.id.editor);
    editor.addTextChangedListener(this);
  }

  @Override
  public boolean onCreateOptionsMenu(Menu menu) {
    new MenuInflater(this).inflate(R.menu.actions, menu);

    share=
        (ShareActionProvider)menu.findItem(R.id.share)
                                 .getActionProvider();
    share.setOnShareTargetSelectedListener(this);

    return(super.onCreateOptionsMenu(menu));
  }

  @Override
  public boolean onShareTargetSelected(ShareActionProvider source,
                                       Intent intent) {
    Toast.makeText(this, intent.getComponent().toString(),
                   Toast.LENGTH_LONG).show();

    return(false);
  }

  @Override
  public void afterTextChanged(Editable s) {
    shareIntent.putExtra(Intent.EXTRA_TEXT, editor.getText());
    share.setShareIntent(shareIntent);
  }

  @Override
  public void beforeTextChanged(CharSequence s, int start, int count,
                                int after) {
    // ignored
  }

  @Override
  public void onTextChanged(CharSequence s, int start, int before,
                            int count) {
    // ignored
  }
}

请注意,您需要setShareIntent()ShareActionProvider要共享的文本准备好时调用。就我而言,它来自一个EditText小部件,因此每当文本更改时都需要更新,这就是我setShareIntent()onTextChanged().

于 2013-04-19T15:06:31.683 回答
1
String message = "I am using a great app on http://www.xyz.com"
Intent i = new Intent(Intent.ACTION_SEND);
i.setType("text/plain");
i.putExtra(Intent.EXTRA_TEXT, message);

startActivity(Intent.createChooser(i, "Share with friends"));
于 2013-04-19T15:01:52.660 回答