##DevEco Studio##如何让模拟器里有图片?【图片下载法】

 API9和API12在模拟器上,有一个巨大的区别,那就是API9(开发工具3的版本),他的模拟器里有一个拍照功能(再往前的版本里甚至还有浏览器,可以通过浏览器下载图片),可以通过拍照功能让相册里有图片,从而测试图片相关的功能。在API12的模拟器中,虽然有图库,但是没有拍照,也没有浏览器……看起来似乎没有办法在模拟器里测试图片的相关功能。

不过大部分用做原生鸿蒙系统项目的学生并不具备有真机调试的能力……所以这个问题还是要想办法解决

前面的文章我分享了一个【文件拖入法】,这个方法虽然简单,但是问题就是在于“图片”属于“文件”,而不是在图库中,没办法进行与图片相关的一些操作。

那么在平时的开发过程中,有一次我开发的项目需要将图片下载到本地,通过文档,我了解到了“安全控件”中的“保存控件“,简单来说,就是可以超级方便的将图片进行保存,相比于传统的方案,代码中不需要考虑授权,不需要考虑选择文件的相关操作。经过测试,完全可以通过这个"保存控件",将图片下载到模拟器的图库中用于后续的操作!

0900086000300134184.20201216095126.86523331460016843504112994983392.png0900086000300134184.20201216095126.86523331460016843504112994983392.png

那么具体的实现方案如下:

1. 去创建一个新的项目,随便起个名字

2. 把你想用来测试的图片,放到本地resources/base/media文件夹下

3. 加入“保存控件”,代码如下:

SaveButton()
          .padding({top: 12, bottom: 12, left: 24, right: 24})
          .onClick(async (event: ClickEvent, result: SaveButtonOnClickResult) => {
            if (result === SaveButtonOnClickResult.SUCCESS) {
              const context: common.UIAbilityContext = getContext(this) as common.UIAbilityContext;
              // 免去权限申请和权限请求等环节,获得临时授权,保存对应图片。
              savePhotoToGallery(context);
            } else {
              promptAction.showToast({ message: '设置权限失败!' })
            }
          })



async function savePhotoToGallery(context: common.UIAbilityContext) {
  let helper = photoAccessHelper.getPhotoAccessHelper(context);
  try {
    // onClick触发后10秒内通过createAsset接口创建图片文件,10秒后createAsset权限收回。
    let uri = await helper.createAsset(photoAccessHelper.PhotoType.IMAGE, 'jpg');
    // 使用uri打开文件,可以持续写入内容,写入过程不受时间限制。
    let file = await fileIo.open(uri, fileIo.OpenMode.READ_WRITE | fileIo.OpenMode.CREATE);
    // $r('app.media.startIcon')需要替换为开发者所需的图像资源文件。
    context.resourceManager.getMediaContent($r('app.media.startIcon').id, 0)
      .then(async value => {
        let media = value.buffer;
        // 写到媒体库文件中。
        await fileIo.write(file.fd, media);
        await fileIo.close(file.fd);
        promptAction.showToast({ message: '已保存至相册!' });
      });
  }
  catch (error) {
    const err: BusinessError = error as BusinessError;
    console.error(`Failed to save photo. Code is ${err.code}, message is ${err.message}`);
  }
}

​4. 启动模拟器并运行项目,点击按钮下载即可

5. 再运行你自己的项目,去选择图片即可

这时候就能看到刚才的图片了

0900086000300134184.20201216095126.86523331460016843504112994983392.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

计算机毕设源码站

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值