文章同步自http://javaexception.com/archives/34

如何给自己的app添加分享到有道云笔记这样的功能

问题:

在之前的一个开源笔记类项目Leanote中,有个用户反馈想增加类似分享到有道云笔记的功能,这样就可以把自己小米便签或者是其他记事本的内容分享到Leanote中。

解决办法:

那么如何实现呢。需要有一个Activity来接受传递过来的内容,同时也需要在androidManifest.xml文件中配置。

<activity
android:name=".ui.edit.NoteEditActivity"
android:screenOrientation="portrait"
android:configChanges="uiMode|keyboard|keyboardHidden"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.SEND" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="text/plain" />
</intent-filter>
</activity>

接着我们需要考虑的是如何获取传递过来的内容。先提供一个处理Intent里面内容的工具类。

/**
* Utilities for creating a share intent
*/
public class ShareUtils { /**
* Create intent with subject and body
*
* @param subject
* @param body
* @return intent
*/
public static Intent create(final CharSequence subject,
final CharSequence body) {
Intent intent = new Intent(ACTION_SEND);
intent.setType("text/plain");
if (!TextUtils.isEmpty(subject))
intent.putExtra(EXTRA_SUBJECT, subject);
intent.putExtra(EXTRA_TEXT, body);
return intent;
} /**
* Get body from intent
*
* @param intent
* @return body
*/
public static String getBody(final Intent intent) {
return intent != null ? intent.getStringExtra(EXTRA_TEXT) : null;
} /**
* Get subject from intent
*
* @param intent
* @return subject
*/
public static String getSubject(final Intent intent) {
return intent != null ? intent.getStringExtra(EXTRA_SUBJECT) : null;
}
}

获取分享的内容,并在当前页面展示

public Note getNoteFromShareIntent() {
Note newNote = new Note();
Account account = Account.getCurrent();
newNote.setUserId(account.getUserId());
newNote.setTitle(ShareUtils.getSubject(getIntent()));
newNote.setContent(ShareUtils.getBody(getIntent()));
Notebook notebook;
notebook = NotebookDataStore.getRecentNoteBook(account.getUserId());
if (notebook != null) {
newNote.setNoteBookId(notebook.getNotebookId());
} else {
Exception exception = new IllegalStateException("notebook is null");
CrashReport.postCatchedException(exception);
}
newNote.setIsMarkDown(account.getDefaultEditor() == Account.EDITOR_MARKDOWN);
newNote.save();
return newNote;
}

总结一下,就是需要在androidManifest.xml里面配置支持text/plain的特定intent-filter,然后有个Activity与之对应,他来接收数据,接着就是获取到接收的数据,结合具体的业务逻辑做后续的处理,如保存到本地数据库,或者是展示在当前页面等。

看到了吧,这并没有想象中的那么难。

最新文章

  1. Go语言 模板的使用(一)
  2. TComboBoxEx和 TComboBox
  3. jQuery EasyUI教程之datagrid应用(二)
  4. 使用ajaxfileupload插件进行Ajax Post 异步提交多个文件
  5. paip.解决 数据库mysql增加列 字段很慢添加字段很慢
  6. Oracle查看所有用户
  7. The content of element type &quot;package&quot; must match &quot;(result-types?,interceptors?...
  8. 【系统】CentOS、Ubuntu、Debian三个linux比较异同
  9. 哈希表--HashSet&lt;T&gt;
  10. BouncyCastle产生一个PKCS#12规范的PFX/p12证书
  11. oracle11g 远程登录数据库
  12. Maven--(一个坑)在settings.xml文件中添加mirrors导致无法新建Maven项目
  13. Linux定时运行与开机运行任务
  14. string标准库的使用
  15. asp.net中的主题
  16. Java_java多线程下载-断点下载-超详细
  17. Java中设计模式之生产者消费者模式-4
  18. Android酷炫有用的开源框架
  19. JSP -java service pages
  20. field.setAccessible(true) 简介

热门文章

  1. 网站开发中使用javascript获取浏览器滚动条宽度
  2. SSIS 处理 bit 列
  3. FutureTask理解
  4. Windows上使用Git托管代码到Coding
  5. Kali Linux图形界面与命令行界面的切换
  6. 20个大大节省你时间的HTML5开发工具
  7. CSDN Android客户端的制作 导航帖
  8. 1.用互联网的产品思维打造一本app后端的书
  9. Android 实战美女拼图游戏 你能坚持到第几关
  10. netty源码分析之揭开reactor线程的面纱(二)