9

我不想在我的应用程序中使用操作栏,但仍希望拥有操作栏提供的共享按钮。

这是在操作栏存在时完成的。

public boolean onCreateOptionsMenu(Menu menu) {

    getMenuInflater().inflate(R.menu.main, menu);
    ShareActionProvider provider = (ShareActionProvider)
    menu.findItem(R.id.menu_share).getActionProvider();

    if (provider != null) {
        Intent shareIntent = new Intent();
        shareIntent.setAction(Intent.ACTION_SEND);
        shareIntent.putExtra(Intent.EXTRA_TEXT, "hi");
        shareIntent.setType("text/plain");
        provider.setShareIntent(shareIntent);
    }

    return true;
}

menu.xml 保存在菜单文件夹中。

我想在我的 xml 中有一个我自己的共享按钮,其中还定义了其他布局。

有什么帮助吗?

4

3 回答 3

9

您不需要操作栏来共享内容。事实上,即使使用 Action Bar,大多数应用程序也不会使用它,ShareActionProvider因为视觉设计师讨厌它,并且它不支持用户设备上的许多最新共享功能(例如直接共享给联系人)。相反,您应该使用它Intent.createChooser来创建更强大的共享对话框。

Intent sendIntent = new Intent();
sendIntent.setAction(Intent.ACTION_SEND);
sendIntent.putExtra(Intent.EXTRA_TEXT, "This is my text to send.");
sendIntent.setType("text/plain");
startActivity(Intent.createChooser(sendIntent, getResources().getText(R.string.send_to)));

http://developer.android.com/training/sharing/send.html

从应用程序中的任何位置共享的更好方法是使用ShareCompat. 这是一个简单的例子:

ShareCompat.IntentBuilder.from(this)
           .setType("text/plain")
           .setText("I'm sharing!")
           .startChooser();

其他示例可以在这里找到:https ://android.googlesource.com/platform/development/+/master/samples/Support4Demos/src/com/example/android/supportv4/app/SharingSupport.java

于 2015-11-02T22:23:35.153 回答
5

使用PackageManagerqueryIntentActivities()查找知道如何处理ACTION_SEND Intent您要调用的应用程序。随心所欲地显示结果列表。当用户进行选择时,创建一个等效项ACTION_SEND Intent,在其中指定ComponentName用户选择的特定活动的 ,然后调用startActivity()

于 2013-07-22T16:02:36.857 回答
1

使用带有 ACTION_SEND 的 Intent。例如,当单击按钮时,您可以:

Intent It = new Intent(Intent.ACTION_SEND);
It.setType("text/plain");
It.putExtra(android.content.Intent.EXTRA_TEXT,"your_text_to_share");
YourActivity.this.startActivity(It);
于 2014-11-21T21:47:19.463 回答