国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

鴻蒙APP開發(fā)實戰(zhàn):【Api9】拍照、拍視頻;選擇圖片、視頻、文件工具類

這篇具有很好參考價值的文章主要介紹了鴻蒙APP開發(fā)實戰(zhàn):【Api9】拍照、拍視頻;選擇圖片、視頻、文件工具類。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

鴻蒙開發(fā)過程中,經(jīng)常會進行系統(tǒng)調(diào)用,拍照、拍視頻、選擇圖庫圖片、選擇圖庫視頻、選擇文件。今天就給大家分享一個工具類。

1.?話不多說,先展示樣式

鴻蒙應(yīng)用開發(fā)實戰(zhàn)手機app發(fā)現(xiàn)功能開發(fā),鴻蒙,harmonyos,移動開發(fā),鴻蒙開發(fā),鴻蒙系統(tǒng),鴻蒙,OpenHarmony,程序員

2.設(shè)計思路

根據(jù)官方提供的指南開發(fā)工具類,基礎(chǔ)的拍照、拍視頻、圖庫選照片、選文件不過多綴述,圖庫選擇這里設(shè)計成集合形式,可返回圖片和視頻,視頻展示時不顯示內(nèi)容,所以在工具類多加了一個獲取視頻縮略圖的功能。

更多鴻蒙開發(fā)應(yīng)用知識已更新gitee.com/li-shizhen-skin/harmony-os/blob/master/README.md參考前往。

鴻蒙應(yīng)用開發(fā)實戰(zhàn)手機app發(fā)現(xiàn)功能開發(fā),鴻蒙,harmonyos,移動開發(fā),鴻蒙開發(fā),鴻蒙系統(tǒng),鴻蒙,OpenHarmony,程序員

3.具體代碼

import common from '@ohos.app.ability.common';
import picker from '@ohos.file.picker';
import mediaLibrary from '@ohos.multimedia.mediaLibrary';
import wantConstant from '@ohos.ability.wantConstant';
import { MediaBean } from '../bean/MediaBean';
import { StringUtils } from '../utils/StringUtils';

/**
 * @description 多媒體輔助類
 * @author Gwei
 * @time 2024/3/1 15:57
 */
export class MediaHelper {
  private readonly TAG: string = 'MediaHelper';

  private mContext: common.Context;

  constructor(context: common.Context) {
    this.mContext = context;
  }

  /**
   * 圖庫選擇,返回最大數(shù)量為9的圖片、視頻集合
   */
  public selectPicture(count:number): Promise<Array<MediaBean>> {

    let imgList:Array<string> = [];
    let mediaList:Array<MediaBean> = [];
    try {
      let photoSelectOptions = new picker.PhotoSelectOptions();
      photoSelectOptions.MIMEType = picker.PhotoViewMIMETypes.IMAGE_TYPE;
      photoSelectOptions.maxSelectNumber = 9-count;
      let photoPicker = new picker.PhotoViewPicker();
      return photoPicker.select(photoSelectOptions)
        .then((photoSelectResult) => {
          //Log.info(this.TAG, 'PhotoViewPicker.select successfully, PhotoSelectResult uri: ' + JSON.stringify(photoSelectResult));

          if (photoSelectResult && photoSelectResult.photoUris && photoSelectResult.photoUris.length > 0) {

            for (let i = 0; i < photoSelectResult.photoUris.length; i++) {
              imgList.push(photoSelectResult.photoUris[i]);
            }
            //Log.info(this.TAG, 'PhotoViewPicker.select successfully, PhotoSelectResult uri: ' + filePath);
            return imgList;
          }

        }).catch((err) => {
          //Log.error(this.TAG, 'PhotoViewPicker.select failed with err: ' + err);
          return err;
        }).then(async (imgList) => {
          for (let index = 0; index < imgList.length; index++) {
            const mediaBean = await this.buildMediaBean(imgList[index]);
            mediaList.push(mediaBean);
          }
          return mediaList;
        });
    } catch (err) {
      //Log.error(this.TAG, 'PhotoViewPicker failed with err: ' + err);
      return Promise.reject(err);
    }
  }

  /**
   * 選擇文件
   */
  public selectFile(): Promise<MediaBean> {
    try {
      let documentSelectOptions = new picker.DocumentSelectOptions();
      let documentPicker = new picker.DocumentViewPicker();
      return documentPicker.select(documentSelectOptions)
        .then((documentSelectResult) => {
          //Log.info(this.TAG, 'DocumentViewPicker.select successfully, DocumentSelectResult uri: ' + JSON.stringify(documentSelectResult));

          if (documentSelectResult && documentSelectResult.length > 0) {
            let filePath = documentSelectResult[0];
            //Log.info(this.TAG, 'DocumentViewPicker.select successfully, DocumentSelectResult uri: ' + filePath);
            return filePath;
          }

        }).catch((err) => {
          //Log.error(this.TAG, 'PhotoViewPicker.select failed with err: ' + err);
          return err;
        }).then(async (filePath) => {

          const mediaBean = await this.buildMediaBean(filePath);
          return mediaBean;

        });
    } catch (err) {
      //Log.error(this.TAG, 'PhotoViewPicker failed with err: ' + err);
      return Promise.reject(err);
    }
  }


  /**
   * 拍照
   */
  public async takePhoto(context: common.UIAbilityContext): Promise<MediaBean> {


    let want = {
      'uri': '',
      'action': wantConstant.Action.ACTION_IMAGE_CAPTURE,
      'parameters': {},
    };
    return context.startAbilityForResult(want)
      .then((result) => {
        //Log.info(this.TAG, `startAbility call back , ${JSON.stringify(result)}`);
        if (result.resultCode === 0 && result.want && StringUtils.isNotNullOrEmpty(result.want.uri)) {
          //拍照成功
          //Log.info(this.TAG, 'takePhoto successfully, takePhotoResult uri: ' + result.want.uri);
          return result.want.uri;
        }
      }).catch((error) => {
        //Log.info(this.TAG, `startAbility error , ${JSON.stringify(error)}`);
        return error;
      }).then(async (uri: string) => {
        const mediaBean = await this.buildMediaBean(uri);
        return mediaBean;
      });
  }

  /**
   * 拍視頻
   */
  public async takeVideo(context: common.UIAbilityContext): Promise<MediaBean> {


    let want = {
      'uri': '',
      'action': wantConstant.Action.ACTION_VIDEO_CAPTURE,
      'parameters': {},
    };
    return context.startAbilityForResult(want)
      .then((result) => {
        //Log.info(this.TAG, `startAbility call back , ${JSON.stringify(result)}`);
        if (result.resultCode === 0 && result.want && StringUtils.isNotNullOrEmpty(result.want.uri)) {
          //拍照成功
          //Log.info(this.TAG, 'takePhoto successfully, takePhotoResult uri: ' + result.want.uri);
          return result.want.uri;
        }
      }).catch((error) => {
        //Log.info(this.TAG, `startAbility error , ${JSON.stringify(error)}`);
        return error;
      }).then(async (uri: string) => {
        const mediaBean = await this.buildMediaBean(uri);
        return mediaBean;
      });
  }


  /**
   * 封裝多媒體實體類
   *
   * @param uri 文件路徑
   */
  private async buildMediaBean(uri: string): Promise<MediaBean> {

    if (StringUtils.isNullOrEmpty(uri)) {
      return null;
    }

    const mediaBean: MediaBean = new MediaBean();
    mediaBean.localUrl = uri;
    await this.appendFileInfoToMediaBean(mediaBean, uri);
    return mediaBean;
  }

  /**
   * 通過Uri查找所選文件信息,插入到MediaBean中
   * @param mediaBean
   * @param uri
   */
  private async appendFileInfoToMediaBean(mediaBean: MediaBean, uri: string):Promise<MediaBean> {

    if (StringUtils.isNullOrEmpty(uri)) {
      return;
    }
    let fileList: Array<mediaLibrary.FileAsset> = [];

    const parts: string[] = uri.split('/');
    const id: string = parts.length > 0 ? parts[parts.length - 1] : '-1';

    try {

      let media = mediaLibrary.getMediaLibrary(this.mContext);
      let mediaFetchOptions: mediaLibrary.MediaFetchOptions = {
        selections: mediaLibrary.FileKey.ID + '= ?',
        selectionArgs: [id],
        uri: uri
      };

      let fetchFileResult = await media.getFileAssets(mediaFetchOptions);
      //Log.info(this.TAG, `fileList getFileAssetsFromType fetchFileResult.count = ${fetchFileResult.getCount()}`);
      fileList = await fetchFileResult.getAllObject();
      fetchFileResult.close();
      await media.release();

    } catch (e) {
      //Log.error(this.TAG, "query: file data  exception ");
    }

    if (fileList && fileList.length > 0) {

      let fileInfoObj = fileList[0];
      //Log.info(this.TAG, `file id = ${JSON.stringify(fileInfoObj.id)} , uri = ${JSON.stringify(fileInfoObj.uri)}`);
      //Log.info(this.TAG, `file fileList displayName = ${fileInfoObj.displayName} ,size = ${fileInfoObj.size} ,mimeType = ${fileInfoObj.mimeType}`);

      mediaBean.fileName = fileInfoObj.displayName;
      mediaBean.fileSize = fileInfoObj.size;
      mediaBean.fileType = fileInfoObj.mimeType;
      mediaBean.pixelmap = await this.getPixelmap(fileInfoObj)
    }
  }

  /**
   * @description 獲取縮略圖
   * @author Gwei
   * @time 2024/3/1 15:57
   */
  getPixelmap(fileInfoObj) {
    return new Promise(function (resolve, reject) {
      fileInfoObj.getThumbnail((err, pixelmap) => {
        if (!err) {
          resolve(pixelmap)
        }else{
          resolve('');
        }
      })
    })
  }
}

4.使用方法

async handleClick(option: MediaOption) {
    let mediaBean: MediaBean;
    switch (option) {
      case MediaOption.TakePhoto:
        mediaBean = await this.mediaHelper.takePhoto(getContext() as common.UIAbilityContext);
        this.imgList.push(mediaBean)
        break;
      case MediaOption.TakeVideo:
        mediaBean = await this.mediaHelper.takeVideo(getContext() as common.UIAbilityContext);
        this.imgList.push(mediaBean)
        break;
      case MediaOption.Picture:
        let list: Array<MediaBean> = [];
        list = await this.mediaHelper.selectPicture(this.imgList.length);
        for (let i = 0; i < list.length; i++) {
          this.imgList.push(list[i])
        }
        break;
      case MediaOption.File:
        mediaBean = await this.mediaHelper.selectFile();
        this.audioList.push(mediaBean);
        break;
      default:
        break;
    }
}

工具類已經(jīng)提供給大家了,希望能幫助到大家?。?!

鴻蒙開發(fā)崗位需要掌握那些核心要領(lǐng)?

目前還有很多小伙伴不知道要學習哪些鴻蒙技術(shù)?不知道重點掌握哪些?為了避免學習時頻繁踩坑,最終浪費大量時間的。

自己學習時必須要有一份實用的鴻蒙(Harmony NEXT)資料非常有必要。 這里我推薦,根據(jù)鴻蒙開發(fā)官網(wǎng)梳理與華為內(nèi)部人員的分享總結(jié)出的開發(fā)文檔。內(nèi)容包含了:【ArkTS、ArkUI、Stage模型、多端部署、分布式應(yīng)用開發(fā)、音頻、視頻、WebGL、OpenHarmony多媒體技術(shù)、Napi組件、OpenHarmony內(nèi)核、Harmony南向開發(fā)、鴻蒙項目實戰(zhàn)】等技術(shù)知識點。

廢話就不多說了,接下來好好看下這份資料。

如果你是一名Android、Java、前端等等開發(fā)人員,想要轉(zhuǎn)入鴻蒙方向發(fā)展??梢灾苯宇I(lǐng)取這份資料輔助你的學習。鴻蒙OpenHarmony知識←前往。下面是鴻蒙開發(fā)的學習路線圖。

鴻蒙應(yīng)用開發(fā)實戰(zhàn)手機app發(fā)現(xiàn)功能開發(fā),鴻蒙,harmonyos,移動開發(fā),鴻蒙開發(fā),鴻蒙系統(tǒng),鴻蒙,OpenHarmony,程序員

鴻蒙應(yīng)用開發(fā)實戰(zhàn)手機app發(fā)現(xiàn)功能開發(fā),鴻蒙,harmonyos,移動開發(fā),鴻蒙開發(fā),鴻蒙系統(tǒng),鴻蒙,OpenHarmony,程序員

鴻蒙應(yīng)用開發(fā)實戰(zhàn)手機app發(fā)現(xiàn)功能開發(fā),鴻蒙,harmonyos,移動開發(fā),鴻蒙開發(fā),鴻蒙系統(tǒng),鴻蒙,OpenHarmony,程序員

針對鴻蒙成長路線打造的鴻蒙學習文檔。鴻蒙(OpenHarmony )學習手冊(共計1236頁)與鴻蒙(OpenHarmony )開發(fā)入門教學視頻,幫助大家在技術(shù)的道路上更進一步。

其中內(nèi)容包含:

《鴻蒙開發(fā)基礎(chǔ)》鴻蒙OpenHarmony知識←前往

  1. ArkTS語言
  2. 安裝DevEco Studio
  3. 運用你的第一個ArkTS應(yīng)用
  4. ArkUI聲明式UI開發(fā)
  5. .……

《鴻蒙開發(fā)進階》鴻蒙OpenHarmony知識←前往

  1. Stage模型入門
  2. 網(wǎng)絡(luò)管理
  3. 數(shù)據(jù)管理
  4. 電話服務(wù)
  5. 分布式應(yīng)用開發(fā)
  6. 通知與窗口管理
  7. 多媒體技術(shù)
  8. 安全技能
  9. 任務(wù)管理
  10. WebGL
  11. 國際化開發(fā)
  12. 應(yīng)用測試
  13. DFX面向未來設(shè)計
  14. 鴻蒙系統(tǒng)移植和裁剪定制
  15. ……

《鴻蒙開發(fā)實戰(zhàn)》鴻蒙OpenHarmony知識←前往

  1. ArkTS實踐
  2. UIAbility應(yīng)用
  3. 網(wǎng)絡(luò)案例
  4. ……

最后

鴻蒙是完全具備無與倫比的機遇和潛力的;預(yù)計到年底將有 5,000 款的應(yīng)用完成原生鴻蒙開發(fā),這么多的應(yīng)用需要開發(fā),也就意味著需要有更多的鴻蒙人才。鴻蒙開發(fā)工程師也將會迎來爆發(fā)式的增長,學習鴻蒙勢在必行!文章來源地址http://www.zghlxwxcb.cn/news/detail-855538.html

到了這里,關(guān)于鴻蒙APP開發(fā)實戰(zhàn):【Api9】拍照、拍視頻;選擇圖片、視頻、文件工具類的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔相關(guān)法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 【HarmonyOS】API9網(wǎng)絡(luò)buffer圖片加載

    ? 【引言】 HarmonyOS中加載網(wǎng)絡(luò)圖片常用的方法是直接給Image組件添加圖片的網(wǎng)絡(luò)地址,申請網(wǎng)絡(luò)權(quán)限ohos.permission.INTERNET后就可以通過url加載對應(yīng)的圖片了,如HarmonyOS官網(wǎng)中的寫法: 【問題概述】 但是日常開發(fā)中有些圖片是存儲云服務(wù)器中的,下載這些圖片需要通過鑒權(quán)接口

    2024年02月14日
    瀏覽(26)
  • 鴻蒙App開發(fā)選擇Java還是JavaScript?

    鴻蒙App開發(fā)選擇Java還是JavaScript?

    nbsp; nbsp; nbsp; nbsp;眾所周知, Java和 JavaScript是兩種編程語言,這兩種語言在不同的環(huán)境中都有許多用途。在鴻蒙nbsp; App開發(fā) 中, Java和 JavaScript是兩種常見的編程語言,它們都具有廣泛的應(yīng)用,并且都有其獨特的優(yōu)勢。下面我們將就這兩種編程語言進行比較,以幫助開發(fā)者更

    2024年02月06日
    瀏覽(22)
  • Openharmony開發(fā)記錄-從API9轉(zhuǎn)API10的痛苦之路

    由于業(yè)務(wù)需求更新的API前段時間寫的APP需要更新到API10,記錄在修改過程中發(fā)現(xiàn)的一系列問題 \\\"for .. in\\\" is not supported (arkts-no-for-in) ArkTSCheck 不支持 for .. in 規(guī)則: arkts-no-for-in 級別:錯誤 由于在ArkTS中,對象布局在編譯時是確定的、并且不能在運行時被改變,所以不支持使用

    2024年04月23日
    瀏覽(20)
  • wx.chooseMedia 這個API 選擇圖片或者視頻時無法正確返回?

    ????????選擇圖片或者視頻,console.log控制臺輸出了undefined. ? ? ? ? 取路徑的時候直接修改成 ? ? ? ??for (let i = 0; i res.tempFiles.length; i++) { ? ? ? ? ? console.log(\\\"===111===\\\"+res.tempFiles[i].tempFilePath) ? ? ? ? ? console.log(\\\"===222===\\\"+res.tempFiles[i].size) ? ? ? ? } 完整代碼如下:

    2024年02月15日
    瀏覽(20)
  • 鴻蒙開發(fā)實戰(zhàn)-手寫文心一言AI對話APP

    鴻蒙開發(fā)實戰(zhàn)-手寫文心一言AI對話APP

    (后面附有API9版本,可修改后在HarmonyOS4設(shè)備上運行) DAYU200:4.0.10.16 SDK:4.0.10.15 IDE:4.0.600 一、創(chuàng)建應(yīng)用 1.點擊File-new File-Create Progect 2.選擇模版 【OpenHarmony】Empty Ability 3.填寫項目名,WenXinTalk,應(yīng)用包名com.WenXinTalk,應(yīng)用存儲位置XXX(不要有中文,特殊字符,空格) Compile SDK

    2024年01月25日
    瀏覽(19)
  • 『牛角書』HarmonyOS鴻蒙實戰(zhàn) 開發(fā)一個簡單聊天助手APP

    『牛角書』HarmonyOS鴻蒙實戰(zhàn) 開發(fā)一個簡單聊天助手APP

    我是通過b站上面老師的講解,跟著老師編寫了一個簡單聊天助手app,簡答實用,對于剛開始接觸鴻蒙的我們來說很有幫助。 所用軟件為DevEco Studio,點擊Create HarmonyOS Project,這里選擇了第一個空的項目,點擊next會跳至下一個頁面。 這里是項目的名稱,因為是一個demo,就沒有

    2024年02月12日
    瀏覽(16)
  • HarmonyOS/OpenHarmony-ArkTS基于API9元服務(wù)開發(fā)快速入門

    HarmonyOS/OpenHarmony-ArkTS基于API9元服務(wù)開發(fā)快速入門

    一、創(chuàng)建項目 ? ? 二、創(chuàng)建卡片 ? ? 三、添加資源 ? 四、具體代碼 五、運行案例 ? ? 六、案例卡片效果 ? 七、代碼地址 (HarmonyOSAPP開發(fā)相關(guān)組件: 深圳市蛟龍騰飛網(wǎng)絡(luò)科技有限公司 - Gitee.com)

    2024年02月14日
    瀏覽(24)
  • 【粉絲福利社】鴻蒙App開發(fā)全流程實戰(zhàn)(文末送書-進行中)

    【粉絲福利社】鴻蒙App開發(fā)全流程實戰(zhàn)(文末送書-進行中)

    ?? 作者簡介,愚公搬代碼 ??《頭銜》:華為云特約編輯,華為云云享專家,華為開發(fā)者專家,華為產(chǎn)品云測專家,CSDN博客專家,CSDN商業(yè)化專家,阿里云專家博主,阿里云簽約作者,騰訊云優(yōu)秀博主,騰訊云內(nèi)容共創(chuàng)官,掘金優(yōu)秀博主,51CTO博客專家等。 ??《近期榮譽》:

    2024年03月14日
    瀏覽(23)
  • uni-app開發(fā)小程序使用uni.chooseMedia選擇圖片,安卓手機無法選擇圖片

    uni-app開發(fā)小程序使用uni.chooseMedia選擇圖片,安卓手機無法選擇圖片

    一、在小程序中,選擇圖片并上傳,是一個很常見的功能; 二、最近在開發(fā)中,使用 uni.chooseMedia 來做選擇圖片功能時,蘋果手機是正常的,安卓手機打不開?。?!代碼如下: 就這點屁代碼,蘋果手機可以正常打開選擇圖片的功能,安卓手機沒法打開?。?! !?。。?我百思

    2024年02月16日
    瀏覽(34)
  • Android相冊選擇圖片、相機拍照上傳功能實現(xiàn)(上)

    Android相冊選擇圖片、相機拍照上傳功能實現(xiàn)(上)

    先上效果圖 下面就來說一下相冊選擇圖片和相機拍照的實現(xiàn) 相冊選擇圖片很簡單,只需要通過 Intent 設(shè)置拉起就可以了 Intent 拉起相冊 /** 打開相冊 @param type 打開類型區(qū)分碼(type是我用來區(qū)分回調(diào)的) / private void openGallery(int type) { Intent gallery = new Intent(Intent.ACTION_PICK); galler

    2024年04月16日
    瀏覽(27)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包