0

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

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

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

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)上面检查了剪辑的内容,但内容与额外内容相同。

4

1 回答 1

0

看了袖珍博客后,似乎袖珍实际上确实专门为印象笔记格式化了文章文本。分享intent剪辑来自ClipDataclass,只是额外内容的副本,从 api 11 开始使用。

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

于 2013-02-28T00:23:20.097 回答