2021-11-25 11:32:37
0
使用js显示本地卡片一般步骤:
1、获取本地图片路径
- // 获取相册的图片与视频
- private void getImage(){
- HiLog.info(TAG,"打开相册");
- Intent intent = new Intent();
- Operation opt=new Intent.OperationBuilder().withAction("android.intent.action.GET_CONTENT").build();
- intent.setOperation(opt);
- intent.addFlags(Intent.FLAG_NOT_OHOS_COMPONENT);
- intent.setType("image/*");
- intent.setBundle("com.huawei.photos");
- startAbilityForResult(intent, imgRequestCode);
- }
- // 图片选取回调
- @Override
- protected void onAbilityResult(int requestCode, int resultCode, Intent resultData) {
- if(requestCode==imgRequestCode) {
- HiLog.info(TAG, "选择图片getUriString:" + resultData.getUriString());
- //选择的Img对应的Uri
- String chooseImgUri = resultData.getUriString();
- //获取选择的Img对应的Id
- String chooseImgId=null;
- //如果是选择文件则getUriString结果为content://com.android.providers.media.documents/document/image%3A30,其中%3A是":"的URL编码结果,后面的数字就是image对应的Id
- //如果选择的是图库则getUriString结果为content://media/external/images/media/30,最后就是image对应的Id
- //这里需要判断是选择了文件还是图库
- if(chooseImgUri.lastIndexOf("%3A")!=-1){
- chooseImgId = chooseImgUri.substring(chooseImgUri.lastIndexOf("%3A")+3);
- }
- else {
- chooseImgId = chooseImgUri.substring(chooseImgUri.lastIndexOf('/')+1);
- }
- //获取图片对应的uri,由于获取到的前缀是content,我们替换成对应的dataability前缀
- Uri uri=Uri.appendEncodedPathToUri(AVStorage.Images.Media.EXTERNAL_DATA_ABILITY_URI,chooseImgId);
- HiLog.info(TAG,"图片uri"+uri);
- setImaData(uri,chooseImgId);
- }
- }
复制代码
2、将本地图片转换成byte[]数据
- //定义数据能力帮助对象
- DataAbilityHelper helper = DataAbilityHelper.creator(getContext());
- FileInputStream inputStream = null;
- try {
- inputStream = new FileInputStream(helper.openFile(uri, "r"));
- } catch (DataAbilityRemoteException|FileNotFoundException e) {
- e.printStackTrace();
- }
- //readInputStream将inputStream转换成byte[]
- byte[] bytes = readInputStream(inputStream);
复制代码- private byte[] readInputStream(InputStream inputStream) {
- ByteArrayOutputStream baos = new ByteArrayOutputStream();
- byte[] buffer = new byte[1024];
- int length = -1;
- try {
- while ((length = inputStream.read(buffer)) != -1) {
- baos.write(buffer, 0, length);
- }
- baos.flush();
- } catch (IOException e) {
- e.printStackTrace();
- }
- byte[] data = baos.toByteArray();
- try {
- inputStream.close();
- baos.close();
- } catch (IOException e) {
- e.printStackTrace();
- }
- return data;
- }
复制代码
3、卡片显示图片
- ZSONObject result = new ZSONObject();
- if (bytes != null && bytes.length != 0) {
- String picName = new Date().getTime() + ".png";
- String picPath = "memory://" + picName;
- result.put("avatarIma", picPath);
- formBindingData.addImageData(picName, bytes);
- }
- try {
- if (this instanceof Ability) {
- for (CardDataTable formtable : getFormId()) { //获取卡片formID
- updateForm(formtable.getFormId(), formBindingData);
- }
- }
- } catch (FormException e) {
- HiLog.error(TAG, e.getMessage());
- }
- FormBindingData formBindingData = new FormBindingData(result);
复制代码
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容图片侵权或者其他问题,请联系本站作侵删。
侵权投诉