鴻蒙安全控制元件之貼上控制元件簡介

龙儿筝發表於2024-11-22

貼上控制元件是一種特殊的系統安全控制元件,它允許應用在使用者的授權下無提示地讀取剪貼簿資料。

在應用整合貼上控制元件後,使用者點選該控制元件,應用讀取剪貼簿資料時不會彈窗提示。可以用於任何應用需要讀取剪貼簿的場景,避免彈窗提示對使用者造成干擾。

例如,使用者在應用外(如簡訊)複製了驗證碼,要在應用內貼上驗證碼。使用者原來在進入應用後,還需要長按輸入框、在彈出的選項中點選貼上,才能完成輸入。而使用貼上控制元件,使用者只需進入應用後直接點選貼上按鈕,即可一步到位。

貼上控制元件效果如圖所示。
img

約束與限制

  • 臨時授權會持續到滅屏、應用切後臺、應用退出情況發生。
  • 應用在授權期間沒有呼叫次數限制。
  • 為了保障使用者的隱私不被惡意應用獲取,應用需確保安全控制元件是可見的且使用者能夠識別的。開發者需要合理的配置控制元件的尺寸、顏色等屬性,避免視覺混淆的情況,如果發生因控制元件的樣式不合法導致授權失敗的情況,請檢查裝置錯誤日誌。

開發步驟

以簡化使用者填寫驗證碼為例,參考以下步驟,實現效果:點選控制元件獲取臨時授權,貼上內容到文字框,效果圖請見上文。

  1. 匯入剪貼簿依賴。
import { pasteboard } from '@kit.BasicServicesKit';
  1. 新增輸入框和貼上控制元件。

    貼上控制元件是由圖示、文字、背景組成的類似Button的按鈕,其中圖示、文字兩者至少有其一,背景必選。圖示和文字不支援自定義,僅支援在已有的選項中選擇。

    應用申明安全控制元件的介面時,分為傳參和不傳參兩種,不傳參預設建立圖示+文字+背景的按鈕,傳參根據傳入的引數建立,不包含沒有配置的元素。

    當前示例使用預設引數。具體請參見PasteButton控制元件。此外,所有安全控制元件都繼承安全控制元件通用屬性,可用於定製樣式。

import { pasteboard, BusinessError } from '@kit.BasicServicesKit';

@Entry
@Component
struct Index {
  @State message: string = '';

  build() {
    Row() {
      Column({ space: 10 }) {
        TextInput({ placeholder: '請輸入驗證碼', text: this.message })
        PasteButton()
          .padding({top: 12, bottom: 12, left: 24, right: 24})
          .onClick((event: ClickEvent, result: PasteButtonOnClickResult) => {
            if (PasteButtonOnClickResult.SUCCESS === result) {
              pasteboard.getSystemPasteboard().getData((err: BusinessError, pasteData: pasteboard.PasteData) => {
                if (err) {
                  console.error(`Failed to get paste data. Code is ${err.code}, message is ${err.message}`);
                  return;
                }
                // 剪貼簿內容為 '123456'
                this.message = pasteData.getPrimaryText();
              });
            }
          })
      }
      .width('100%')
    }
    .height('100%')
  }
}

相關文章