作为我想要做的一个例子:当我分享从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)
剪辑的内容,但内容与额外内容相同。
答案 0 :(得分:0)
阅读口袋博客后,看来Pocket确实专门为Evernote格式化文章文本。共享intent
剪辑来自ClipData
class,并且只是额外的副本,自api 11开始使用。
似乎没有办法 - 至少通过共享意图,据我所知 - 强迫另一个应用程序提供特定数据(类型)。