0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

鸿蒙系统访问系统相册方法

OpenHarmony技术社区 来源:鸿蒙技术社区 作者:拓维云创易乘民 2021-08-26 17:49 次阅读

前几天有朋友问我如何通过 AVStorage 来获取鸿蒙系统相册的图片,这个操作在我们平时开发时也经常用到,今天就分享一下鸿蒙系统访问系统相册的方法。

鸿蒙的 AVStorage 对应的是 Android 中的 MediaStore,都是用于操作系统媒体数据库的类。

但是现在开放的功能不如 MediaStore 强大,很多操作需要用的字段还找不到。

这里我先通过一段安卓程序往系统相册目录中写入三张图片,并插入媒体数据库:

//将文件保存到公共的媒体文件夹//这里的filename单纯的指文件名,不包含路径@RequiresApi(Build.VERSION_CODES.Q)fun saveImage(fileName: String, bitmap: Bitmap) {

try {

//设置保存参数到ContentValues中

val contentValues = ContentValues()

//设置文件名

contentValues.put(MediaStore.Images.Media.DISPLAY_NAME, fileName)

//android Q中不再使用DATA字段,而用RELATIVE_PATH代替

//RELATIVE_PATH是相对路径不是绝对路径

//DCIM是系统文件夹,关于系统文件夹可以到系统自带的文件管理器中查看,不可以写没存在的名字

contentValues.put(MediaStore.Images.Media.RELATIVE_PATH, “DCIM/”);

//设置文件类型

contentValues.put(MediaStore.Images.Media.MIME_TYPE, “image/JPEG”)

//执行insert操作,向系统文件夹中添加文件

//EXTERNAL_CONTENT_URI代表外部存储器,该值不变

val uri = contentResolver.insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, contentValues)

if (uri != null) {

//若生成了uri,则表示该文件添加成功

//使用流将内容写入该uri中即可

val outputStream: OutputStream? = contentResolver.openOutputStream(uri)

if (outputStream != null) {

bitmap.compress(Bitmap.CompressFormat.JPEG, 90, outputStream)

outputStream.flush()

outputStream.close()

}

}

} catch (e: Exception) {

e.printStackTrace()

}

}

val bitmap = resources.getDrawable(R.mipmap.ic_launcher, null).toBitmap()

saveImage(“test”, bitmap)

这里我是放在点击事件回调中,点击三次,插入了三张同样的图片,该方法会自动给重复的图片重命名。

通过 AS 的文件管理器和系统的图库我们可以看到已经写入成功了,接下来再用系统相机拍两张照片,以创建不同来源的媒体图片,同样可在文件管理器和图库中查看结果。

这样,数据就做好了,接下来,我们通过鸿蒙提供的 API 来获取系统相册的图片并显示出来。

首先,读取系统相册需要获取 ohos.permission.READ_USER_STORAGE 权限,我们需要在 config.json 中加入如下代码:

“reqPermissions”: [{“name”: “ohos.permission.READ_USER_STORAGE”}]

并且,该权限需要动态申请,我们需要在 ability 中手动申请权限:

String[] permissions = {“ohos.permission.READ_USER_STORAGE”};

requestPermissionsFromUser(permissions, 0);

获取到权限之后,我们就可以通过 DataAbilityHelper 和 AVStorage 来查询媒体数据库了。

获取媒体外部存储中的图片 URI 需要使用的预定义字段是:AVStorage.Images.Media.EXTERNAL_DATA_ABILITY_URI:

private void showImage() {

DataAbilityHelper helper = DataAbilityHelper.creator(this);

try {

// columns为null,查询记录所有字段,当前例子表示查询id字段

ResultSet resultSet = helper.query(AVStorage.Images.Media.EXTERNAL_DATA_ABILITY_URI, new String[]{AVStorage.Images.Media.ID}, null);

while (resultSet != null && resultSet.goToNextRow()) {

PixelMap pixelMap = null;

ImageSource imageSource = null;

Image image = new Image(this);

image.setWidth(250);

image.setHeight(250);

image.setMarginsLeftAndRight(10, 10);

image.setMarginsTopAndBottom(10, 10);

image.setScaleMode(Image.ScaleMode.CLIP_CENTER);

// 获取id字段的值

int id = resultSet.getInt(resultSet.getColumnIndexForName(AVStorage.Images.Media.ID));

Uri uri = Uri.appendEncodedPathToUri(AVStorage.Images.Media.EXTERNAL_DATA_ABILITY_URI, String.valueOf(id));

FileDescriptor fd = helper.openFile(uri, “r”);

try {

imageSource = ImageSource.create(fd, null);

pixelMap = imageSource.createPixelmap(null);

} catch (Exception e) {

e.printStackTrace();

} finally {

if (imageSource != null) {

imageSource.release();

}

}

image.setPixelMap(pixelMap);

tableLayout.addComponent(image);

}

} catch (DataAbilityRemoteException | FileNotFoundException e) {

e.printStackTrace();

}

}

我们通过一个 TableLayout 来模仿图库界面展示获取到的系统相册图片:

tableLayout = (TableLayout) findComponentById(ResourceTable.Id_table);

tableLayout.setColumnCount(4);

showImage();

至此,我们就获取到了系统相册目录下的图片。责任编辑:haq

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 华为
    +关注

    关注

    215

    文章

    33608

    浏览量

    247119
  • 操作系统
    +关注

    关注

    37

    文章

    6279

    浏览量

    121867
  • 鸿蒙系统
    +关注

    关注

    183

    文章

    2608

    浏览量

    65265
  • HarmonyOS
    +关注

    关注

    79

    文章

    1806

    浏览量

    29255

原文标题:如何获取鸿蒙系统相册图片?

文章出处:【微信号:gh_834c4b3d87fe,微信公众号:OpenHarmony技术社区】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    华为前高管:鸿蒙PC系统明年见,国产操作系统仍道阻且长

    PC版系统。   华为鸿蒙or开源鸿蒙 目前还不清楚这个系统是基于开源鸿蒙还是目前华为一直在做的鸿蒙
    的头像 发表于 09-05 00:15 4112次阅读
    华为前高管:<b class='flag-5'>鸿蒙</b>PC<b class='flag-5'>系统</b>明年见,国产操作<b class='flag-5'>系统</b>仍道阻且长

    鸿蒙系统三防平板怎么样

    鸿蒙系统三防平板是一款功能强大、性能卓越的平板电脑,其独特的三防设计使其成为各种恶劣环境下的理想选择。无论是户外探险、工地作业还是军事应用,鸿蒙系统三防平板都能为用户提供稳定、可靠的性
    发表于 04-12 14:26

    纯血鸿蒙系统,拿什么与安卓、iOS比?

    鸿蒙系统的出现就是来打破这种僵局的,华为鸿蒙是以生态系统为基本而产生的独立系统。如果与Android、iOS
    发表于 02-21 21:04

    鸿蒙系统优缺点,能否作为开发者选择

    凡是都有对立面,就直接说说鸿蒙的优缺点吧。 鸿蒙的缺点: 鸿蒙是从2019年开始做出来的,那时候是套壳Android大家都知晓。从而导致大家不看鸿蒙
    发表于 02-16 21:00

    华为鸿蒙系统怎么样 华为鸿蒙系统和安卓系统的区别

    华为鸿蒙系统是华为公司自主研发的全场景分布式操作系统,于2019年8月首次发布。鸿蒙系统不同于传统的操作
    的头像 发表于 02-02 14:54 606次阅读

    如何在鸿蒙系统上安装Google Play

    随着鸿蒙(HarmonyOS)系统的逐渐普及和用户基数的增加,一些用户希望能在鸿蒙系统上使用Google Play商店以获取更多应用。然而,由于鸿蒙
    的头像 发表于 01-31 17:13 3685次阅读

    多家头部企业宣布「启动鸿蒙原生应用开发」,你看好鸿蒙系统走向「独立」吗?

    鸿蒙生态迎「关键一战」,多家头部企业宣布「启动鸿蒙原生应用开发」,你看好鸿蒙系统走向「独立」吗?
    的头像 发表于 01-24 11:47 269次阅读
    多家头部企业宣布「启动<b class='flag-5'>鸿蒙</b>原生应用开发」,你看好<b class='flag-5'>鸿蒙</b><b class='flag-5'>系统</b>走向「独立」吗?

    质疑鸿蒙系统的是什么人群?为什么要杠

    2019 年,HarmonyOS 鸿蒙操作系统正式发布。但接下来很长的时间里,鸿蒙都是在自研的基础上,内置一个 AOSP 架构。目的很简单,就是让 HarmonyOS 兼容安卓的 apk 格式应用,不用担心软件生态的问题。
    的头像 发表于 01-22 22:20 141次阅读
    质疑<b class='flag-5'>鸿蒙</b><b class='flag-5'>系统</b>的是什么人群?为什么要杠

    鸿蒙系统和安卓的区别 鸿蒙系统有什么特别之处

    鸿蒙系统是华为公司自主研发的一款全新操作系统,旨在替代安卓系统鸿蒙系统与安卓
    的头像 发表于 01-18 11:45 2848次阅读

    鸿蒙系统支持哪些手机型号

    鸿蒙系统是由华为公司自主研发的操作系统,旨在为智能手机和其他智能设备提供更好的性能和用户体验。虽然目前鸿蒙系统并未在所有手机型号上提供支持,
    的头像 发表于 01-12 17:39 7141次阅读

    鸿蒙系统和安卓的区别哪个好用

    鸿蒙系统和安卓系统是目前市场上两个比较流行的手机操作系统,它们在很多方面都有所不同。本文将从多个方面比较鸿蒙
    的头像 发表于 01-11 11:15 740次阅读

    鸿蒙原生应用/元服务开发-利用picker选择器来多选相册图片

    前言 在之前的时候,测试一个应用进入相册选择图片demo,利用了startAbilityForResult()方法,启动相对应的Ability来完成效果,但是这种方法有限制,一次只能获取一张图片,在
    发表于 12-01 17:04

    华为鸿蒙系统

    华为鸿蒙系统(HUAWEI Harmony OS),是华为公司在2019年8月9日于东莞举行的华为开发者大会(HDC.2019)上正式发布的操作系统。 华为鸿蒙
    发表于 11-02 19:39

    鸿蒙操作系统的前世今生

    01、 鸿蒙操作系统发展沿革 鸿蒙这个名字意为“万物起源”,同时也寓意国产操作系统的开端。鸿蒙操作系统
    发表于 10-08 19:55

    基于Java Web电子相册

    基于Java web的电子相册系统
    发表于 06-26 15:25 0次下载