0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

鴻蒙OS 剪貼板開發(fā)指導(dǎo)

王程 ? 2024-01-31 15:46 ? 次閱讀

場景介紹

同一設(shè)備的應(yīng)用程序 A、B 之間可以借助系統(tǒng)剪貼板服務(wù)完成簡單數(shù)據(jù)的傳遞,即應(yīng)用程序 A 向剪貼板服務(wù)寫入數(shù)據(jù)后,應(yīng)用程序 B 可以從中讀取出數(shù)據(jù)。在滿足分布式剪貼板服務(wù)的使用條件時(shí),應(yīng)用程序 A、B 也可以來自組網(wǎng)內(nèi)的不同設(shè)備。

wKgaomW3dAWAD53fAAB8q3nBoAc664.png

圖1 剪貼板服務(wù)示意圖

在使用剪貼板服務(wù)時(shí),需要注意以下幾點(diǎn):

  • 只有在前臺(tái)獲取到焦點(diǎn)的應(yīng)用才有讀取系統(tǒng)剪貼板的權(quán)限(系統(tǒng)默認(rèn)輸入法應(yīng)用除外)。
  • 寫入到剪貼板服務(wù)中的剪貼板數(shù)據(jù)不會(huì)隨應(yīng)用程序結(jié)束而銷毀。
  • 對同一用戶而言,寫入剪貼板服務(wù)的數(shù)據(jù)會(huì)被下一次寫入的剪貼板數(shù)據(jù)所覆蓋。
  • 如果設(shè)備滿足分布式組網(wǎng)條件,且進(jìn)行復(fù)制操作的設(shè)備打開了剪貼板分布式開關(guān),未配置“僅在本地”標(biāo)志位的剪貼板數(shù)據(jù)里的 MIME 類型為純文本和 HTML 的內(nèi)容可以被組網(wǎng)內(nèi)其他打開了剪貼板分布式開關(guān)的設(shè)備粘貼出來。
  • 在同一設(shè)備內(nèi),剪貼板單次傳遞內(nèi)容不應(yīng)超過 800KB。在分布式場景下多設(shè)備間傳遞時(shí),每次傳遞內(nèi)容不應(yīng)超過 64KB。

接口說明

SystemPasteboard 提供系統(tǒng)剪貼板操作的相關(guān)接口,比如復(fù)制、粘貼、配置回調(diào)等。PasteData 是剪貼板服務(wù)操作的數(shù)據(jù)對象,一個(gè) PasteData 由若干個(gè)內(nèi)容節(jié)點(diǎn)(PasteData.Record)和一個(gè)屬性集合對象(PasteData.DataProperty)組成。Record 是存放剪貼板數(shù)據(jù)內(nèi)容信息的最小單位,每個(gè) Record 都有其特定的 MIME 類型,如純文本、HTML、URI、Intent。剪貼板數(shù)據(jù)的屬性信息存在放 DataProperty 中,包括標(biāo)簽、時(shí)間戳、“僅在本地”標(biāo)記位等。

  • SystemPasteboard

SystemPasteboard 提供系統(tǒng)剪貼板服務(wù)的操作接口,比如復(fù)制、粘貼、配置回調(diào)等。

接口名 描述
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() 判斷當(dāng)前系統(tǒng)剪貼板中是否有內(nèi)容。清空系統(tǒng)剪貼板數(shù)據(jù)。
addPasteDataChangedListener(IPasteDataChangedListener listener) 用戶程序添加系統(tǒng)剪貼板數(shù)據(jù)變化的回調(diào),當(dāng)系統(tǒng)剪貼板數(shù)據(jù)發(fā)生變化時(shí),會(huì)觸發(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() 構(gòu)造器,創(chuàng)建一個(gè)空內(nèi)容數(shù)據(jù)對象。
createPlainTextData(CharSequence text) 構(gòu)建一個(gè)包含純文本內(nèi)容節(jié)點(diǎn)的數(shù)據(jù)對象。
creatHtmlData(String htmlText) 構(gòu)建一個(gè)包含 HTML 內(nèi)容節(jié)點(diǎn)的數(shù)據(jù)對象。
creatUriData(Uri uri) 構(gòu)建一個(gè)包含 URI 內(nèi)容節(jié)點(diǎn)的數(shù)據(jù)對象。
creatIntentData(Intent intent) 構(gòu)建一個(gè)包含 Intent 內(nèi)容節(jié)點(diǎn)的數(shù)據(jù)對象。
getPrimaryMimeType() 獲取數(shù)據(jù)對象中首個(gè)內(nèi)容節(jié)點(diǎn)的 MIME 類型,如果沒有查詢到內(nèi)容,將返回一個(gè)空字符串。
getPrimaryText() 獲取數(shù)據(jù)對象中首個(gè)內(nèi)容節(jié)點(diǎn)的純文本內(nèi)容,如果沒有查詢到內(nèi)容,將返回一個(gè)空對象。
addTextRecord(CharSequence text) 向數(shù)據(jù)對象中添加一個(gè)純文本內(nèi)容節(jié)點(diǎn),該方法會(huì)自動(dòng)更新數(shù)據(jù)屬性中的MIME類型集合,最多只能添加 128 個(gè)內(nèi)容節(jié)點(diǎn)。
addRecord(Record record) 向數(shù)據(jù)對象中添加一個(gè)內(nèi)容節(jié)點(diǎn),該方法會(huì)自動(dòng)更新數(shù)據(jù)屬性中的 MIME 類型集合,最多只能添加 128 個(gè)內(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),如果操作失敗會(huì)返回空對象。
removeRecordAt(int index) 移除數(shù)據(jù)對象在指定下標(biāo)處的內(nèi)容節(jié)點(diǎn),如果操作成功會(huì)返回 true,操作失敗會(huì)返回 false。
getMimeTypes() 獲取數(shù)據(jù)對象中上所有內(nèi)容節(jié)點(diǎn)的MIME類型列表,當(dāng)內(nèi)容節(jié)點(diǎn)為空時(shí),返回列表為空對象。
getProperty() 獲取該數(shù)據(jù)對象的屬性集合成員。
常量名 描述
MIMETYPE_TEXT_PLAIN= “text/plain” 純文本的 MIME 類型定義。
MIMETYPE_TEXT_HTML= “text/html” HTML的 MIM E類型定義。
MIMETYPE_TEXT_URI= “text/uri” URI的 MIME 類型定義。
MIMETYPE_TEXT_INTENT= “text/ohos.intent” Intent的 MIME 類型定義。
MAX_RECORD_NUM=128 單個(gè) PasteData 中所能包含的 Record 的數(shù)量上限。
  • PasteData.Record

一個(gè) PasteData 中包含若干個(gè)特定MIME類型的 PasteData.Record,每個(gè) Record 是存放剪貼板數(shù)據(jù)內(nèi)容信息的最小單位。

接口名 描述
createPlainTextRecord(CharSequence text) 構(gòu)造一個(gè) MIME 類型為純文本的內(nèi)容節(jié)點(diǎn)。
createHtmlTextRecord(String htmlText) 構(gòu)造一個(gè) MIME 類型為HTML的內(nèi)容節(jié)點(diǎn)。
createUriRecord(Uri uri) 構(gòu)造一個(gè) MIME 類型為URI的內(nèi)容節(jié)點(diǎn)。
createIntentRecord(Intent intent) 構(gòu)造一個(gè) 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

每個(gè) PasteData 中都有一個(gè) PasteData.DataProperty 成員,其中存放著該數(shù)據(jù)對象的屬性集合,例如自定義標(biāo)簽、MIME 類型集合列表,“僅在本地”標(biāo)記位等。

接口名 描述
getMimeTypes() 獲取所屬數(shù)據(jù)對象的 MIME 類型集合列表,當(dāng)內(nèi)容節(jié)點(diǎn)為空時(shí),返回列表為空對象。
hasMimeType(String mimeType) 判斷所屬數(shù)據(jù)對象中是否包含特定 MIME類型的內(nèi)容。
getTimestamp() 獲取所屬數(shù)據(jù)對象被寫入系統(tǒng)剪貼板時(shí)的時(shí)間戳,如果該數(shù)據(jù)對象尚未被寫入,則返回0。
setTag(CharSequence tag) 設(shè)置自定義標(biāo)簽。
getTag() 獲取自定義標(biāo)簽。
setAdditions(PacMap extraProps) 設(shè)置一些附加鍵值對信息
getAdditions() 獲取附加鍵值對信息。
setLocalOnly(boolean isLocalonly) 配置“僅在本地”標(biāo)志位,默認(rèn)配置為false,表示此數(shù)據(jù)對象能在分布式剪貼板場景下跨設(shè)備傳遞,否則只在本地設(shè)備使用。
isLocalOnly() 查詢“僅在本地”標(biāo)志位。
  • IPasteDataChangedListener

IPasteDataChangedListener 是定義剪貼板數(shù)據(jù)變化回調(diào)的接口類,開發(fā)者需要實(shí)現(xiàn)此接口來編碼觸發(fā)回調(diào)時(shí)的處理邏輯。

接口名 描述
onChanged() 當(dāng)系統(tǒng)剪貼板數(shù)據(jù)發(fā)生變化時(shí)的回調(diào)接口。

開發(fā)步驟

  • 應(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ù)對象中的首個(gè)文本類型(純文本/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) {
       for (int i = 0; i < pasteData.getRecordCount(); i++) {
           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;
           }
       }
   }
  • 應(yīng)用 C 注冊添加系統(tǒng)剪貼板數(shù)據(jù)變化回調(diào),當(dāng)系統(tǒng)剪貼板數(shù)據(jù)發(fā)生變化時(shí)觸發(fā)處理邏輯。
   IPasteDataChangedListener listener = new IPasteDataChangedListener() {
       @Override
       public void onChanged() {
           PasteData pasteData = pasteboard.getPasteData();
           if (pasteData == null) {
               return;
           }
           // Operations to handle data change on the system pasteboard
       }
   };
   pasteboard.addPasteDataChangedListener(listener);·
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • 鴻蒙
    +關(guān)注

    關(guān)注

    56

    文章

    2267

    瀏覽量

    42489
  • HarmonyOS
    +關(guān)注

    關(guān)注

    79

    文章

    1946

    瀏覽量

    29738
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    labview利用調(diào)用節(jié)點(diǎn)從剪貼板獲取圖像生成EXE文件無法使用

    labview利用調(diào)用節(jié)點(diǎn)從剪貼板獲取圖像生成EXE文件時(shí)無法使用,這是什么原因呢,怎么改呢
    發(fā)表于 06-06 22:17

    HarmonyOS應(yīng)用開發(fā)-剪貼板功能實(shí)現(xiàn)

    粘貼版是一個(gè)常用的功能,用戶通過系統(tǒng)剪貼板服務(wù),可實(shí)現(xiàn)應(yīng)用之間的簡單數(shù)據(jù)傳遞。例如:在應(yīng)用A中復(fù)制的數(shù)據(jù),可以在應(yīng)用B中粘貼,反之亦可。效果如圖: 關(guān)鍵代碼如下:public class
    發(fā)表于 03-30 10:48

    OpenHarmony 3.1 Release最全資料免費(fèi)獲取

    對靜態(tài)壁紙管理能力的支持  - 新增對下載服務(wù)管理能力的支持  主要涉及如下需求:  I4U2WR 新增特性:時(shí)間時(shí)區(qū)同步管理  I4ZTTE【新增特性】剪貼板數(shù)據(jù)項(xiàng)-支持將剪貼板數(shù)據(jù)項(xiàng)強(qiáng)制轉(zhuǎn)換為文本
    發(fā)表于 03-31 14:23

    基于GoKit的產(chǎn)品開發(fā)指導(dǎo)

    基于GoKit的產(chǎn)品開發(fā)指導(dǎo),有板子的可以下載看看的
    發(fā)表于 11-16 19:00 ?0次下載

    ZigBee2007視頻教程-應(yīng)用開發(fā)指導(dǎo)

    ZigBee2007視頻教程-應(yīng)用開發(fā)指導(dǎo)ZigBee2007視頻教程-應(yīng)用開發(fā)指導(dǎo)ZigBee2007視頻教程-應(yīng)用開發(fā)指導(dǎo)ZigBee2007視頻教程-應(yīng)用開發(fā)指導(dǎo)
    發(fā)表于 12-29 10:31 ?19次下載

    JAVA教程之使用剪貼板的復(fù)制粘貼程序

    JAVA教程之使用剪貼板的復(fù)制粘貼程序,很好的學(xué)習(xí)資料。
    發(fā)表于 03-31 11:13 ?5次下載

    Delphi教程之監(jiān)視剪貼板

    Delphi教程之監(jiān)視剪貼板,很好的Delphi資料,快來下載吧。
    發(fā)表于 04-11 16:09 ?9次下載

    小米手機(jī)和PC的共享剪貼板上線,PC端裝云服務(wù)客戶端就OK

    劉鳴稱:“看到有用戶在要共享剪貼板,其實(shí)我們已經(jīng)支持了,只需要電腦端裝小米云服務(wù)客戶端就可以了?!?/div>
    的頭像 發(fā)表于 11-24 09:09 ?7371次閱讀

    蘋果iOS應(yīng)用程序不經(jīng)過用戶同意讀取剪貼板數(shù)據(jù)

    據(jù)Macrumors報(bào)道,最新研究顯示數(shù)十種流行的iOS應(yīng)用程序,在未經(jīng)用戶同意的情況下,讀取剪貼板的內(nèi)容,其中可能包含敏感信息。
    的頭像 發(fā)表于 03-16 09:19 ?2756次閱讀

    iOS 14的隱私功能顯示了復(fù)制到剪貼板的TikTok閱讀文本

    開發(fā)人員開始下載并使用iOS 14 beta版,他們發(fā)現(xiàn)流行的視頻共享平臺(tái)TikTok是讀取用戶復(fù)制到剪貼板的文本的應(yīng)用程序之一。從下面的視頻中可以看到,在TikTok應(yīng)用程序打開時(shí),蘋果的新隱私警告繼續(xù)出現(xiàn)在屏幕上。
    的頭像 發(fā)表于 07-03 16:33 ?2258次閱讀

    HarmonyOS應(yīng)用開發(fā)案例 剪貼板功能實(shí)現(xiàn)

    粘貼版是一個(gè)常用的功能,用戶通過系統(tǒng)剪貼板服務(wù),可實(shí)現(xiàn)應(yīng)用之間的簡單數(shù)據(jù)傳遞。例如:在應(yīng)用A中復(fù)制的數(shù)據(jù),可以在應(yīng)用B中粘貼,反之亦可。 效果如圖: 關(guān)鍵代碼如下: public class
    的頭像 發(fā)表于 03-30 10:41 ?1168次閱讀
    HarmonyOS應(yīng)用<b class='flag-5'>開發(fā)</b>案例 <b class='flag-5'>剪貼板</b>功能實(shí)現(xiàn)

    ADP1074: 帶有活性剪貼板和 <span class="analog-coupler" >i </span> Cloupler數(shù)據(jù)表的孤立、同步前向控制器 ADI

    電子發(fā)燒友網(wǎng)為你提供ADI(ADI)ADP1074: 帶有活性剪貼板和 i
    發(fā)表于 10-08 16:41
    ADP1074: 帶有活性<b class='flag-5'>剪貼板</b>和 <span class="analog-coupler" >i </span> Cloupler數(shù)據(jù)表的孤立、同步前向控制器 ADI

    怎么將剪貼板數(shù)據(jù)導(dǎo)入到labview數(shù)組

    剪貼板數(shù)據(jù)導(dǎo)入到LabVIEW數(shù)組可以通過以下步驟完成。首先,需要使用LabVIEW自帶的函數(shù)庫VIs來實(shí)現(xiàn)剪貼板數(shù)據(jù)的獲取和處理。 第一步是獲取剪貼板數(shù)據(jù)。LabVIEW提供了Clipboard
    的頭像 發(fā)表于 01-05 13:35 ?1082次閱讀

    鴻蒙開發(fā)系統(tǒng)基礎(chǔ)能力:ohos.pasteboard 剪貼板

    以下各項(xiàng)對應(yīng)的系統(tǒng)能力均為SystemCapability.MiscServices.Pasteboard。
    的頭像 發(fā)表于 06-26 16:48 ?270次閱讀
    <b class='flag-5'>鴻蒙</b><b class='flag-5'>開發(fā)</b>系統(tǒng)基礎(chǔ)能力:ohos.pasteboard <b class='flag-5'>剪貼板</b>

    鴻蒙開發(fā)Ability Kit程序訪問控制:使用粘貼控件

    粘貼控件是一種特殊的系統(tǒng)安全控件,它允許應(yīng)用在用戶的授權(quán)下無提示地讀取剪貼板數(shù)據(jù)。
    的頭像 發(fā)表于 07-03 09:15 ?199次閱讀
    <b class='flag-5'>鴻蒙</b><b class='flag-5'>開發(fā)</b>Ability Kit程序訪問控制:使用粘貼控件