react-native源码中给android程序员福利!!

来源:互联网 发布:tensorflow读音 编辑:程序博客网 时间:2024/06/05 16:22

前言:最近在搞react-native,搞过rn的都知道,rn-android其实也就是用js代码去调原生代码的,所以作为一名android程序员是吧,总得看看facebook那些大神写的那些源代码,果然很高端!!!!!

是这样子的,因为我们app原生的在做,rn也在做,app有一个保存app中的图片到本地相册的一个功能,在rn中,很方便啊,直接用rn组件CameraRoll就ok了,但是原生app中网上查了很多资料,保存还是有点问题啊,于是想看一下rn对应的android底层是咋实现的,看了一下,真的是大神写的代码啊,短短几行代码就完美的实现的我的需求!!!!嘿嘿,

我们看到这么一个目录:
这里写图片描述

我们打开代码瞧一瞧:

File source = new File(mUri.getPath());      FileChannel input = null, output = null;      try {        File exportDir = (mType == MediaType.PHOTO)          ? Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES)          : Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_MOVIES);        exportDir.mkdirs();        if (!exportDir.isDirectory()) {          mPromise.reject(ERROR_UNABLE_TO_LOAD, "External media storage directory not available");          return;        }        File dest = new File(exportDir, source.getName());        int n = 0;        String fullSourceName = source.getName();        String sourceName, sourceExt;        if (fullSourceName.indexOf('.') >= 0) {          sourceName = fullSourceName.substring(0, fullSourceName.lastIndexOf('.'));          sourceExt = fullSourceName.substring(fullSourceName.lastIndexOf('.'));        } else {          sourceName = fullSourceName;          sourceExt = "";        }        while (!dest.createNewFile()) {          dest = new File(exportDir, sourceName + "_" + (n++) + sourceExt);        }        input = new FileInputStream(source).getChannel();        output = new FileOutputStream(dest).getChannel();        output.transferFrom(input, 0, input.size());        input.close();        output.close();        MediaScannerConnection.scanFile(            mContext,            new String[]{dest.getAbsolutePath()},            null,            new MediaScannerConnection.OnScanCompletedListener() {              @Override              public void onScanCompleted(String path, Uri uri) {                if (uri != null) {                  mPromise.resolve(uri.toString());                } else {                  mPromise.reject(ERROR_UNABLE_TO_SAVE, "Could not add image to gallery");                }              }            });      } catch (IOException e) {        mPromise.reject(e);      } finally {        if (input != null && input.isOpen()) {          try {            input.close();          } catch (IOException e) {            FLog.e(ReactConstants.TAG, "Could not close input channel", e);          }        }        if (output != null && output.isOpen()) {          try {            output.close();          } catch (IOException e) {            FLog.e(ReactConstants.TAG, "Could not close output channel", e);          }        }      }    }

搞android的盆友应该都看得懂,拿到图片path,然后保存到相册,然后更新相册内容,全部代码没有一点累赘啊,很爽,

当然,里面封装了肯定不止这么一个东西,我们接着往下看:
这里写图片描述

还有一下运行时权限的工具类啊,自定义的imageview(支持网络加载,圆角,圆形)….. 一些小伙伴整天都说什么“你项目中用的是啥框架啊,可不可以给我参考一下啊,好吧!我想说,去研究下rn吧,facebook大神写的框架!!!!!哈哈哈~~~“

1 0
原创粉丝点击