貼上控制元件是一種特殊的系統安全控制元件,它允許應用在使用者的授權下無提示地讀取剪貼簿資料。
在應用整合貼上控制元件後,使用者點選該控制元件,應用讀取剪貼簿資料時不會彈窗提示。可以用於任何應用需要讀取剪貼簿的場景,避免彈窗提示對使用者造成干擾。
例如,使用者在應用外(如簡訊)複製了驗證碼,要在應用內貼上驗證碼。使用者原來在進入應用後,還需要長按輸入框、在彈出的選項中點選貼上,才能完成輸入。而使用貼上控制元件,使用者只需進入應用後直接點選貼上按鈕,即可一步到位。
貼上控制元件效果如圖所示。
約束與限制
- 臨時授權會持續到滅屏、應用切後臺、應用退出情況發生。
- 應用在授權期間沒有呼叫次數限制。
- 為了保障使用者的隱私不被惡意應用獲取,應用需確保安全控制元件是可見的且使用者能夠識別的。開發者需要合理的配置控制元件的尺寸、顏色等屬性,避免視覺混淆的情況,如果發生因控制元件的樣式不合法導致授權失敗的情況,請檢查裝置錯誤日誌。
開發步驟
以簡化使用者填寫驗證碼為例,參考以下步驟,實現效果:點選控制元件獲取臨時授權,貼上內容到文字框,效果圖請見上文。
- 匯入剪貼簿依賴。
import { pasteboard } from '@kit.BasicServicesKit';
-
新增輸入框和貼上控制元件。
貼上控制元件是由圖示、文字、背景組成的類似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%')
}
}