【ARK UI】HarmonyOS 从相册选择图片并显示到Image组件上
参考资料
【Harmony OS】【ARK UI】ETS 上下文基本操作
【Harmony OS】【ARK UI】ets使用startAbility或startAbilityForResult方式调起Ability
代码运行
权限申请
申请文件读取权限,在config.json写如下代码
"reqPermissions": [
{
"name": "ohos.permission.READ_USER_STORAGE"
},
{
"name": "ohos.permission.WRITE_USER_STORAGE"
}
],

在ets文件动态申请读写权限
requestMyPermissionsFromUser(){
var context = featureAbility.getContext();
context.requestPermissionsFromUser(
[
"ohos.permission.READ_USER_STORAGE",
"ohos.permission.WRITE_USER_STORAGE"
],
1,(err, data)=>{
console.info("====>requestdata====>" + JSON.stringify(data));
console.info("====>requesterrcode====>" + JSON.stringify(err.code));
}
)
}

跳转相册
在Ets文件写一个跳转按钮跳转到相册,选择相片,返回data的 decodedPath路径就是dataability显示的路径,跳转代码如下
startAlbumAbility(){
var str = {
"want": {
"deviceId": "",
"bundleName": "",
"abilityName": "",
"uri": "",
"action": "android.intent.action.GET_CONTENT",//todo 跳转相册的action
"type":"image/*" //todo 文件类型
},
};
//todo 开始跳转到相册界面
featureAbility.startAbilityForResult(str, (error, data) => {
if (error) {
console.error('Operation failed. Cause: ' + error);
return;
}
if(data.resultCode==-1){//todo 返回到该界面并且得到了结果
console.info('Operation succeeded: '+JSON.stringify(data) );
this.IsLocalFlag=false//todo 设置不是本地路径
this.src="dataability://"+data.want.uri.decodedPath//todo dataability 显示方式
}else{//todo 返回到该界面没有选择相片
console.info('Operation fail: ' );
}
});
}

界面显示
定义一个boolean字段判断是否是本地字段,如果是显示本地图片,如果不是显示从相册中选择的图片,
Image的dataability的使用 支持dataability://路径前缀的字符串,用于访问通过data ability提供的图片路径。
Image(this.IsLocalFlag?$r('app.media.icon'):this.src).width(300).height(300)

全部代码
import featureAbility from '@ohos.ability.featureAbility'
@Entry
@Component
struct Index {
@State IsLocalFlag:boolean=true;
@State src: string = ""
//todo 动态申请文档读写权限
requestMyPermissionsFromUser(){
var context = featureAbility.getContext();
context.requestPermissionsFromUser(
[
"ohos.permission.READ_USER_STORAGE",
"ohos.permission.WRITE_USER_STORAGE"
],
1,(err, data)=>{
console.info("====>requestdata====>" + JSON.stringify(data));
console.info("====>requesterrcode====>" + JSON.stringify(err.code));
}
)
}
startAlbumAbility(){
var str = {
"want": {
"deviceId": "",
"bundleName": "",
"abilityName": "",
"uri": "",
"action": "android.intent.action.GET_CONTENT",//todo 跳转相册的action
"type":"image/*" //todo 文件类型
},
};
//todo 开始跳转到相册界面
featureAbility.startAbilityForResult(str, (error, data) => {
if (error) {
console.error('Operation failed. Cause: ' + error);
return;
}
if(data.resultCode==-1){//todo 返回到该界面并且得到了结果
console.info('Operation succeeded: '+JSON.stringify(data) );
this.IsLocalFlag=false//todo 设置不是本地路径
this.src="dataability://"+data.want.uri.decodedPath
}else{//todo 返回到该界面没有选择相片
console.info('Operation fail: ' );
}
});
}
build() {
Row() {
Column() {
Text("申请权限")
.fontSize(50)
.width(100+"%")
.height("100")
.textAlign(TextAlign.Center)
.fontWeight(FontWeight.Bold)
.onClick(this.requestMyPermissionsFromUser.bind(this))
Text("打开相册")
.fontSize(50)
.width(100+"%")
.height("100")
.textAlign(TextAlign.Center)
.fontWeight(FontWeight.Bold)
.onClick(this.startAlbumAbility.bind(this))
.backgroundColor("#ED6262")
Image(this.IsLocalFlag?$r('app.media.icon'):this.src).width(300).height(300)
}
.width('100%')
}
.height('100%')
}
}

运行效果
欲了解更多更全技术文章,欢迎访问https://developer.huawei.com/consumer/cn/forum/?ha_source=zzh
【ARK UI】HarmonyOS 从相册选择图片并显示到Image组件上的更多相关文章
- IOS研究院之打开照相机与本地相册选择图片(六)
原创文章如需转载请注明:转载自雨松MOMO程序研究院本文链接地址:IOS研究院之打开照相机与本地相册选择图片(六) Hello 大家好 IOS的文章好久都木有更新了,今天更新一篇哈. 这篇文章主要学习 ...
- [Android实例教程] 教你如何拍照+相册选择图片+剪裁图片完整实现
[Android实例教程] 教你如何拍照+相册选择图片+剪裁图片完整实现 今天做Android项目的时候要用到图片选择,要实现拍照获取图片和从相册获取图片,并且要求在获取完之后可以裁剪,试了很多方法之 ...
- HTML5 Plus 拍照或者相册选择图片上传
HBuilder+HTML5 Plus+MUI实现拍照或者相册选择图片上传,利用HTML5 Plus的Camera.Gallery.IO.Storage和Uploader来实现手机APP拍照或者从相册 ...
- 微信小程序:从本地相册选择图片或使用相机拍照。
wx.chooseImage(OBJECT) 从本地相册选择图片或使用相机拍照. OBJECT参数说明: 示例代码: wx.chooseImage({ count: 1, // 默认9 sizeTyp ...
- File控件选择图片的时候在Html5下马上预览
页面HTML <div> <img src="@pic.Path" id="img" style="width:200px;heig ...
- ng-cordova 手机拍照或从相册选择图片
1.需求描述 实现一个调用摄像头拍照,或者直接打开本地图库选择照片,然后替换App中图片的功能 2.准备 1) 安装ng-cordova 进入到ionic工程目录,使用bower工具安装, bower ...
- IOS研究院之打开照相机与本地相册选择图片
如下图所示 在本地相册中选择一张图片后,我们将他拷贝至沙盒当中,在客户端中将它的缩略图放在按钮旁边,这个结构其实和新浪微薄中选择图片后的效果一样.最终点击发送将按钮将图片2进制图片上传服务器. 下面我 ...
- Ionic3学习笔记(十二)拍照上传图片以及从相册选择图片上传
本文为原创文章,转载请标明出处 目录 安装插件 导入 app.module.ts 创建 provider 更多 效果图 1. 安装插件 终端运行: ionic cordova plugin add c ...
- android 开启本地相册选择图片并返回显示
.java package com.jerry.crop; import java.io.File; import android.app.Activity; import android.conte ...
随机推荐
- OAuth2学习中的一些高频问题的QA
关于OAuth2相信很多初学者都有一些疑问,胖哥将这些疑问一一收集了起来做成了QA,或许能帮助学习者. OAuth2相关的QA Q:OAuth2 的一些常用场景? A: OAuth2主要用于API授权 ...
- vue内容拖拽放大缩小
<!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 数字化转型之数字资产知识库(springboot+es+vue+neo4j)
前言 在数字化高度普及的时代,企事业机关单位在日常工作中会产生大量的文档,例如医院制度汇编,企业知识共享库等.针对这些文档性的东西,手工纸质化去管理是非常消耗工作量的,并且纸质化查阅难,易损耗,所以电 ...
- 高性能 Jsonpath 框架,Snack3 3.2.29 发布
Snack3,一个高性能的 JsonPath 框架 借鉴了 Javascript 所有变量由 var 申明,及 Xml dom 一切都是 Node 的设计.其下一切数据都以ONode表示,ONode也 ...
- 【题解】Educational Codeforces Round 82
比较菜只有 A ~ E A.Erasing Zeroes 题目描述: 原题面 题目分析: 使得所有的 \(1\) 连续也就是所有的 \(1\) 中间的 \(0\) 全部去掉,也就是可以理解为第一个 \ ...
- SuperSocket 1.6 创建一个简易的报文长度在头部的Socket服务器
我们来做一个头为6位报文总长度,并且长度不包含长度域自身的例子.比如这样的Socket报文000006123456. 添加SuperSocket.Engine,直接使用Nuget搜索SuperSock ...
- 跨模态语义关联对齐检索-图像文本匹配(Image-Text Matching)
论文介绍:Negative-Aware Attention Framework for Image-Text Matching (基于负感知注意力的图文匹配,CVPR2022) 代码主页:https: ...
- Pytorch分布式训练
用单机单卡训练模型的时代已经过去,单机多卡已经成为主流配置.如何最大化发挥多卡的作用呢?本文介绍Pytorch中的DistributedDataParallel方法. 1. DataParallel ...
- Linux(Centos7) 实例搭建 FTP 服务
本文以 CentOS 7.2 64位系统为例,使用 vsftpd 作为 FTP 服务端,FileZilla 作为客户端.指导您如何在 Linux 云服务器上搭建 FTP 服务. 操作步骤 安装 vsf ...
- 毫秒值的概念和作用与Date类的构造方法和成员方法
日期时间类 Date类 java.Util.Date:表示日期和实践类 类Date表示特定的瞬间,精确到毫秒 毫秒:千分之疫苗 1000毫秒 =1秒 特定的瞬间:一个时间点,一刹那使劲啊 2088-0 ...