From 1dd9852d21e7d73de0c58cb7dc6cc8059b23ee53 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=8B=E9=80=B8?= Date: Tue, 17 Jul 2018 10:47:12 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E7=9B=B8=E6=9C=BA=E5=B7=A5?= =?UTF-8?q?=E5=85=B7=E7=B1=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- RxCamera/build.gradle | 2 + .../com/vondear/camera/tool/RxCameraTool.java | 129 +++++++++++++++--- RxKit/build.gradle | 2 - 3 files changed, 110 insertions(+), 23 deletions(-) diff --git a/RxCamera/build.gradle b/RxCamera/build.gradle index b88b64ed..cd816c88 100644 --- a/RxCamera/build.gradle +++ b/RxCamera/build.gradle @@ -35,4 +35,6 @@ dependencies { testImplementation 'junit:junit:4.12' androidTestImplementation 'com.android.support.test:runner:1.0.2' androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2' + compileOnly 'io.reactivex.rxjava2:rxjava:2.1.14' + compileOnly 'io.reactivex.rxjava2:rxandroid:2.0.2' } diff --git a/RxCamera/src/main/java/com/vondear/camera/tool/RxCameraTool.java b/RxCamera/src/main/java/com/vondear/camera/tool/RxCameraTool.java index e228b5cb..1dff4056 100644 --- a/RxCamera/src/main/java/com/vondear/camera/tool/RxCameraTool.java +++ b/RxCamera/src/main/java/com/vondear/camera/tool/RxCameraTool.java @@ -2,16 +2,16 @@ import android.content.Context; import android.hardware.Camera; +import android.os.SystemClock; +import android.support.annotation.NonNull; import android.util.Log; import com.vondear.camera.RxCameraView; import com.vondear.rxtool.RxConstants; import com.vondear.rxtool.RxExifTool; import com.vondear.rxtool.RxFileTool; -import com.vondear.rxtool.RxTool; import com.vondear.rxtool.RxVibrateTool; import com.vondear.rxtool.interfaces.OnRxCamera; -import com.vondear.rxtool.interfaces.OnSimpleListener; import com.vondear.rxtool.module.photomagic.OnCompressListener; import com.vondear.rxtool.module.photomagic.RxMagic; import com.vondear.rxtool.view.RxToast; @@ -21,6 +21,14 @@ import java.io.IOException; import java.io.OutputStream; +import io.reactivex.Observable; +import io.reactivex.ObservableEmitter; +import io.reactivex.ObservableOnSubscribe; +import io.reactivex.Observer; +import io.reactivex.android.schedulers.AndroidSchedulers; +import io.reactivex.disposables.Disposable; +import io.reactivex.schedulers.Schedulers; + /** * @author Vondear * @date 2017/9/22 @@ -80,16 +88,51 @@ public static void takePic(Context mContext, final RxCameraView mCameraView) { mCameraView.start(); RxVibrateTool.vibrateOnce(mContext, 150); RxToast.normal("正在拍照.."); - RxTool.delayToDo(500L, new OnSimpleListener() { + Observable.create(new ObservableOnSubscribe() { @Override - public void doSomething() { - try { - mCameraView.takePicture(); - } catch (Exception var2) { - RxToast.normal("你碰到问题咯"); - } + public void subscribe(@NonNull ObservableEmitter e) { + //延时 + SystemClock.sleep(500); + e.onNext(1); } - }); + }).subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()) + // 第三步:订阅 + .subscribe(new Observer() { + + // 第二步:初始化Observer + private Disposable mDisposable; + + @Override + public void onSubscribe(@NonNull Disposable d) { + mDisposable = d; + } + + @Override + public void onNext(@NonNull Integer integer) { + switch (integer) { + case 1: + try { + mCameraView.takePicture(); + } catch (Exception var2) { + RxToast.normal("你碰到问题咯"); + } + break; + default: + break; + } + + } + + @Override + public void onError(@NonNull Throwable e) { + + } + + @Override + public void onComplete() { + + } + }); } } catch (Exception var3) { RxToast.normal("你碰到了问题咯"); @@ -106,9 +149,10 @@ public static void initCameraEvent(final Context mContext, final boolean isEconomize, final OnRxCamera onRxCamera) { onRxCamera.onBefore(); - RxTool.getBackgroundHandler().post(new Runnable() { + Observable.create(new ObservableOnSubscribe() { @Override - public void run() { + public void subscribe(@NonNull final ObservableEmitter e) { + File fileParent = new File(fileDir); File cacheParent = new File(RxConstants.PICTURE_CACHE_PATH); if (!cacheParent.exists()) { @@ -142,9 +186,9 @@ public void onSuccess(File file) { if (mLongitude != 0 || mLatitude != 0) { RxExifTool.writeLatLonIntoJpeg(compressFile.getAbsolutePath(), mLatitude, mLongitude); onRxCamera.onSuccessExif(compressFile); - RxToast.normal("拍照成功"); + e.onNext(2); } else { - RxToast.error("请先获取定位信息"); + e.onNext(3); } } } @@ -156,21 +200,64 @@ public void onError(Throwable e) { } }).launch(); - } catch (IOException e) { - Log.w("onPictureTaken", "Cannot write to " + compressFile, e); + } catch (IOException e1) { + Log.w("onPictureTaken", "Cannot write to " + compressFile, e1); } finally { if (os != null) { try { os.close(); - if (isEconomize) { - mCameraView.stop(); - } - } catch (IOException e) { + e.onNext(1); + } catch (IOException e2) { // Ignore } } } } - }); + }).subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()) + // 第三步:订阅 + .subscribe(new Observer() { + + // 第二步:初始化Observer + private Disposable mDisposable; + + @Override + public void onSubscribe(@NonNull Disposable d) { + mDisposable = d; + } + + @Override + public void onNext(@NonNull Integer integer) { + switch (integer) { + case 1: + try { + if (isEconomize) { + mCameraView.stop(); + } + } catch (Exception e) { + + } + break; + case 2: + RxToast.normal("拍照成功"); + break; + case 3: + RxToast.error("请先获取定位信息"); + break; + default: + break; + } + + } + + @Override + public void onError(@NonNull Throwable e) { + + } + + @Override + public void onComplete() { + + } + }); } } diff --git a/RxKit/build.gradle b/RxKit/build.gradle index 57fb3b22..78ece19a 100644 --- a/RxKit/build.gradle +++ b/RxKit/build.gradle @@ -51,7 +51,5 @@ dependencies { //压缩与加密 implementation 'net.lingala.zip4j:zip4j:1.3.2' - compileOnly 'com.github.google:cameraview:3eaeac09a7' - compileOnly 'org.greenrobot:greendao:3.2.2' } \ No newline at end of file