【ARK UI】HarmonyOS 从相册选择图片并显示到Image组件上
2024-08-31 17:08:13
参考资料
【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
最新文章
- 让超出父视图范围的子视图响应事件,在UIView范围外响应点击
- pandas处理数据
- 荣品RP4412开发板烧写Ubuntu系统应注意SD卡内存大些
- [JSP]用户注册
- Codeforces Round #359(div 2)
- [USACO2005][POJ2226]Muddy Fields(二分图最小点覆盖)
- Swift实战-豆瓣电台(七)显示动画
- java_annotation_01
- 虚拟机配置Openstack常见问题汇总
- python语法_模块_time_datetime_random
- C语言数据类型的转换(隐式转换)
- 单页应用 WebApp SPA 骨架 框架 路由 页面切换 转场
- Scrapy学习篇(三)之创建项目和Scrapy的安装
- mysql-1045(28000)错误
- MySQL 两个数据库表中合并数据
- APScheduler API -- apscheduler.schedulers.base
- python使用md5处理下载图片
- 用 Open Live Writer 来写 cnblog.com 博客
- Sharepoint 2010 TimerJob重复
- [POJ2954&;POJ1265]皮克定理的应用两例