通过Android中的Share Intent接收特定内容

时间:2013-02-26 16:15:46

标签: android text android-intent share mime-types

作为我想要做的一个例子:当我分享从Pocket到Evernote的文章时,Pocket格式化文本并将完整的文章发送到Evernote,而当我与我的应用程序共享文章时,我只是收到URL 。我知道在Pocket方面有代码正在执行,因为在共享之前有一个“处理”对话框。

我的问题:Pocket是否知道它与Evernote共享并专门为Evernote格式化其输出,或者Evernote以某种方式注册为文本编辑应用程序,因此提示Pocket分享完整的文章而不仅仅是一个URL?

如果是后者,它是如何完成的?我应该注册我的应用程序以接收text/plain以外的mime类型吗?以下是我目前用于接收文本的部分代码:

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    rcvIntent = getIntent();
    String rcvAction = rcvIntent.getAction();
    String rcvType = rcvIntent.getType();
    if (Intent.ACTION_SEND.equals(rcvAction) && "text/plain".equals(rcvType))
        displaySentText(rcvIntent);
}
private void displaySentText (Intent rcvIntent) {
    String sharedText = rcvIntent.getStringExtra(Intent.EXTRA_TEXT);
    if (sharedText == null) return;
    if (sharedText.startsWith("http://")) {
        ConnectivityManager connMgr = (ConnectivityManager) getSystemService (Context.CONNECTIVITY_SERVICE);
        NetworkInfo networkInfo = connMgr.getActiveNetworkInfo();
        if (networkInfo != null && networkInfo.isConnected()) {
            new DownloadWebpageText().execute(sharedText);

提前致谢!

编辑:

调试器没有提供太多信息。当我分享到Evernote时,它显示:

02-27 16:36:50.005: I/ActivityManager(2257): START u0 {act=android.intent.action.SEND typ=text/plain flg=0x80001 cmp=com.evernote/.note.composer.NewNoteAloneActivity (has clip) (has extras)} from pid 31094

当我分享到我的应用程序时,我收到一条非常相似的消息:

02-27 16:37:39.700: I/ActivityManager(2257): START u0 {act=android.intent.action.SEND typ=text/plain flg=0x80001 cmp=st.olm.readmemberalpha/.WebText (has clip) (has extras)} from pid 31094

它们都是文本/纯文本,但内容不同。我还检查了上面(has clip)剪辑的内容,但内容与额外内容相同。

1 个答案:

答案 0 :(得分:0)

阅读口袋博客后,看来Pocket确实专门为Evernote格式化文章文本。共享intent剪辑来自ClipData class,并且只是额外的副本,自api 11开始使用。

似乎没有办法 - 至少通过共享意图,据我所知 - 强迫另一个应用程序提供特定数据(类型)。