在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

鴻蒙Ability Kit(程序框架服務)【應用間使用Want分享數據】

jf_46214456 ? 來源:jf_46214456 ? 作者:jf_46214456 ? 2024-06-07 15:19 ? 次閱讀

應用間使用Want分享數據

在應用使用場景中,用戶經常需要將應用內的數據(如文字、圖片等)分享至其他應用以供進一步處理。Want支持實現應用間的數據分享。

應用文件分享

應用文件分享是應用之間通過分享URI(Uniform Resource Identifier)或文件描述符FD(File Descriptor)的方式,進行文件共享的過程。

  • 基于URI分享方式,應用可分享單個文件,通過[ohos.app.ability.wantConstant]的wantConstant.Flags接口以只讀或讀寫權限授權給其他應用。應用可通過[ohos.file.fs]的open接口打開URI,并進行讀寫操作。當前僅支持臨時授權,分享給其他應用的文件在被分享應用退出時權限被收回。
  • 基于FD分享方式,應用可分享單個文件,通過ohos.file.fs的open接口以指定權限授權給其他應用。應用從Want中解析拿到FD后可通過ohos.file.fs的讀寫接口對文件進行讀寫。

由于FD分享的文件關閉FD后,無法再打開分享文件,因此不推薦使用,本文重點介紹基于URI[分享文件給其他應用]或[使用其他應用分享的文件]。

應用可分享目錄

沙箱路徑物理路徑說明 開發前請熟悉鴻蒙開發指導文檔:gitee.com/li-shizhen-skin/harmony-os/blob/master/README.md點擊或者復制轉到。
/data/storage/el1/base/data/app/el1//base/應用el1級別加密數據目錄
/data/storage/el2/base/data/app/el2//base/應用el2級別加密數據目錄
/data/storage/el2/distributedfiles/mnt/hmdfs//account/device_view//data/應用el2加密級別有帳號分布式數據融合目錄

文件URI規范

文件URI的格式為:

格式為file:///

  • file:文件URI的標志。
  • bundleName:該文件資源的屬主。
  • path:文件資源在應用沙箱中的路徑。

分享文件給其他應用

在分享文件給其他應用前,開發者需要先[獲取應用文件路徑]。

  1. 獲取文件在應用沙箱中的路徑,并轉換為文件URI。

    import UIAbility from '@ohos.app.ability.UIAbility';
    import fileUri from '@ohos.file.fileuri';
    import window from '@ohos.window';
    
    export default class EntryAbility extends UIAbility {
      onWindowStageCreate(windowStage: window.WindowStage) {
        // 獲取文件的沙箱路徑
        let pathInSandbox = this.context.filesDir + "/test1.txt";
        // 將沙箱路徑轉換為uri
        let uri = fileUri.getUriFromPath(pathInSandbox);
        // 獲取的uri為"file://com.example.demo/data/storage/el2/base/files/test.txt"
      }
    }
    
  2. 設置獲取文件的權限以及選擇要分享的應用。 分享文件給其他應用需要使用[startAbility]接口,將獲取到的URI填充在want的參數uri中,標注URI的文件類型,type字段可參考[Want屬性],并通過設置want的flag來設置對應的讀寫權限,action字段配置為"ohos.want.action.sendData"表示進行應用文件分享,開發示例如下。

    說明:

    寫權限分享時,同時授予讀權限。

    import fileUri from '@ohos.file.fileuri';
    import window from '@ohos.window';
    import wantConstant from '@ohos.app.ability.wantConstant';
    import UIAbility from '@ohos.app.ability.UIAbility';
    import Want from '@ohos.app.ability.Want';
    import { BusinessError } from '@ohos.base';
    
    export default class EntryAbility extends UIAbility {
      onWindowStageCreate(windowStage: window.WindowStage) {
        // 獲取文件沙箱路徑
        let filePath = this.context.filesDir + '/test1.txt';
        // 將沙箱路徑轉換為uri
        let uri = fileUri.getUriFromPath(filePath);
        let want: Want  = {
          // 配置被分享文件的讀寫權限,例如對被分享應用進行讀寫授權
          flags: wantConstant.Flags.FLAG_AUTH_WRITE_URI_PERMISSION | wantConstant.Flags.FLAG_AUTH_READ_URI_PERMISSION,
          // 配置分享應用的隱式拉起規則
          action: 'ohos.want.action.sendData',
          uri: uri,
          type: 'text/plain'
        }
        this.context.startAbility(want)
          .then(() = > {
            console.info('Invoke getCurrentBundleStats succeeded.');
          })
          .catch((err: BusinessError) = > {
            console.error(`Invoke startAbility failed, code is ${err.code}, message is ${err.message}`);
          });
      }
      // ...
    }
    

圖1 效果示意圖:
share-app-file

使用其他應用分享的文件

被分享應用需要在[module.json5配置文件]的actions標簽的值配置為"ohos.want.action.sendData",表示接收應用分享文件,配置uris字段,表示接收URI的類型,即只接收其他應用分享該類型的URI,如下表示本應用只接收scheme為file,類型為txt的文件,示例如下。

{
  "module": {
    ...
    "abilities": [
      {
        ...
        "skills": [
          {
            ...
            "actions": [
              "ohos.want.action.sendData"
            ],
            "uris": [
              {
                "scheme": "file",
                "type": "text/plain"
              }
           ]
          }
        ]
      }
    ]
  }
}

被分享方的UIAbility被啟動后,可以在其[onCreate()]或者[onNewWant]回調中獲取傳入的Want參數信息

通過接口want的參數獲取分享文件的URI,獲取文件URI后通過fs.open接口打開文件,獲取對應的file對象后,可對文件進行讀寫操作。
鴻蒙文檔.png

`HarmonyOSOpenHarmony鴻蒙文檔籽料:mau123789是v直接拿`
// xxx.ets
import fs from '@ohos.file.fs';
import Want from '@ohos.app.ability.Want';
import { BusinessError } from '@ohos.base';

function getShareFile() {
  try {
    let want: Want = {}; // 此處實際使用時應該修改為獲取到的分享方傳遞過來的want信息

    // 從want信息中獲取uri字段
    let uri = want.uri;
    if (uri == null || uri == undefined) {
      console.info('uri is invalid');
      return;
    }
    try {
      // 根據需要對被分享文件的URI進行相應操作。例如讀寫的方式打開URI獲取file對象
      let file = fs.openSync(uri, fs.OpenMode.READ_WRITE);
      console.info('open file successfully!');
    } catch (err) {
      let error: BusinessError = err as BusinessError;
      console.error(`Invoke openSync failed, code is ${error.code}, message is ${error.message}`);
    }
  } catch (error) {
    let err: BusinessError = error as BusinessError;
    console.error(`Invoke openSync failed, code is ${err.code}, message is ${err.message}`);
  }
}

審核編輯 黃宇

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 接口
    +關注

    關注

    33

    文章

    8691

    瀏覽量

    151689
  • 框架
    +關注

    關注

    0

    文章

    403

    瀏覽量

    17522
  • 鴻蒙
    +關注

    關注

    57

    文章

    2392

    瀏覽量

    42972
收藏 人收藏

    評論

    相關推薦

    鴻蒙開發接口Ability框架:【@ohos.application.Ability (Ability)】

    Ability模塊提供對Ability生命周期、上下文環境等調用管理的能力,包括Ability創建、銷毀、轉儲客戶端信息等。
    的頭像 發表于 04-30 17:42 ?2320次閱讀
    <b class='flag-5'>鴻蒙</b>開發接口<b class='flag-5'>Ability</b><b class='flag-5'>框架</b>:【@ohos.application.<b class='flag-5'>Ability</b> (<b class='flag-5'>Ability</b>)】

    鴻蒙Ability Kit程序框架服務)【ServiceExtensionAbility】

    [ServiceExtensionAbility]是SERVICE類型的ExtensionAbility組件,提供后臺服務能力,其內部持有了一個[ServiceExtensionContext],通過[ServiceExtensionContext]提供了豐富的接口供外部使用。
    的頭像 發表于 06-04 14:50 ?1264次閱讀
    <b class='flag-5'>鴻蒙</b><b class='flag-5'>Ability</b> <b class='flag-5'>Kit</b>(<b class='flag-5'>程序</b><b class='flag-5'>框架</b><b class='flag-5'>服務</b>)【ServiceExtensionAbility】

    鴻蒙Ability Kit程序框架服務)【UIExtensionAbility】

    [UIExtensionAbility]是UI類型的ExtensionAbility組件,需要與[UIExtensionComponent]一起配合使用,開發者可以在UIAbility的頁面中通過UIExtensionComponent嵌入提供方應用的UIExtensionAbility提供的UI。UIExtensionAbility會在獨立于UIAbility的進程中運行,完成其頁面的布局和渲染。常用于有進程隔離訴求的系統彈窗、狀態欄、膠囊等模塊化開發的場景。
    的頭像 發表于 06-05 09:19 ?1465次閱讀
    <b class='flag-5'>鴻蒙</b><b class='flag-5'>Ability</b> <b class='flag-5'>Kit</b>(<b class='flag-5'>程序</b><b class='flag-5'>框架</b><b class='flag-5'>服務</b>)【UIExtensionAbility】

    鴻蒙Ability開發-Stage模型下Ability的創建和使用

    函數 HiLog日志系統可以讓應用按照指定類型、指定級別、指定格式字符串打印日志內容,幫助開發者了解應用/服務的運行狀態,更好地調試程序。 HiLog提供了debug、info、warn、error以及fatal
    發表于 01-08 15:34

    HarmonyOS NEXT應用元服務開發Intents Kit(意圖框架服務)綜述

    一、綜述 Intents Kit(意圖框架服務)是HarmonyOS級的意圖標準體系 ,意圖連接了應用/元服務內的業務功能。 意圖框架能幫開
    發表于 11-28 10:43

    跟阿斌一起學鴻蒙(2): Ability vs App?

    程序員們依然可以為你實現,只是實現起來會相對麻煩,比如各種遠程通信,各種數據和狀態的同步,還有各種聯調和測試。而鴻蒙OS,將很多麻煩的處理過程整合到操作系統中,借此希望讓程序員們可以
    發表于 11-30 20:56

    鴻蒙開發接口Ability框架:【@ohos.application.Want (Want)】

    Want模塊提供系統的基本通信組件的能力。
    的頭像 發表于 05-11 09:39 ?468次閱讀
    <b class='flag-5'>鴻蒙</b>開發接口<b class='flag-5'>Ability</b><b class='flag-5'>框架</b>:【@ohos.application.<b class='flag-5'>Want</b> (<b class='flag-5'>Want</b>)】

    鴻蒙應用模型:【Ability Kit】簡介

    Ability Kit程序框架服務)提供了應用程序開發和運行的應用模型,是系統為開發者提供的應
    的頭像 發表于 05-29 14:41 ?693次閱讀
    <b class='flag-5'>鴻蒙</b>應用模型:【<b class='flag-5'>Ability</b> <b class='flag-5'>Kit</b>】簡介

    鴻蒙Ability Kit程序框架服務)【Ability內頁面間的跳轉】

    基于Stage模型下的Ability開發,實現Ability內頁面間的跳轉和數據傳遞。
    的頭像 發表于 06-03 20:43 ?325次閱讀
    <b class='flag-5'>鴻蒙</b><b class='flag-5'>Ability</b> <b class='flag-5'>Kit</b>(<b class='flag-5'>程序</b><b class='flag-5'>框架</b><b class='flag-5'>服務</b>)【<b class='flag-5'>Ability</b>內頁面間的跳轉】

    鴻蒙Ability Kit程序框架服務)【ExtensionAbility組件】

    ExtensionAbility組件是基于特定場景(例如服務卡片、輸入法等)提供的應用組件,以便滿足更多的使用場景。
    的頭像 發表于 06-04 15:54 ?651次閱讀
    <b class='flag-5'>鴻蒙</b><b class='flag-5'>Ability</b> <b class='flag-5'>Kit</b>(<b class='flag-5'>程序</b><b class='flag-5'>框架</b><b class='flag-5'>服務</b>)【ExtensionAbility組件】

    鴻蒙Ability Kit程序框架服務)【Ability與ServiceExtensionAbility通信】

    本示例展示通過[IDL的方式]和?[@ohos.rpc]?等接口實現了Ability與ServiceExtensionAbility之間的通信。
    的頭像 發表于 06-05 09:28 ?526次閱讀
    <b class='flag-5'>鴻蒙</b><b class='flag-5'>Ability</b> <b class='flag-5'>Kit</b>(<b class='flag-5'>程序</b><b class='flag-5'>框架</b><b class='flag-5'>服務</b>)【<b class='flag-5'>Ability</b>與ServiceExtensionAbility通信】

    鴻蒙Ability Kit程序框架服務)【Want概述】

    [Want]是一種對象,用于在應用組件之間傳遞信息。
    的頭像 發表于 06-06 09:16 ?574次閱讀
    <b class='flag-5'>鴻蒙</b><b class='flag-5'>Ability</b> <b class='flag-5'>Kit</b>(<b class='flag-5'>程序</b><b class='flag-5'>框架</b><b class='flag-5'>服務</b>)【<b class='flag-5'>Want</b>概述】

    鴻蒙Ability Kit程序框架服務)【顯式Want與隱式Want匹配規則】

    在啟動目標應用組件時,會通過顯式[Want]或者隱式[Want]進行目標應用組件的匹配,這里說的匹配規則就是調用方傳入的[want]參數中設置的參數如何與目標應用組件聲明的配置文件進行匹配。
    的頭像 發表于 06-06 14:30 ?603次閱讀
    <b class='flag-5'>鴻蒙</b><b class='flag-5'>Ability</b> <b class='flag-5'>Kit</b>(<b class='flag-5'>程序</b><b class='flag-5'>框架</b><b class='flag-5'>服務</b>)【顯式<b class='flag-5'>Want</b>與隱式<b class='flag-5'>Want</b>匹配規則】

    鴻蒙Ability Kit程序框架服務)【應用啟動框架AppStartup】

    `AppStartup`提供了一種更加簡單高效的初始化組件的方式,支持異步初始化組件加速應用的啟動時間。使用啟動框架應用開發者只需要分別為待初始化的組件實現`AppStartup`提供
    的頭像 發表于 06-10 18:38 ?761次閱讀

    鴻蒙開發Ability Kit程序框架服務:任務管理

    AbilityRecord:系統服務側管理一個UIAbility實例的最小單元,對應一個應用側的UIAbility組件實例。系統服務側管理UIAbility實例數量上限為512個。
    的頭像 發表于 06-24 14:46 ?504次閱讀
    <b class='flag-5'>鴻蒙</b>開發<b class='flag-5'>Ability</b> <b class='flag-5'>Kit</b><b class='flag-5'>程序</b><b class='flag-5'>框架</b><b class='flag-5'>服務</b>:任務管理
    主站蜘蛛池模板: 国产成人啪午夜精品网站男同 | 中国免费黄色片 | 天堂最新版中文网 | 亚洲国产精品久久久久婷婷软件 | www.久操| 香港三澳门三日本三级 | 天天操天天干天天透 | 无内丝袜透明在线播放 | 天堂中文在线观看 | 午夜老湿影院 | 久久综合婷婷 | 国产高清视频在线播放www色 | 狠狠操综合 | 亚洲午夜精品久久久久久抢 | 亚洲成人资源 | 国产一级做a爰片久久毛片男 | 色综合久久五月 | 亚洲精品黄色 | 婷婷激情五月综合 | 美女操出水| 伊人毛片 | 亚洲成a人v在线观看 | 免费一级毛片视频 | 手机看片精品国产福利盒子 | 黄视频在线免费看 | 永久免费视频 | 永久免费的啪啪免费的网址 | 黄色在线观看视频 | 人人艹人人插 | 手机在线看片国产日韩生活片 | 99久久免费精品视频 | 一区二区三区无码高清视频 | 视频在线观看免费视频 | 亚洲精品视频专区 | 女人爽到喷水的视频大全在线观看 | 五月天丁香色 | 黄色国产精品 | 成人在线视频网 | 国产午夜精品理论片在线 | 手机毛片在线 | 黄 色 免费网 站 成 人 |