日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

HarmonyOS之剪贴板的功能和使用

發(fā)布時間:2024/5/21 编程问答 82 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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ù)對象的屬性集合成員
  • PasteData 中定義的常量如下:
變量名描述
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 {// skip records of other Mime type }}}
  • 應(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;}// Operations to handle data change on the system pasteboard}};pasteboard.addPasteDataChangedListener(listener);

總結(jié)

以上是生活随笔為你收集整理的HarmonyOS之剪贴板的功能和使用的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。