Commit be166e2f by sikang

rm SD Permission

parent b267935a
......@@ -3,9 +3,9 @@
package="tech.starwin">
<!--写入SD卡-->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<!--<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />-->
<!--读取SD卡-->
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<!--<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />-->
<!--相机-->
<uses-permission android:name="android.permission.CAMERA" />
<!--读取联系人信息-->
......
......@@ -20,6 +20,8 @@ import com.common.base.BaseActivity;
import tech.starwin.impl.OnNoShakeClickListener;
import tech.starwin.utils.BitmapUtils;
import tech.starwin.utils.FileUtils;
import tech.starwin.utils.PreferencesManager;
import tech.starwin.utils.SPDataProvider;
import tech.starwin.utils.context_utils.ActivityJumper;
import tech.starwin.utils.context_utils.EasyActivityResult;
import tech.starwin.utils.ui_utils.QMUIHelper;
......@@ -100,29 +102,41 @@ public class TakePhotoActivity extends BaseActivity {
public void onEventClick(View v) {
if (v.getId() == R.id.button_shoot) {
cameraView.captureImage(bitmap -> {
File image = FileUtils.getImageFile(getApplicationContext(), KTP_IMAGE);
if (!image.exists()) {
image.mkdir();
}
File file = BitmapUtils.saveBitmapToSDCard(bitmap, image, 100);
if (file == null) {
setResult(RESULT_CANCELED);
long pix_size = bitmap.getWidth() * bitmap.getHeight();
float scale = 720 * 1080 / (float) pix_size;
BitmapUtils.scaleBitmap(bitmap, scale);
if(TextUtils.equals(type, PhotoType.KTP.name())){
SPDataProvider.saveKTPImage(bitmap);
}else if(TextUtils.equals(type, PhotoType.WORK_CARD.name())){
SPDataProvider.saveWorkImage(bitmap);
}
setResult(RESULT_OK);
finish();
return;
}
//如果图片过大,则压缩
long size = FileUtils.getFileSize(file) / 1024;
if (FileUtils.getFileSize(file) / 1024 > 1024) {
int quality = (int) (100 * (1024f / size));
file = BitmapUtils.saveBitmapToSDCard(bitmap, image, quality);
}
//去掉SD卡权限后弃用
// File image = FileUtils.getImageFile(getApplicationContext(), KTP_IMAGE);
// if (!image.exists()) {
// image.mkdir();
// }
//
// File file = BitmapUtils.saveBitmapToSDCard(bitmap, image, 100);
// if (file == null) {
// setResult(RESULT_CANCELED);
// finish();
// return;
// }
// //如果图片过大,则压缩
// long size = FileUtils.getFileSize(file) / 1024;
// if (FileUtils.getFileSize(file) / 1024 > 1024) {
// int quality = (int) (100 * (1024f / size));
// file = BitmapUtils.saveBitmapToSDCard(bitmap, image, quality);
//
// }
Intent intent = new Intent();
intent.putExtra("image_path", file.getAbsolutePath());
setResult(RESULT_OK, intent);
finish();
// Intent intent = new Intent();
// intent.putExtra("image_path", file.getAbsolutePath());
// setResult(RESULT_OK, intent);
// finish();
// try {
// FileOutputStream outputStream = new FileOutputStream(image.getPath());
......
package tech.starwin.mvp.presenter;
import android.content.Context;
import android.graphics.Bitmap;
import android.support.annotation.NonNull;
import android.text.TextUtils;
......@@ -13,11 +14,8 @@ import java.util.List;
import io.reactivex.Observable;
import io.reactivex.ObservableSource;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.functions.Consumer;
import io.reactivex.functions.Function;
import io.reactivex.functions.Predicate;
import io.reactivex.schedulers.Schedulers;
import okhttp3.MultipartBody;
import tech.starwin.LibConfig;
import tech.starwin.base.BasePresenter;
import tech.starwin.constants.TrackEvent;
......@@ -28,9 +26,8 @@ import com.common.bean.BasicAck;
import com.common.bean.OcrResultBean;
import com.google.gson.JsonObject;
import tech.starwin.utils.LogUtils;
import tech.starwin.utils.LoginManager;
import tech.starwin.utils.MultipartBodyMaker;
import tech.starwin.network.tools.MultipartBodyMaker;
import tech.starwin.utils.PreferencesManager;
import tech.starwin.utils.TrackEventHelper;
import tech.starwin.utils.context_utils.AppInfoUtils;
......@@ -48,7 +45,21 @@ public class UploadPresenter extends BasePresenter<UploadApi> {
* 身份证ocr识别
*/
public void identityOcr(final String action, @NonNull File file) {
handleRequest(apiService.identityOcr(MultipartBodyMaker.makeSimplePart("file", file), LoginManager.get().getToken()),
identityOcr(action, MultipartBodyMaker.makeSimplePart("file", file));
}
/**
* 身份证ocr识别
*/
public void identityOcr(final String action, @NonNull Bitmap bitmap) {
identityOcr(action, MultipartBodyMaker.makeSimplePart("file", "ktp_img", bitmap, Bitmap.CompressFormat.JPEG));
}
/**
* 身份证ocr识别,直接使用Bitmap
*/
private void identityOcr(final String action, MultipartBody.Part filePart) {
handleRequest(apiService.identityOcr(filePart, LoginManager.get().getToken()),
new HttpObserver<OcrResultBean>() {
@Override
public void onStart() {
......
......@@ -2,6 +2,7 @@ package tech.starwin.mvp.presenter;
import android.annotation.SuppressLint;
import android.graphics.Bitmap;
import android.text.TextUtils;
import org.greenrobot.eventbus.EventBus;
......@@ -17,6 +18,7 @@ import io.reactivex.functions.Function;
import io.reactivex.functions.Function4;
import io.reactivex.functions.Predicate;
import io.reactivex.schedulers.Schedulers;
import okhttp3.MultipartBody;
import okhttp3.ResponseBody;
import tech.starwin.base.BasePresenter;
import tech.starwin.constants.ActionEnum;
......@@ -44,7 +46,7 @@ import com.common.bean.UserBean;
import tech.starwin.network.Gateway;
import tech.starwin.network.ServiceGenerator;
import tech.starwin.utils.LoginManager;
import tech.starwin.utils.MultipartBodyMaker;
import tech.starwin.network.tools.MultipartBodyMaker;
import tech.starwin.utils.PreferencesManager;
import tech.starwin.utils.TrackEventHelper;
......@@ -472,10 +474,26 @@ public class UserPresenter extends BasePresenter<UserApi> {
}
public void submitEmploymentInfo(String action, File workCardImage, EmploymentServerBean employmentBean) {
MultipartBody.Part part = null;
if (workCardImage != null && workCardImage.exists()) {
part = MultipartBodyMaker.makeSimplePart("file", workCardImage);
}
submitEmploymentInfo(action, part, employmentBean);
}
public void submitEmploymentInfo(String action, Bitmap bitmap, EmploymentServerBean employmentBean) {
MultipartBody.Part part = null;
if (bitmap != null) {
part = MultipartBodyMaker.makeSimplePart("file", "word_card", bitmap, Bitmap.CompressFormat.JPEG);
}
submitEmploymentInfo(action, part, employmentBean);
}
/**
* 提交工作信息
*/
public void submitEmploymentInfo(String action, File workCardImage, EmploymentServerBean employmentBean) {
private void submitEmploymentInfo(String action, MultipartBody.Part part, EmploymentServerBean employmentBean) {
Observable<ResponseBody> info = ServiceGenerator.getService(UserApi.class)
.submitEmploymentInfo(employmentBean.getCompanyName(),
employmentBean.getCompanyProvince(),
......@@ -488,8 +506,8 @@ public class UserPresenter extends BasePresenter<UserApi> {
employmentBean.getSalary(),
LoginManager.get().getToken());
if (workCardImage != null && workCardImage.exists()) {
Observable<ResponseBody> upload = getService(UploadApi.class).uploadPhoto(MultipartBodyMaker.makeSimplePart("file", workCardImage), "EMPLOYMENT_PHOTO", LoginManager.get().getToken());
if (part != null) {
Observable<ResponseBody> upload = getService(UploadApi.class).uploadPhoto(part, "EMPLOYMENT_PHOTO", LoginManager.get().getToken());
handleRequest(action, Observable.zip(info, upload, new BiFunction<ResponseBody, ResponseBody, Boolean>() {
@Override
......@@ -579,7 +597,7 @@ public class UserPresenter extends BasePresenter<UserApi> {
/**
* 获取其他照片
* */
*/
public void getPhotoList(String action) {
handleRequest(action, apiService.getPhotoList());
}
......
package tech.starwin.network.tools;
import android.graphics.Bitmap;
import java.io.IOException;
import javax.annotation.Nullable;
import okhttp3.MediaType;
import okhttp3.RequestBody;
import okio.BufferedSink;
/**
* Created by SiKang on 2019/4/22.
*/
public class BitmapRequestBody extends RequestBody {
private Bitmap bitmap;
private Bitmap.CompressFormat format;
public BitmapRequestBody(Bitmap bitmap, Bitmap.CompressFormat format) {
this.bitmap = bitmap;
this.format = format;
}
@Nullable
@Override
public MediaType contentType() {
if (format == Bitmap.CompressFormat.JPEG) {
return MediaType.parse("image/jpeg");
} else if (format == Bitmap.CompressFormat.PNG) {
return MediaType.parse("image/png");
} else if (format == Bitmap.CompressFormat.WEBP) {
return MediaType.parse("image/webp");
}
return null;
}
@Override
public void writeTo(BufferedSink sink) throws IOException {
bitmap.compress(format, 100, sink.outputStream());
}
}
package tech.starwin.utils;
package tech.starwin.network.tools;
import android.graphics.Bitmap;
import java.io.File;
import java.util.List;
......@@ -6,6 +8,7 @@ import java.util.List;
import okhttp3.MediaType;
import okhttp3.MultipartBody;
import okhttp3.RequestBody;
import tech.starwin.utils.FileUtils;
/**
* Created by SiKang on 2018/9/28.
......@@ -35,6 +38,11 @@ public class MultipartBodyMaker {
return MultipartBody.Part.createFormData(name, file.getName(), requestFile);
}
public static MultipartBody.Part makeSimplePart(String name, String fileName, Bitmap bitmap, Bitmap.CompressFormat format) {
RequestBody requestFile = new BitmapRequestBody(bitmap, format);
return MultipartBody.Part.createFormData(name, fileName, requestFile);
}
public static MultipartBody.Part makeSimplePart(String name, String value) {
return MultipartBody.Part.createFormData(name, value);
}
......@@ -78,6 +86,5 @@ public class MultipartBodyMaker {
public MultipartBodyMaker build() {
return new MultipartBodyMaker(builder);
}
}
}
......@@ -6,8 +6,10 @@ import android.graphics.Matrix;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.media.ExifInterface;
import android.util.Base64;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
......@@ -61,6 +63,20 @@ public class BitmapUtils {
return resizedBitmap;
}
/**
* 缩放图片到指定大小(保持比例)
*/
public static Bitmap scaleBitmap(Bitmap bitmap, float scale) {
if (scale == 0 || scale == 1) {
return bitmap;
}
Matrix matrix = new Matrix();
matrix.postScale(scale, scale);
Bitmap resizedBitmap = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(),
bitmap.getHeight(), matrix, true);
return resizedBitmap;
}
/**
* 从SD卡中加载图片中心区域
......@@ -267,6 +283,53 @@ public class BitmapUtils {
/**
* bitmap转为base64
*
* @param bitmap
* @return
*/
public static String bitmapToBase64(Bitmap bitmap) {
String result = null;
ByteArrayOutputStream baos = null;
try {
if (bitmap != null) {
baos = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, baos);
baos.flush();
baos.close();
byte[] bitmapBytes = baos.toByteArray();
result = Base64.encodeToString(bitmapBytes, Base64.DEFAULT);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (baos != null) {
baos.flush();
baos.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
return result;
}
/**
* base64转为bitmap
*
* @param base64Data
* @return
*/
public static Bitmap base64ToBitmap(String base64Data) {
byte[] bytes = Base64.decode(base64Data, Base64.DEFAULT);
return BitmapFactory.decodeByteArray(bytes, 0, bytes.length);
}
/**
* Drawable转Bitmap
*/
public static Bitmap drawableToBmp(Drawable drawable) {
......
package tech.starwin.utils;
import android.graphics.Bitmap;
import android.text.TextUtils;
/**
* Created by SiKang on 2019/4/22.
*/
public class SPDataProvider {
/**
* 存取KTP照片
*/
public static void saveKTPImage(Bitmap bitmap) {
PreferencesManager.get().saveData("ktp_image", BitmapUtils.bitmapToBase64(bitmap));
}
public static Bitmap getKTPImage() {
String bitmapStr = PreferencesManager.get().getString("ktp_image", "");
return TextUtils.isEmpty(bitmapStr) ? null : BitmapUtils.base64ToBitmap(bitmapStr);
}
/**
* 存取工作证照片
*/
public static void saveWorkImage(Bitmap bitmap) {
PreferencesManager.get().saveData("work_card_image", BitmapUtils.bitmapToBase64(bitmap));
}
public static Bitmap getWorkImage() {
String bitmapStr = PreferencesManager.get().getString("work_card_image", "");
return TextUtils.isEmpty(bitmapStr) ? null : BitmapUtils.base64ToBitmap(bitmapStr);
}
}
......@@ -56,8 +56,8 @@ public class PermissionsHelper {
Manifest.permission.READ_CONTACTS,
Manifest.permission.READ_CALL_LOG,
Manifest.permission.READ_SMS,
Manifest.permission.READ_EXTERNAL_STORAGE,
Manifest.permission.WRITE_EXTERNAL_STORAGE
// Manifest.permission.READ_EXTERNAL_STORAGE,
// Manifest.permission.WRITE_EXTERNAL_STORAGE
// Manifest.permission.ACCESS_COARSE_LOCATION,//粗精度定位
// Manifest.permission.ACCESS_FINE_LOCATION//卫星定位
// Manifest.permission.READ_PHONE_STATE
......@@ -70,8 +70,8 @@ public class PermissionsHelper {
Manifest.permission.READ_CONTACTS,
// Manifest.permission.READ_CALL_LOG,
// Manifest.permission.READ_SMS,
Manifest.permission.READ_EXTERNAL_STORAGE,
Manifest.permission.WRITE_EXTERNAL_STORAGE
// Manifest.permission.READ_EXTERNAL_STORAGE,
// Manifest.permission.WRITE_EXTERNAL_STORAGE
// Manifest.permission.ACCESS_COARSE_LOCATION,//粗精度定位
// Manifest.permission.ACCESS_FINE_LOCATION//卫星定位
// Manifest.permission.READ_PHONE_STATE
......
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