欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

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

程序员文章站 2022-07-05 14:27:34
文章同步自http://javaexception.com/archives/34 如何给自己的app添加分享到有道云笔记这样的功能 问题: 在之前的一个开源笔记类项目Leanote中,有个用户反馈想增加类似分享到有道云笔记的功能,这样就可以把自己小米便签或者是其他记事本的内容分享到Leanote中 ......

文章同步自

如何给自己的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与之对应,他来接收数据,接着就是获取到接收的数据,结合具体的业务逻辑做后续的处理,如保存到本地数据库,或者是展示在当前页面等。

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