文章同步自http://javaexception.com/archives/34 如何給自己的app添加分享到有道雲筆記這樣的功能 問題: 在之前的一個開源筆記類項目Leanote中,有個用戶反饋想增加類似分享到有道雲筆記的功能,這樣就可以把自己小米便簽或者是其他記事本的內容分享到Leanote中 ...
文章同步自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與之對應,他來接收數據,接著就是獲取到接收的數據,結合具體的業務邏輯做後續的處理,如保存到本地資料庫,或者是展示在當前頁面等。
看到了吧,這並沒有想象中的那麼難。