鴻蒙 - 分享功能

文章目錄

  • 一、背景
  • 二、app發起分享
    • 1. 通過分享面板進行分享
    • 2. 使用其他應用打開
  • 二、處理分享的內容
    • 1. `module.json5` 配置可接收分享
    • 2. 解析分享的數據

一、背景

在App開發中,分享是常用功能,這里介紹鴻蒙開發中,其他應用分享到自己的app中,或者自己的app分享給其他app
鴻蒙系統分享地址

二、app發起分享

1. 通過分享面板進行分享

  1. 導入相關模塊。
import { common } from '@kit.AbilityKit';
import { systemShare } from '@kit.ShareKit';
import { uniformTypeDescriptor as utd } from '@kit.ArkData';
  1. 獲取統一數據類型
    可以自己確定分享的類型,也可以調用方法通過后綴獲取分享類型
    getUniformDataTypeByFilenameExtension
let utdTypeId = ""if (file.extension.length == 0) {utdTypeId = utd.UniformDataType.FOLDER} else {utdTypeId = utd.getUniformDataTypeByFilenameExtension(file.extension, utd.UniformDataType.OBJECT);}if (utdTypeId.length == 0) {promptAction.showToast({message: appUtils.getResString('share_tip2')})return}
  1. 構造分享數據,可添加多條分享記錄。
let shareData: systemShare.SharedData = new systemShare.SharedData({utd: utdTypeId,uri: file.uri});
  1. 啟動分享面板時,配置分享面板顯示的位置信息或關聯的組件ID,面板將以Popup形式展示。
let controller: systemShare.ShareController = new systemShare.ShareController(shareData);// 獲取UIAbility上下文對象let context: common.UIAbilityContext = getContext(this) as common.UIAbilityContext;// 進行分享面板顯示controller.show(context, {previewMode: systemShare.SharePreviewMode.DEFAULT,selectionMode: systemShare.SelectionMode.SINGLE});

2. 使用其他應用打開

通過context調用startAbility,彈出系統彈窗,使用其他應用打開文件

// Construct request data Want, taking opening a Word file as an examplelet wantInfo: Want = {uri: file.uri, // Indicate the URI path of the file to be opened, usually used in conjunction with typetype: 'application/msword', // Indicate the type of file to be openedflags: wantConstant.Flags.FLAG_AUTH_WRITE_URI_PERMISSION, // Authorization to perform write operations on URI}// Call the startAbility interface to open fileslet context = getContext(this) as common.UIAbilityContext;context.startAbility(wantInfo).then(() => {console.info("分享成功");}).catch((err: BusinessError) => {console.info("分享失敗");})

二、處理分享的內容

1. module.json5 配置可接收分享

module.json5 下找到 abilities標簽,找到 skills

  1. 配置entities添加 "entity.system.share"
"entities": ["entity.system.home","entity.system.share"],
  1. 配置actions,添加actions
"actions": ["action.system.home","ohos.want.action.select","ohos.want.action.sendData","ohos.want.action.viewData" // 必填,聲明數據處理能力],
  1. 配置uris
"uris": [{"scheme": "file",// 物理存儲類型的基類型"utd": "general.entity","maxFileSupported": 1,"linkFeature": "FileOpen"},{"scheme": "file",// 邏輯內容類型的基類型"utd": "general.object","maxFileSupported": 1,"linkFeature": "FileOpen"}]

2. 解析分享的數據

  1. 在其onCreate或onNewWant回調中獲取傳入的want參數
onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void {this.context.getApplicationContext().setColorMode(ConfigurationConstant.ColorMode.COLOR_MODE_NOT_SET);// 注入Ability上下文到AppUtilsAppUtils.getInstance().context = this.context;hilog.info(DOMAIN, 'testTag', '%{public}s', 'Ability onCreate');ShareManager.getInstance().handelShareData(want);}
onNewWant(want: Want, launchParam: AbilityConstant.LaunchParam): void {ShareManager.getInstance().handelShareData(want)}
  1. 通過getSharedData 解析分享數據
/** 處理分享過來的文件 */public handelShareData(want: Want) {systemShare.getSharedData(want).then((data: systemShare.SharedData) => {data.getRecords().forEach((record: systemShare.SharedRecord) => {// 處理分享數據});}).catch((error: BusinessError) => {DKLogger.error(`Failed to getSharedData. Code: ${error.code}, message: ${error.message}`);// this.context.terminateSelf();if (want.action == 'ohos.want.action.sendData'|| want.action == 'ohos.want.action.viewData') {}});}

處理完分享數據,即可將數據在頁面顯示

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/917932.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/917932.shtml
英文地址,請注明出處:http://en.pswp.cn/news/917932.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【Agent 系統設計】基于大語言模型的智能Agent系統

一篇阿里博文引發的思考和探索。基于大語言模型的智能Agent系統 1. 系統核心思想 核心思想是構建一個以大語言模型(LLM)為“大腦”的智能代理(Agent),旨在解決將人類的自然語言指令高效、準確地轉化為機器可執行的自動…

企業級Web框架性能對決:Spring Boot、Django、Node.js與ASP.NET深度測評

企業級Web應用的開發效率與運行性能直接關系到業務的成敗。本文通過構建標準化的待辦事項(Todo)應用,對四大主流框架——Spring Boot、Django、Node.js和ASP.NET展開全面的性能較量。我們將從底層架構特性出發,結合實測數據與數據…

為什么 `source ~/.bashrc` 在 systemd 或 crontab 中不生效

摘要:你是否遇到過這樣的問題:在終端里運行腳本能正常工作,但用 systemd 或 crontab 自動啟動時卻報錯“命令找不到”、“模塊導入失敗”? 本文將揭示一個深藏在 ~/.bashrc 中的“陷阱”:非交互式 shell 會直接退出&am…

Linux 磁盤中的文件

1.磁盤結構 Linux中的文件加載到內存上之前是放到哪的? 放在磁盤上的文件——>訪問文件,打開它——>找到這個文件——>路徑 但文件是怎樣存儲在磁盤上的 1.1物理結構磁盤可以理解為上百億個小磁鐵(如N為1,S為0&#xff0…

【方法】Git本地倉庫的文件夾不顯示紅色感嘆號、綠色對號等圖標

文章目錄前言開始操作winr,輸入regedit,打開注冊表重啟資源管理器前言 這個綠色對號圖標表示本地倉庫和遠程的GitHub倉庫內容保持一致,紅色則是相反咯,給你們瞅一下。 首先這兩個東西你一定要安裝配置好了,安裝順序不…

量化交易與主觀交易:哪種方式更勝一籌?

文章概要 在投資的世界里,量化交易和主觀交易如同冰與火,各自擁有獨特的優勢與挑戰。作為一名投資者,了解這兩種交易方式的差異和各自的優缺點至關重要。本文將從決策依據、執行方式、風險管理等方面深入探討量化交易的精確性與主觀交易的靈活…

【JS】扁平樹數據轉為樹結構

扁平數據轉為最終效果[{"label":"疼遜有限公司","code":"1212","disabled":false,"parentId":"none","children":[{"label":"財務部","code":"34343&quo…

數據結構4-棧、隊列

摘要:本文系統介紹了棧和隊列兩種基礎數據結構。棧采用"先進后出"原則,分為順序棧和鏈式棧,詳細說明了壓棧、出棧等基本操作及其實現方法。隊列遵循"先進先出"規則,同樣分為順序隊列和鏈式隊列,重…

大數據spark、hasdoop 深度學習、機器學習算法的音樂平臺用戶情感分析系統設計與實現

大數據spark、hasdoop 深度學習、機器學習算法的音樂平臺用戶情感分析系統設計與實現

視頻匯聚系統EasyCVR調用設備錄像保活時視頻流不連貫問題解決方案

在使用EasyCVR過程中,有用戶反饋調用設備錄像保活功能時,出現視頻流不連貫的情況。針對這一問題,我們經過排查與測試,整理出如下解決步驟,供開發者參考:具體解決步驟1)先調用登錄接口完成鑒權確…

【保姆級喂飯教程】python基于mysql-connector-python的數據庫操作通用封裝類(連接池版)

目錄項目環境一、db_config.py二、mysql_executor.py三、test/main.py在使用mysql-connector-python連接MySQL數據庫的時候,如同Java中的jdbc一般,每條sql需要創建和刪除連接,很自然就想到寫一個抽象方法,但是找了找沒有官方標準的…

【MCP服務】藍耘元生代 | 藍耘MCP平臺來襲!DeepSeek MCP服務器玩轉大模型集成

【作者主頁】Francek Chen 【專欄介紹】???人工智能與大模型應用??? 人工智能(AI)通過算法模擬人類智能,利用機器學習、深度學習等技術驅動醫療、金融等領域的智能化。大模型是千億參數的深度神經網絡(如ChatGPT&#xff09…

Spring Boot 整合 Minio 實現高效文件存儲解決方案(本地和線上)

文章目錄前言一、配置1.配置文件:application.yml2.配置類:MinioProperties3.工具類:MinioUtil3.1 初始化方法3.2 核心功能3.3 關鍵技術點二、使用示例1.控制器類:FileController2.服務類3.效果展示總結前言 Minio 是一個高性能的…

【Unity3D實例-功能-鏡頭】第三人稱視覺-鏡頭優化

這一篇我們一起來調整一下Cinemachine的第三人稱視覺的鏡頭設置。一般用于ARPG角色扮演游戲的場景中。Unity里頭,這種視角簡直就是標配。來吧,咱們一起研究研究怎么調出這種視角效果!目錄:1.調整虛擬攝像機的Y軸2.調整虛擬攝像機的…

二叉樹算法之【中序遍歷】

目錄 LeetCode-94題 LeetCode-94題 給定一個二叉樹的根節點root&#xff0c;返回它的中序遍歷結果。 class Solution {public List<Integer> inorderTraversal(TreeNode root) {List<Integer> result new ArrayList<>();order(root, result);return res…

Android14的QS面板的加載解析

/frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/phone/CentralSurfacesImpl.java QS 面板的創建 getNotificationShadeWindowView()&#xff1a;整個systemui的最頂級的視圖容器&#xff08;super_notification_shade.xml&#xff09;R.id.qs_frame &…

解鎖webpack核心技能(二):配置文件和devtool配置指南

一、配置文件webpack 提供的 cli 支持很多的參數&#xff0c;例如 --mode 。在我們平時的開發過程中&#xff0c;我們要學習很多的功能&#xff0c;這些很多都是可以用參數來完成的。那么后邊就會導致參數越來越多&#xff0c;我們使用命令特別的不方便&#xff0c;所以我們會使…

Gitlab+Jenkins+K8S+Registry 建立 CI/CD 流水線

一、前言 DevOps是一種將開發&#xff08;Development&#xff09;和運維&#xff08;Operations&#xff09;相結合的軟件開發方法論。它通過自動化和持續交付的方式&#xff0c;將軟件開發、測試和部署等環節緊密集成&#xff0c;以提高效率和產品質量。在本篇博客中&#xf…

【Linux】特效爆滿的Vim的配置方法 and make/Makefile原理

一、軟件包管理器 1、Linux下安裝軟件的常見方式&#xff1a; 1&#xff09;源代碼安裝——不推薦。 2&#xff09;rpm包安裝——不推薦。 3&#xff09;包管理器安裝——推薦 2、安裝軟件命令 # Centos$ sudo yum install -y lrzsz# Ubuntu$ sudo apt install -y lrzsz 3、卸…

Spring Boot Actuator 監控功能的簡介及禁用

Spring Boot Actuator: Production-ready Features 1. 添加依賴 <dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId></dependency> </dependencie…