生活随笔
收集整理的這篇文章主要介紹了
HarmonyOS之剪贴板的功能和使用
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
一、剪貼板概述
用戶通過系統(tǒng)剪貼板服務(wù),可實(shí)現(xiàn)應(yīng)用之間的簡單數(shù)據(jù)傳遞。例如:在應(yīng)用 A 中復(fù)制的數(shù)據(jù),可以在應(yīng)用 B 中粘貼,反之亦可。 HarmonyOS 提供系統(tǒng)剪貼板服務(wù)的操作接口,支持用戶程序從系統(tǒng)剪貼板中讀取、寫入和查詢剪貼板數(shù)據(jù),以及添加、移除系統(tǒng)剪貼板數(shù)據(jù)變化的回調(diào)。 HarmonyOS 提供剪貼板數(shù)據(jù)的對象定義,包含內(nèi)容對象和屬性對象。
二、使用場景
同一設(shè)備的應(yīng)用程序 A、B 之間可以借助系統(tǒng)剪貼板服務(wù)完成簡單數(shù)據(jù)的傳遞,即應(yīng)用程序 A 向剪貼板服務(wù)寫入數(shù)據(jù)后,應(yīng)用程序 B 可以從中讀取出數(shù)據(jù)。 剪貼板服務(wù)如下所示:
在使用剪貼板服務(wù)時,需要注意以下幾點(diǎn): 只有在前臺獲取到焦點(diǎn)的應(yīng)用才有讀取系統(tǒng)剪貼板的權(quán)限(系統(tǒng)默認(rèn)輸入法應(yīng)用除外); 寫入到剪貼板服務(wù)中的剪貼板數(shù)據(jù)不會隨應(yīng)用程序結(jié)束而銷毀; 對同一用戶而言,寫入剪貼板服務(wù)的數(shù)據(jù)會被下一次寫入的剪貼板數(shù)據(jù)所覆蓋; 在同一設(shè)備內(nèi),剪貼板單次傳遞內(nèi)容不應(yīng)超過 500 KB。
三、API 說明
① 剪貼板 API
SystemPasteboard 提供系統(tǒng)剪貼板操作的相關(guān)接口,比如復(fù)制、粘貼、配置回調(diào)等。 PasteData 是剪貼板服務(wù)操作的數(shù)據(jù)對象,一個 PasteData 由若干個內(nèi)容節(jié)點(diǎn)(PasteData.Record)和一個屬性集合對象(PasteData.DataProperty)組成。 Record 是存放剪貼板數(shù)據(jù)內(nèi)容信息的最小單位,每個 Record 都有其特定的 MIME 類型,如純文本、HTML、URI、Intent。 剪貼板數(shù)據(jù)的屬性信息存在放 PasteData.DataProperty 中,包括標(biāo)簽、時間戳等。
② SystemPasteboard
SystemPasteboard 提供系統(tǒng)剪貼板服務(wù)的操作接口,比如復(fù)制、粘貼、配置回調(diào)等。 SystemPasteboard 的主要接口如下表所示:
接口名描述 getSystemPasteboard(Context context) 獲取系統(tǒng)剪切板服務(wù)的對象實(shí)例 getPasteData() 讀取當(dāng)前系統(tǒng)剪貼板中的數(shù)據(jù) hasPasteData() 判斷當(dāng)前系統(tǒng)剪貼板中是否有內(nèi)容 setPasteData(PasteData data) 將剪貼板數(shù)據(jù)寫入到系統(tǒng)剪貼板 clear() 清空系統(tǒng)剪貼板數(shù)據(jù) addPasteDataChangedListener(IPasteDataChangedListener listener) 用戶程序添加系統(tǒng)剪貼板數(shù)據(jù)變化的回調(diào),當(dāng)系統(tǒng)剪貼板數(shù)據(jù)發(fā)生變化時,會觸發(fā)用戶程序的回調(diào)實(shí)現(xiàn) removePasteDataChangedListener(IPasteDataChangedListener listener) 用戶程序移除系統(tǒng)剪貼板數(shù)據(jù)變化的回調(diào)
② PasteData
PasteData 是剪貼板服務(wù)操作的數(shù)據(jù)對象,其中內(nèi)容節(jié)點(diǎn)定義為 PasteData.Record,屬性集合定義為 PasteData.DataProperty。 PasteData 的主要接口如下表所示:
接口名描述 PasteData() 構(gòu)造器,創(chuàng)建一個空內(nèi)容數(shù)據(jù)對象 creatPlainTextData(CharSequence text) 構(gòu)建一個包含純文本內(nèi)容節(jié)點(diǎn)的數(shù)據(jù)對象 creatHtmlData(String htmlText) 構(gòu)建一個包含HTML內(nèi)容節(jié)點(diǎn)的數(shù)據(jù)對象 creatUriData(Uri uri) 構(gòu)建一個包含URI內(nèi)容節(jié)點(diǎn)的數(shù)據(jù)對象 creatIntentData(Intent intent) 構(gòu)建一個包含Intent內(nèi)容節(jié)點(diǎn)的數(shù)據(jù)對象 getPrimaryMimeType() 獲取數(shù)據(jù)對象中首個內(nèi)容節(jié)點(diǎn)的MIME類型,如果沒有查詢到內(nèi)容,將返回一個空字符串 getPrimaryText() 獲取數(shù)據(jù)對象中首個內(nèi)容節(jié)點(diǎn)的純文本內(nèi)容,如果沒有查詢到內(nèi)容,將返回一個空對象 addTextRecord(CharSequence text) 向數(shù)據(jù)對象中添加一個純文本內(nèi)容節(jié)點(diǎn),該方法會自動更新數(shù)據(jù)屬性中的MIME類型集合,最多只能添加128個內(nèi)容節(jié)點(diǎn) addRecord(Record record) 向數(shù)據(jù)對象中添加一個內(nèi)容節(jié)點(diǎn),該方法會自動更新數(shù)據(jù)屬性中的MIME類型集合,最多只能添加128個內(nèi)容節(jié)點(diǎn) getRecordCount() 獲取數(shù)據(jù)對象中內(nèi)容節(jié)點(diǎn)的數(shù)量 getRecordAt(int index) 獲取數(shù)據(jù)對象在指定下標(biāo)處的內(nèi)容節(jié)點(diǎn),如果操作失敗會返回空對象 removeRecordAt(int index) 移除數(shù)據(jù)對象在指定下標(biāo)處的內(nèi)容節(jié)點(diǎn),如果操作成功會返回true,操作失敗會返回false getMimeTypes() 獲取數(shù)據(jù)對象中上所有內(nèi)容節(jié)點(diǎn)的MIME類型列表,當(dāng)內(nèi)容節(jié)點(diǎn)為空時,返回列表為空對象 getProperty() 獲取該數(shù)據(jù)對象的屬性集合成員
變量名描述 MIMETYPE_TEXT_PLAIN= “text/plain” 純文本的MIME類型定義 MIMETYPE_TEXT_HTML= “text/html” HTML的MIME類型定義 MIMETYPE_TEXT_URI= “text/uri” URI的MIME類型定義 MIMETYPE_TEXT_INTENT= “text/ohos.intent” Intent的MIME類型定義 MAX_RECORD_NUM=128 單個PasteData中所能包含的Record的數(shù)量上限
③ PasteData.Record
一個 PasteData 中包含若干個特定 MIME 類型的 PasteData.Record,每個 Record 是存放剪貼板數(shù)據(jù)內(nèi)容信息的最小單位。 PasteData.Record 的主要接口如下所示:
接口名描述 createPlainTextRecord(CharSequence text) 構(gòu)造一個MIME類型為純文本的內(nèi)容節(jié)點(diǎn) createHtmlTextRecord(String htmlText) 構(gòu)造一個MIME類型為HTML的內(nèi)容節(jié)點(diǎn) createUriRecord(Uri uri) 構(gòu)造一個MIME類型為URI的內(nèi)容節(jié)點(diǎn) createIntentRecord(Intent intent) 構(gòu)造一個MIME類型為Intent的內(nèi)容節(jié)點(diǎn) getPlainText() 獲取該內(nèi)容節(jié)點(diǎn)中的文本內(nèi)容,如果沒有內(nèi)容將返回空對象 getHtmlText() 獲取該內(nèi)容節(jié)點(diǎn)中的HTML內(nèi)容,如果沒有內(nèi)容將返回空對象 getUri() 獲取該內(nèi)容節(jié)點(diǎn)中的URI內(nèi)容,如果沒有內(nèi)容將返回空對象 getIntent() 獲取該內(nèi)容節(jié)點(diǎn)中的Intent內(nèi)容,如果沒有內(nèi)容將返回空對象 getMimeType() 獲取該內(nèi)容節(jié)點(diǎn)的MIME類型 convertToText(Context context) 將該內(nèi)容節(jié)點(diǎn)的內(nèi)容轉(zhuǎn)為文本形式
④ PasteData.DataProperty
每個 PasteData 中都有一個 PasteData.DataProperty 成員,其中存放著該數(shù)據(jù)對象的屬性集合,例如自定義標(biāo)簽、MIME 類型集合列表等。 PasteData.DataProperty 的主要接口如下:
接口名描述 getMimeTypes() 獲取所屬數(shù)據(jù)對象的MIME類型集合列表,當(dāng)內(nèi)容節(jié)點(diǎn)為空時,返回列表為空對象 hasMimeType(String mimeType) 判斷所屬數(shù)據(jù)對象中是否包含特定MIME類型的內(nèi)容 getTimestamp() 獲取所屬數(shù)據(jù)對象被寫入系統(tǒng)剪貼板時的時間戳,如果該數(shù)據(jù)對象尚未被寫入,則返回0 setTag(CharSequence tag) 設(shè)置自定義標(biāo)簽 getTag() 獲取自定義標(biāo)簽 setAdditions(PacMap extraProps) 設(shè)置一些附加鍵值對信息 getAdditions() 獲取附加鍵值對信息
⑤ IPasteDataChangedListener
IPasteDataChangedListener 是定義剪貼板數(shù)據(jù)變化回調(diào)的接口類,開發(fā)者需要實(shí)現(xiàn)此接口來編碼觸發(fā)回調(diào)時的處理邏輯。 IPasteDataChangedListener 的主要接口如下:
接口名描述 onChanged() 當(dāng)系統(tǒng)剪貼板數(shù)據(jù)發(fā)生變化時的回調(diào)接口
四、使用流程
應(yīng)用 A 獲取系統(tǒng)剪貼板服務(wù):
SystemPasteboard pasteboard
= SystemPasteboard
. getSystemPasteboard ( appContext
) ;
應(yīng)用 A 向系統(tǒng)剪貼板中寫入一條純文本數(shù)據(jù):
if ( pasteboard
!= null
) { pasteboard
. setPasteData ( PasteData
. creatPlainTextData ( "Hello, world!" ) ) ; }
應(yīng)用 B 從系統(tǒng)剪貼板讀取數(shù)據(jù),將數(shù)據(jù)對象中的首個文本類型(純文本/HTML)內(nèi)容信息在控件中顯示,忽略其它類型內(nèi)容:
PasteData pasteData
= pasteboard
. getPasteData ( ) ; if ( pasteData
== null
) { return ; } DataProperty dataProperty
= pasteData
. getProperty ( ) ; boolean hasHtml
= dataProperty
. hasMimeType ( PasteData
. MIMETYPE_TEXT_HTML
) ; boolean hasText
= dataProperty
. hasMimeType ( PasteData
. MIMETYPE_TEXT_PLAIN
) ; if ( hasHtml
|| hasText
) { Text text
= ( Text
) findComponentById ( ResourceTable
. Id_text
) ; for ( int i
= 0 ; i
< pasteData
. getRecordCount ( ) ; i
++ ) { PasteData
. Record record
= pasteData
. getRecordAt ( i
) ; String mimeType
= record
. getMimeType ( ) ; if ( mimeType
. equals ( PasteData
. MIMETYPE_TEXT_HTML
) ) { text
. setText ( record
. getHtmlText ( ) ) ; break ; } else if ( mimeType
. equals ( PasteData
. MIMETYPE_TEXT_PLAIN
) ) { text
. setText ( record
. getPlainText ( ) . toString ( ) ) ; break ; } else { } } }
應(yīng)用 C 注冊添加系統(tǒng)剪貼板數(shù)據(jù)變化回調(diào),當(dāng)系統(tǒng)剪貼板數(shù)據(jù)發(fā)生變化時觸發(fā)處理邏輯:
IPasteDataChangedListener listener
= new
IPasteDataChangedListener ( ) { @Overridepublic
void onChanged ( ) { PasteData pasteData
= pasteboard
. getPasteData ( ) ; if ( pasteData
== null
) { return ; } } } ; pasteboard
. addPasteDataChangedListener ( listener
) ;
總結(jié)
以上是生活随笔 為你收集整理的HarmonyOS之剪贴板的功能和使用 的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔 網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔 推薦給好友。