2
2
3
3
import android .content .Context ;
4
4
import android .hardware .Camera ;
5
+ import android .os .SystemClock ;
6
+ import android .support .annotation .NonNull ;
5
7
import android .util .Log ;
6
8
7
9
import com .vondear .camera .RxCameraView ;
8
10
import com .vondear .rxtool .RxConstants ;
9
11
import com .vondear .rxtool .RxExifTool ;
10
12
import com .vondear .rxtool .RxFileTool ;
11
- import com .vondear .rxtool .RxTool ;
12
13
import com .vondear .rxtool .RxVibrateTool ;
13
14
import com .vondear .rxtool .interfaces .OnRxCamera ;
14
- import com .vondear .rxtool .interfaces .OnSimpleListener ;
15
15
import com .vondear .rxtool .module .photomagic .OnCompressListener ;
16
16
import com .vondear .rxtool .module .photomagic .RxMagic ;
17
17
import com .vondear .rxtool .view .RxToast ;
21
21
import java .io .IOException ;
22
22
import java .io .OutputStream ;
23
23
24
+ import io .reactivex .Observable ;
25
+ import io .reactivex .ObservableEmitter ;
26
+ import io .reactivex .ObservableOnSubscribe ;
27
+ import io .reactivex .Observer ;
28
+ import io .reactivex .android .schedulers .AndroidSchedulers ;
29
+ import io .reactivex .disposables .Disposable ;
30
+ import io .reactivex .schedulers .Schedulers ;
31
+
24
32
/**
25
33
* @author Vondear
26
34
* @date 2017/9/22
@@ -80,16 +88,51 @@ public static void takePic(Context mContext, final RxCameraView mCameraView) {
80
88
mCameraView .start ();
81
89
RxVibrateTool .vibrateOnce (mContext , 150 );
82
90
RxToast .normal ("正在拍照.." );
83
- RxTool . delayToDo ( 500L , new OnSimpleListener () {
91
+ Observable . create ( new ObservableOnSubscribe < Integer > () {
84
92
@ Override
85
- public void doSomething () {
86
- try {
87
- mCameraView .takePicture ();
88
- } catch (Exception var2 ) {
89
- RxToast .normal ("你碰到问题咯" );
90
- }
93
+ public void subscribe (@ NonNull ObservableEmitter <Integer > e ) {
94
+ //延时
95
+ SystemClock .sleep (500 );
96
+ e .onNext (1 );
91
97
}
92
- });
98
+ }).subscribeOn (Schedulers .io ()).observeOn (AndroidSchedulers .mainThread ())
99
+ // 第三步:订阅
100
+ .subscribe (new Observer <Integer >() {
101
+
102
+ // 第二步:初始化Observer
103
+ private Disposable mDisposable ;
104
+
105
+ @ Override
106
+ public void onSubscribe (@ NonNull Disposable d ) {
107
+ mDisposable = d ;
108
+ }
109
+
110
+ @ Override
111
+ public void onNext (@ NonNull Integer integer ) {
112
+ switch (integer ) {
113
+ case 1 :
114
+ try {
115
+ mCameraView .takePicture ();
116
+ } catch (Exception var2 ) {
117
+ RxToast .normal ("你碰到问题咯" );
118
+ }
119
+ break ;
120
+ default :
121
+ break ;
122
+ }
123
+
124
+ }
125
+
126
+ @ Override
127
+ public void onError (@ NonNull Throwable e ) {
128
+
129
+ }
130
+
131
+ @ Override
132
+ public void onComplete () {
133
+
134
+ }
135
+ });
93
136
}
94
137
} catch (Exception var3 ) {
95
138
RxToast .normal ("你碰到了问题咯" );
@@ -106,9 +149,10 @@ public static void initCameraEvent(final Context mContext,
106
149
final boolean isEconomize ,
107
150
final OnRxCamera onRxCamera ) {
108
151
onRxCamera .onBefore ();
109
- RxTool . getBackgroundHandler (). post ( new Runnable () {
152
+ Observable . create ( new ObservableOnSubscribe < Integer > () {
110
153
@ Override
111
- public void run () {
154
+ public void subscribe (@ NonNull final ObservableEmitter <Integer > e ) {
155
+
112
156
File fileParent = new File (fileDir );
113
157
File cacheParent = new File (RxConstants .PICTURE_CACHE_PATH );
114
158
if (!cacheParent .exists ()) {
@@ -142,9 +186,9 @@ public void onSuccess(File file) {
142
186
if (mLongitude != 0 || mLatitude != 0 ) {
143
187
RxExifTool .writeLatLonIntoJpeg (compressFile .getAbsolutePath (), mLatitude , mLongitude );
144
188
onRxCamera .onSuccessExif (compressFile );
145
- RxToast . normal ( "拍照成功" );
189
+ e . onNext ( 2 );
146
190
} else {
147
- RxToast . error ( "请先获取定位信息" );
191
+ e . onNext ( 3 );
148
192
}
149
193
}
150
194
}
@@ -156,21 +200,64 @@ public void onError(Throwable e) {
156
200
}
157
201
}).launch ();
158
202
159
- } catch (IOException e ) {
160
- Log .w ("onPictureTaken" , "Cannot write to " + compressFile , e );
203
+ } catch (IOException e1 ) {
204
+ Log .w ("onPictureTaken" , "Cannot write to " + compressFile , e1 );
161
205
} finally {
162
206
if (os != null ) {
163
207
try {
164
208
os .close ();
165
- if (isEconomize ) {
166
- mCameraView .stop ();
167
- }
168
- } catch (IOException e ) {
209
+ e .onNext (1 );
210
+ } catch (IOException e2 ) {
169
211
// Ignore
170
212
}
171
213
}
172
214
}
173
215
}
174
- });
216
+ }).subscribeOn (Schedulers .io ()).observeOn (AndroidSchedulers .mainThread ())
217
+ // 第三步:订阅
218
+ .subscribe (new Observer <Integer >() {
219
+
220
+ // 第二步:初始化Observer
221
+ private Disposable mDisposable ;
222
+
223
+ @ Override
224
+ public void onSubscribe (@ NonNull Disposable d ) {
225
+ mDisposable = d ;
226
+ }
227
+
228
+ @ Override
229
+ public void onNext (@ NonNull Integer integer ) {
230
+ switch (integer ) {
231
+ case 1 :
232
+ try {
233
+ if (isEconomize ) {
234
+ mCameraView .stop ();
235
+ }
236
+ } catch (Exception e ) {
237
+
238
+ }
239
+ break ;
240
+ case 2 :
241
+ RxToast .normal ("拍照成功" );
242
+ break ;
243
+ case 3 :
244
+ RxToast .error ("请先获取定位信息" );
245
+ break ;
246
+ default :
247
+ break ;
248
+ }
249
+
250
+ }
251
+
252
+ @ Override
253
+ public void onError (@ NonNull Throwable e ) {
254
+
255
+ }
256
+
257
+ @ Override
258
+ public void onComplete () {
259
+
260
+ }
261
+ });
175
262
}
176
263
}
0 commit comments