[文章]HarmonyOS原子化服务开发实战-Js更新显示本地图片

阅读量0
1
3
使用js显示本地卡片一般步骤:
1、获取本地图片路径
  1. // 获取相册的图片与视频
  2. private void getImage(){
  3.     HiLog.info(TAG,"打开相册");
  4.     Intent intent = new Intent();
  5.     Operation opt=new Intent.OperationBuilder().withAction("android.intent.action.GET_CONTENT").build();
  6.     intent.setOperation(opt);
  7.     intent.addFlags(Intent.FLAG_NOT_OHOS_COMPONENT);
  8.     intent.setType("image/*");
  9.     intent.setBundle("com.huawei.photos");
  10.     startAbilityForResult(intent, imgRequestCode);
  11. }


  12. // 图片选取回调
  13. @Override
  14. protected void onAbilityResult(int requestCode, int resultCode, Intent resultData) {
  15.     if(requestCode==imgRequestCode) {
  16.         HiLog.info(TAG, "选择图片getUriString:" + resultData.getUriString());
  17.         //选择的Img对应的Uri
  18.         String chooseImgUri = resultData.getUriString();

  19.         //获取选择的Img对应的Id
  20.         String chooseImgId=null;
  21.         //如果是选择文件则getUriString结果为content://com.android.providers.media.documents/document/image%3A30,其中%3A是":"的URL编码结果,后面的数字就是image对应的Id
  22.         //如果选择的是图库则getUriString结果为content://media/external/images/media/30,最后就是image对应的Id
  23.         //这里需要判断是选择了文件还是图库
  24.         if(chooseImgUri.lastIndexOf("%3A")!=-1){
  25.             chooseImgId = chooseImgUri.substring(chooseImgUri.lastIndexOf("%3A")+3);
  26.         }
  27.         else {
  28.             chooseImgId = chooseImgUri.substring(chooseImgUri.lastIndexOf('/')+1);
  29.         }
  30.         //获取图片对应的uri,由于获取到的前缀是content,我们替换成对应的dataability前缀
  31.         Uri uri=Uri.appendEncodedPathToUri(AVStorage.Images.Media.EXTERNAL_DATA_ABILITY_URI,chooseImgId);
  32.         HiLog.info(TAG,"图片uri"+uri);
  33.         setImaData(uri,chooseImgId);
  34.     }
  35. }
复制代码

2、将本地图片转换成byte[]数据
  1. //定义数据能力帮助对象
  2. DataAbilityHelper helper = DataAbilityHelper.creator(getContext());

  3. FileInputStream inputStream = null;

  4. try {
  5.     inputStream = new FileInputStream(helper.openFile(uri, "r"));
  6. } catch (DataAbilityRemoteException|FileNotFoundException e) {
  7.     e.printStackTrace();
  8. }
  9. //readInputStream将inputStream转换成byte[]
  10. byte[] bytes = readInputStream(inputStream);
复制代码
  1. private byte[] readInputStream(InputStream inputStream) {

  2.     ByteArrayOutputStream baos = new ByteArrayOutputStream();

  3.     byte[] buffer = new byte[1024];

  4.     int length = -1;

  5.     try {
  6.         while ((length = inputStream.read(buffer)) != -1) {
  7.             baos.write(buffer, 0, length);
  8.         }
  9.         baos.flush();
  10.     } catch (IOException e) {
  11.         e.printStackTrace();
  12.     }

  13.     byte[] data = baos.toByteArray();

  14.     try {
  15.         inputStream.close();
  16.         baos.close();
  17.     } catch (IOException e) {
  18.         e.printStackTrace();
  19.     }

  20.     return data;
  21. }
复制代码

3、卡片显示图片
  1. ZSONObject result = new ZSONObject();
  2. if (bytes != null && bytes.length != 0) {

  3.     String picName = new Date().getTime() + ".png";

  4.     String picPath = "memory://" + picName;

  5.     result.put("avatarIma", picPath);
  6.     formBindingData.addImageData(picName, bytes);

  7. }

  8. try {
  9.     if (this instanceof Ability) {
  10.         for (CardDataTable formtable : getFormId()) { //获取卡片formID
  11.             updateForm(formtable.getFormId(), formBindingData);
  12.         }
  13.     }
  14. } catch (FormException e) {
  15.     HiLog.error(TAG, e.getMessage());
  16. }
  17. FormBindingData formBindingData = new FormBindingData(result);
复制代码

回帖

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容图片侵权或者其他问题,请联系本站作侵删。 侵权投诉
链接复制成功,分享给好友