Commit 09ab3aea authored by 少言's avatar 少言

v0.3.6

parent b1f06c98
...@@ -135,17 +135,47 @@ android { ...@@ -135,17 +135,47 @@ android {
### Android ### Android
1. Open up `android/app/src/main/java/[...]/MainApplication.java` 1. Open up `android/app/src/main/java/[...]/MainApplication.java`
- Add `import com.reactlibrary.RNSyanImagePickerPackage;` to the imports at the top of the file - Add `import com.reactlibrary.RNSyanImagePickerPackage;` to the imports at the top of the file
- Add `new RNSyanImagePickerPackage()` to the list returned by the `getPackages()` method - Add `new RNSyanImagePickerPackage()` to the list returned by the `getPackages()` method
2. Append the following lines to `android/settings.gradle`: 2. Append the following lines to `android/settings.gradle`:
```gradle ```gradle
include ':react-native-syan-image-picker' include ':react-native-syan-image-picker'
project(':react-native-syan-image-picker').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-syan-image-picker/android') project(':react-native-syan-image-picker').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-syan-image-picker/android')
``` ```
3. Insert the following lines inside the dependencies block in `android/app/build.gradle`: 3. Insert the following lines inside the dependencies block in `android/app/build.gradle`:
```gradle ```gradle
compile project(':react-native-syan-image-picker') compile project(':react-native-syan-image-picker')
``` ```
4. 拍照前动态获取权限
```js
requestPermission = async () => {
try {
const granted = await PermissionsAndroid.request(
PermissionsAndroid.PERMISSIONS.WRITE_EXTERNAL_STORAGE,
{
title: '申请读写手机存储权限',
message:
'一个很牛逼的应用想借用你的摄像头,' +
'然后你就可以拍出酷炫的皂片啦。',
buttonNeutral: '等会再问我',
buttonNegative: '不行',
buttonPositive: '好吧',
},
);
if (granted === PermissionsAndroid.RESULTS.GRANTED) {
console.log('现在你获得摄像头权限了');
} else {
console.log('用户并不给你');
}
} catch (err) {
console.warn(err);
}
};
```
## 运行示例 ## 运行示例
...@@ -167,7 +197,8 @@ showCropCircle | bool | 是 | false | 是否显示圆形裁剪区 ...@@ -167,7 +197,8 @@ showCropCircle | bool | 是 | false | 是否显示圆形裁剪区
circleCropRadius | float | 是 | screenW * 0.5 | 圆形裁剪半径,默认屏幕宽度一半 circleCropRadius | float | 是 | screenW * 0.5 | 圆形裁剪半径,默认屏幕宽度一半
showCropFrame | bool | 是 | true | 是否显示裁剪区域 showCropFrame | bool | 是 | true | 是否显示裁剪区域
showCropGrid | bool | 是 | false | 是否隐藏裁剪区域网格 showCropGrid | bool | 是 | false | 是否隐藏裁剪区域网格
quality | int | 是 | 90 | 压缩质量 quality | int | 是 | 90 | 压缩质量(安卓无效,固定鲁班压缩)
minimumCompressSize | int | 是 | 100 | 小于100kb的图片不压缩(Android)
enableBase64 | bool | 是 | false | 是否返回base64编码,默认不返回 enableBase64 | bool | 是 | false | 是否返回base64编码,默认不返回
## 返回结果说明 ## 返回结果说明
......
...@@ -217,10 +217,6 @@ public class RNSyanImagePickerModule extends ReactContextBaseJavaModule { ...@@ -217,10 +217,6 @@ public class RNSyanImagePickerModule extends ReactContextBaseJavaModule {
.showCropFrame(showCropFrame)// 是否显示裁剪矩形边框 圆形裁剪时建议设为false true or false .showCropFrame(showCropFrame)// 是否显示裁剪矩形边框 圆形裁剪时建议设为false true or false
.showCropGrid(showCropGrid)// 是否显示裁剪矩形网格 圆形裁剪时建议设为false true or false .showCropGrid(showCropGrid)// 是否显示裁剪矩形网格 圆形裁剪时建议设为false true or false
.openClickSound(false)// 是否开启点击声音 true or false .openClickSound(false)// 是否开启点击声音 true or false
.videoQuality(1)// 视频录制质量 0 or 1 int
.videoMaxSecond(15)// 显示多少秒以内的视频or音频也可适用 int
.videoMinSecond(10)// 显示多少秒以内的视频or音频也可适用 int
.recordVideoSecond(60)//视频秒数录制 默认60s int
.cropCompressQuality(quality)// 裁剪压缩质量 默认90 int .cropCompressQuality(quality)// 裁剪压缩质量 默认90 int
.minimumCompressSize(minimumCompressSize)// 小于100kb的图片不压缩 .minimumCompressSize(minimumCompressSize)// 小于100kb的图片不压缩
.synOrAsy(true)//同步true或异步false 压缩 默认同步 .synOrAsy(true)//同步true或异步false 压缩 默认同步
...@@ -285,23 +281,28 @@ public class RNSyanImagePickerModule extends ReactContextBaseJavaModule { ...@@ -285,23 +281,28 @@ public class RNSyanImagePickerModule extends ReactContextBaseJavaModule {
private final ActivityEventListener mActivityEventListener = new BaseActivityEventListener() { private final ActivityEventListener mActivityEventListener = new BaseActivityEventListener() {
@Override @Override
public void onActivityResult(Activity activity, int requestCode, int resultCode, final Intent data) { public void onActivityResult(Activity activity, int requestCode, int resultCode, final Intent data) {
if (requestCode == PictureConfig.CHOOSE_REQUEST) { if (resultCode == -1) {
new Thread(new Runnable() { if (requestCode == PictureConfig.CHOOSE_REQUEST) {
@Override new Thread(new Runnable() {
public void run() { @Override
onGetResult(data); public void run() {
} onGetResult(data);
}).run(); }
} else if (requestCode == PictureConfig.REQUEST_CAMERA) { }).run();
onGetVideoResult(data); } else if (requestCode == PictureConfig.REQUEST_CAMERA) {
onGetVideoResult(data);
}
} else {
invokeError(resultCode);
} }
} }
}; };
private void onGetVideoResult(Intent data) { private void onGetVideoResult(Intent data) {
List<LocalMedia> mVideoSelectList = PictureSelector.obtainMultipleResult(data); List<LocalMedia> mVideoSelectList = PictureSelector.obtainMultipleResult(data);
boolean isRecordSelectedV = cameraOptions.getBoolean("isRecordSelected"); boolean isRecordSelected = cameraOptions.getBoolean("isRecordSelected");
if (!mVideoSelectList.isEmpty() && isRecordSelectedV) { if (!mVideoSelectList.isEmpty() && isRecordSelected) {
selectList = mVideoSelectList; selectList = mVideoSelectList;
} }
WritableArray videoList = new WritableNativeArray(); WritableArray videoList = new WritableNativeArray();
...@@ -309,20 +310,16 @@ public class RNSyanImagePickerModule extends ReactContextBaseJavaModule { ...@@ -309,20 +310,16 @@ public class RNSyanImagePickerModule extends ReactContextBaseJavaModule {
if (TextUtils.isEmpty(media.getPath())){ if (TextUtils.isEmpty(media.getPath())){
continue; continue;
} }
WritableMap avideo = new WritableNativeMap(); WritableMap videoMap = new WritableNativeMap();
avideo.putString("size", new File(media.getPath()).length() + ""); videoMap.putString("size", new File(media.getPath()).length() + "");
avideo.putString("duration", media.getDuration() + ""); videoMap.putString("duration", media.getDuration() + "");
avideo.putString("fileName", new File(media.getPath()).getName()); videoMap.putString("fileName", new File(media.getPath()).getName());
avideo.putString("uri", "file://" + media.getPath()); videoMap.putString("uri", "file://" + media.getPath());
avideo.putString("type", "video"); videoMap.putString("type", "video");
videoList.pushMap(avideo); videoList.pushMap(videoMap);
} }
if (mVideoSelectList.isEmpty()) { invokeSuccessWithResult(videoList);
invokeError();
} else {
invokeSuccessWithResult(videoList);
}
} }
private void onGetResult(Intent data) { private void onGetResult(Intent data) {
...@@ -338,11 +335,7 @@ public class RNSyanImagePickerModule extends ReactContextBaseJavaModule { ...@@ -338,11 +335,7 @@ public class RNSyanImagePickerModule extends ReactContextBaseJavaModule {
for (LocalMedia media : tmpSelectList) { for (LocalMedia media : tmpSelectList) {
imageList.pushMap(getImageResult(media, enableBase64)); imageList.pushMap(getImageResult(media, enableBase64));
} }
if (tmpSelectList.isEmpty()) { invokeSuccessWithResult(imageList);
invokeError();
} else {
invokeSuccessWithResult(imageList);
}
} }
private WritableMap getImageResult(LocalMedia media, Boolean enableBase64) { private WritableMap getImageResult(LocalMedia media, Boolean enableBase64) {
...@@ -419,12 +412,16 @@ public class RNSyanImagePickerModule extends ReactContextBaseJavaModule { ...@@ -419,12 +412,16 @@ public class RNSyanImagePickerModule extends ReactContextBaseJavaModule {
/** /**
* 取消选择时触发 * 取消选择时触发
*/ */
private void invokeError() { private void invokeError(int resultCode) {
String message = "取消";
if (resultCode != 0) {
message = String.valueOf(resultCode);
}
if (this.mPickerCallback != null) { if (this.mPickerCallback != null) {
this.mPickerCallback.invoke("取消"); this.mPickerCallback.invoke(message);
this.mPickerCallback = null; this.mPickerCallback = null;
} else if (this.mPickerPromise != null) { } else if (this.mPickerPromise != null) {
this.mPickerPromise.reject(SY_SELECT_IMAGE_FAILED_CODE, "取消"); this.mPickerPromise.reject(SY_SELECT_IMAGE_FAILED_CODE, message);
} }
} }
......
{ {
"name": "react-native-syan-image-picker", "name": "react-native-syan-image-picker",
"version": "0.3.5", "version": "0.3.6",
"description": "React-Native 多图片选择 支持裁剪 压缩", "description": "React-Native 多图片选择 支持裁剪 压缩",
"main": "index.js", "main": "index.js",
"scripts": { "scripts": {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment