H5调用相机、相册使用哪个原生接口?

web组件选择文件使用 H5标签<input type="file" value="file">和原生onShowFileSelector接口实现。H5调用相机、相册使用哪个原生接口实现,有没有实现的demo。

HarmonyOS
2024-11-05 12:13:26
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
FengTianYa

​可以参考以下demo:

以下是调用相册:

ets:​

@Entry 
@Component 
struct WebComponent { 
  controller: web_webview.WebviewController = new web_webview.WebviewController() 
  //定义一个全局的string类型的数组,用来存放通过picker拉起后选择完图片后图片的uri 
  @State uris: Array<string> = [] 
  aboutToAppear() { 
    web_webview.WebviewController.setWebDebuggingAccess(true); 
  } 
  build() { 
    Column() { 
      //用来展示选择的图片 
      Image(this.uris[1]).width(100).height(100) 
      Web({ src: $rawfile('TestonShowFileSelector.html'), controller: this.controller }) 
        .javaScriptAccess(true) 
        .domStorageAccess(true) 
        .onShowFileSelector((event) => { 
          //-------调用相册------------------------- 
          console.log('MyFileUploader onShowFileSelector invoked') 
          const photoSelectOptions = new picker.PhotoSelectOptions(); 
          // 过滤选择媒体文件类型为IMAGE_VIDEO_TYPE 
          photoSelectOptions.MIMEType = picker.PhotoViewMIMETypes.IMAGE_VIDEO_TYPE; 
          // 选择媒体文件的最大数目 
          photoSelectOptions.maxSelectNumber = 2; 
          //let uris: Array<string> = []; 
          const photoViewPicker = new picker.PhotoViewPicker(); 
          photoViewPicker.select(photoSelectOptions).then((photoSelectResult: picker.PhotoSelectResult) => { 
            this.uris = photoSelectResult.photoUris; 
            console.info('photoViewPicker.select to file succeed and uris are:' + this.uris); 
          }).catch((err: BusinessError) => { 
            console.error(`Invoke photoViewPicker.select failed, code is ${err.code}, message is ${err.message}`); 
          }) 
          return false} 
    } 
  } 
}

​调相机

ets:​

@Entry 
@Component 
struct WebComponent { 
  controller: web_webview.WebviewController = new web_webview.WebviewController() 
  //定义一个全局的string类型的数组,用来存放通过picker拉起后选择完图片后图片的uri 
  @State uris: Array<string> = [] 
  aboutToAppear() { 
    web_webview.WebviewController.setWebDebuggingAccess(true); 
  } 
  build() { 
    Column() { 
      Button("get uri").onClick(()=>{ 
        console.log("testTag - " + this.uris[0]) 
      }) 
      //用来展示选择的图片 
      Image(this.uris[1]).width(100).height(100) 
      Web({ src: $rawfile('TestonShowFileSelector.html'), controller: this.controller }) 
        .javaScriptAccess(true) 
        .domStorageAccess(true) 
        .onShowFileSelector((event) => { 
          const context = getContext(this) as common.UIAbilityContext 
          context.startAbilityForResult({ 
            action:"ohos.want.action.imageCapture", 
            parameters:{ 
              callBundleName:"com.example.imageshow" 
            } 
          }).then((res)=>{ 
            let str:string = res.want?.parameters!["resourceUri"] as string 
            let fd = fs.openSync(str).fd 
            let arr:ArrayBuffer = new ArrayBuffer(128) 
            fs.readSync(fd,arr) 
            console.log("testTag - " + str); 
            this.uris[0] = str 
          }) 
          return false 
        }) 
 
    } 
  } 
}

h5侧通用:

<!DOCTYPE html> 
  <html> 
  <head> 
  <meta name="viewport" content="width=device-width, initial-scale=1.0" charset="utf-8"> 
  <script> 
  window.onload = function() { 
  // 获取文件输入元素 
  var fileInput = document.getElementById('upload'); 
 
  // 监听文件输入的改变事件 
  fileInput.addEventListener('change', function(e) { 
    // 获取选中的文件 
    var file = e.target.files[0]; 
    // 创建一个FileReader对象 
    var reader = new FileReader(); 
 
    // 定义文件读取完成后的回调函数 
    reader.onloadend = function() { 
      // 获取图片元素 
      var img = document.getElementById('preview'); 
      // 将读取到的结果赋值给图片元素的src属性 
      img.src = reader.result; 
    } 
 
    // 读取文件内容 
    if (file) { 
      reader.readAsDataURL(file); 
    } 
  }); 
} 
  </script> 
  </head> 
  <body> 
  <form id="upload-form" enctype="multipart/form-data"> 
  <!-- 修改type属性为camera --> 
  <input type="file" id="upload" name="upload" accept="image/jpeg" capture="camera"/> 
  <!-- 添加一个图片元素用于展示图片 --> 
  <img id="preview" /> 
  </form> 
  </body> 
  </html>
分享
微博
QQ
微信
回复
2024-11-05 17:39:22
相关问题
HarmonyOS H5如何访问相册
281浏览 • 1回复 待解决
H5原生调JSbrige的demo示例
205浏览 • 1回复 待解决
HarmonyOS web原生H5如何交互?
528浏览 • 1回复 待解决
HarmonyOS h5原生交互、页面状态机
44浏览 • 1回复 待解决
HarmonyOS 原生怎么主动触发消息给h5
48浏览 • 1回复 待解决
HarmonyOS H5拉起系统相机的样例代码
259浏览 • 1回复 待解决
HarmonyOS web组件加载h5h5拉起摄像头
589浏览 • 1回复 待解决
HarmonyOS H5的JS端调用应用端的新问题
482浏览 • 0回复 待解决
HarmonyOS webview h5的localstorage
417浏览 • 1回复 待解决