Skip to content

Commit 88e8cf0

Browse files
committed
Retrofit + rxjava2 +rxbinding
testing
1 parent eac6e2e commit 88e8cf0

22 files changed

Lines changed: 1108 additions & 417 deletions

blereceiver/.gitignore

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
/build
1+
build/*

blereceiver/build.gradle

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ android {
1717
}
1818
javaCompileOptions {
1919
annotationProcessorOptions {
20-
arguments = [ moduleName : project.getName() ]
20+
arguments = [moduleName: project.getName()]
2121
}
2222
}
2323
}
@@ -26,8 +26,8 @@ android {
2626
targetCompatibility JavaVersion.VERSION_1_8
2727
}
2828

29-
sourceSets{
30-
main{
29+
sourceSets {
30+
main {
3131
if (isModule.toBoolean()) {
3232
manifest.srcFile 'src/main/module/AndroidManifest.xml'
3333
} else {
@@ -51,16 +51,15 @@ android {
5151

5252
dependencies {
5353
implementation fileTree(include: ['*.jar'], dir: 'libs')
54+
// implementation 'com.android.support.constraint:constraint-layout:1.1.1'
5455
annotationProcessor deps.arouter_compiler
5556
implementation project(':lib_common')
5657
// Log Bluetooth LE events in nRF Logger
57-
implementation 'no.nordicsemi.android:log:2.1.1'
58+
// implementation 'no.nordicsemi.android:log:2.1.1'
5859
// BLE library
5960
// implementation 'no.nordicsemi.android:ble:1.1.0'
6061
implementation project(':ble')
61-
implementation 'joda-time:joda-time:2.3'
62+
// implementation 'joda-time:joda-time:2.3'
6263

6364
testImplementation 'junit:junit:4.12'
64-
// androidTestImplementation 'com.android.support.test:runner:1.0.2'
65-
// androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
6665
}

blereceiver/src/main/java/com/demo/icarbox/blereceiver/BleReceiverActivity.java

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
import com.icarbonx.smartdevice.bodyfat.BodyFatDataHelper;
2828
import com.icarbonx.smartdevice.bodyfat.BodyFatUser;
2929
import com.icarbonx.smartdevice.http.BleHttpManager;
30+
import com.jakewharton.rxbinding2.view.RxView;
3031
import com.jude.easyrecyclerview.EasyRecyclerView;
3132
import com.jude.easyrecyclerview.adapter.BaseViewHolder;
3233
import com.jude.easyrecyclerview.adapter.RecyclerArrayAdapter;
@@ -35,12 +36,18 @@
3536
import java.util.Iterator;
3637
import java.util.List;
3738
import java.util.concurrent.ThreadPoolExecutor;
39+
import java.util.concurrent.TimeUnit;
3840

41+
import io.reactivex.Observer;
42+
import io.reactivex.android.schedulers.AndroidSchedulers;
43+
import io.reactivex.disposables.Disposable;
44+
import io.reactivex.plugins.RxJavaPlugins;
3945
import no.nordicsemi.android.ble.Request;
4046
import no.nordicsemi.android.log.LocalLogSession;
4147
import no.nordicsemi.android.log.LogSession;
4248
import no.nordicsemi.android.log.Logger;
4349
import no.nordicsemi.android.support.v18.scanner.ScanFilter;
50+
import retrofit2.Retrofit;
4451

4552
@Route(path = "/ble/receiver")
4653
public class BleReceiverActivity extends BaseActionBarActivity implements SwipeRefreshLayout.OnRefreshListener, View.OnClickListener {
@@ -89,6 +96,31 @@ protected void onCreate(Bundle savedInstanceState) {
8996
// LayoutInflater.Factory
9097
// ThreadPoolExecutor
9198
bodyFatDataHelper.setmIDataParser(bodyFatParser);
99+
100+
RxView.clicks(findViewById(R.id.serviceStart))
101+
.throttleFirst(1, TimeUnit.SECONDS)
102+
.subscribeOn(AndroidSchedulers.mainThread())
103+
.subscribe(new Observer() {
104+
@Override
105+
public void onSubscribe(Disposable d) {
106+
107+
}
108+
109+
@Override
110+
public void onNext(Object o) {
111+
Log.e(TAG,o.getClass().getSimpleName()+"收到点击事件");
112+
}
113+
114+
@Override
115+
public void onError(Throwable e) {
116+
117+
}
118+
119+
@Override
120+
public void onComplete() {
121+
122+
}
123+
});
92124
}
93125

94126
@Override
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
package com.demo.icarbox.blereceiver;
2+
3+
import android.support.annotation.NonNull;
4+
import android.text.InputType;
5+
import android.text.method.NumberKeyListener;
6+
7+
import com.guiying.module.common.http.DataType;
8+
9+
public class NumberKeys extends NumberKeyListener {
10+
char[] numberChars={'0','1','2','3','4','5','6','7','8','9'};
11+
@NonNull
12+
@Override
13+
protected char[] getAcceptedChars() {
14+
return numberChars;
15+
}
16+
17+
@Override
18+
public int getInputType() {
19+
return InputType.TYPE_CLASS_NUMBER;
20+
}
21+
}
Lines changed: 228 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,228 @@
1+
package com.demo.icarbox.blereceiver;
2+
3+
import android.Manifest;
4+
import android.content.ContentResolver;
5+
import android.content.Context;
6+
import android.content.pm.PackageManager;
7+
import android.database.ContentObserver;
8+
import android.database.Cursor;
9+
import android.net.Uri;
10+
import android.os.Handler;
11+
import android.support.annotation.NonNull;
12+
import android.support.design.widget.Snackbar;
13+
import android.support.v4.app.ActivityCompat;
14+
import android.support.v4.content.ContextCompat;
15+
import android.support.v7.app.AppCompatActivity;
16+
import android.os.Bundle;
17+
import android.text.Editable;
18+
import android.text.InputType;
19+
import android.text.method.KeyListener;
20+
import android.text.method.NumberKeyListener;
21+
import android.util.Log;
22+
import android.view.KeyEvent;
23+
import android.view.View;
24+
import android.widget.Button;
25+
import android.widget.EditText;
26+
27+
import com.icarbonx.smartdevice.account.Apis;
28+
import com.icarbonx.smartdevice.account.BaseResponse;
29+
import com.icarbonx.smartdevice.account.LoginResponse;
30+
import com.icarbonx.smartdevice.http.AbstractObserver;
31+
import com.jakewharton.rxbinding2.view.RxView;
32+
33+
import java.util.concurrent.TimeUnit;
34+
35+
import io.reactivex.Observer;
36+
import io.reactivex.Scheduler;
37+
import io.reactivex.android.schedulers.AndroidSchedulers;
38+
import io.reactivex.disposables.Disposable;
39+
import io.reactivex.functions.Consumer;
40+
import io.reactivex.schedulers.Schedulers;
41+
42+
import static android.content.pm.PackageManager.PERMISSION_GRANTED;
43+
44+
public class UserLoginActivity extends AppCompatActivity {
45+
46+
EditText mPhoneNumber, mVerifyCode;
47+
Button mLogin;
48+
49+
SmsObserver smsObserver;
50+
51+
@Override
52+
protected void onCreate(Bundle savedInstanceState) {
53+
super.onCreate(savedInstanceState);
54+
setContentView(R.layout.activity_user_login);
55+
56+
mPhoneNumber = findViewById(R.id.email);
57+
mVerifyCode = findViewById(R.id.password);
58+
mLogin = findViewById(R.id.email_sign_in_button);
59+
60+
mPhoneNumber.setKeyListener(new NumberKeys());
61+
mPhoneNumber.setInputType(InputType.TYPE_CLASS_NUMBER);
62+
findViewById(R.id.verifyCod).setOnClickListener(
63+
new View.OnClickListener() {
64+
@Override
65+
public void onClick(View v) {
66+
67+
68+
// RxView.clicks(findViewById(R.id.verifyCod))
69+
// .throttleFirst(60, TimeUnit.SECONDS)
70+
// .subscribe(new AbstractObserver<Object>() {
71+
// @Override
72+
// public void onSuccess(Object o) {
73+
if (!checkPhoneNumber()) return;
74+
75+
Apis.getInstance().getUserAccountService()
76+
.getVerifyCode(mPhoneNumber.getText().toString(), 1)
77+
.subscribeOn(Schedulers.io())
78+
// .observeOn(AndroidSchedulers.mainThread())
79+
.subscribe(new AbstractObserver<BaseResponse>() {
80+
@Override
81+
public void onSuccess(BaseResponse baseResponse) {
82+
if (baseResponse.getErrorCode() == 0) {
83+
Log.e("ss1",baseResponse.toJson());
84+
}//请求失败,尝试
85+
else {
86+
87+
}
88+
}
89+
90+
@Override
91+
public void onFailure(Throwable throwable) {
92+
//获取验证码失败,尝试
93+
}
94+
});
95+
// }
96+
// });
97+
}
98+
}
99+
);
100+
RxView.clicks(mLogin)
101+
.throttleFirst(2, TimeUnit.SECONDS)
102+
.subscribe(new AbstractObserver<Object>() {
103+
@Override
104+
public void onSuccess(Object o) {
105+
//Login in check
106+
if (!checkPhoneNumber()) return;
107+
if (!checkVerifyCode()) return;
108+
Apis.getInstance().getUserAccountService()
109+
.login(mPhoneNumber.getText().toString().trim(),
110+
mVerifyCode.getText().toString().trim())
111+
.subscribeOn(Schedulers.io())
112+
// .observeOn(AndroidSchedulers.mainThread())
113+
.subscribe(new AbstractObserver<LoginResponse>() {
114+
@Override
115+
public void onSuccess(LoginResponse loginResponse) {
116+
//to next page
117+
if (loginResponse.getErrorCode() == 0) {
118+
Log.e("ss2",loginResponse.toJson());
119+
}//toast err msg
120+
else {
121+
Log.e("err", "[" + loginResponse.getErrorCode() + "]"
122+
+ loginResponse.getErrMsg());
123+
}
124+
}
125+
126+
@Override
127+
public void onFailure(Throwable throwable) {
128+
//登陆失败,尝试
129+
}
130+
});
131+
}
132+
});
133+
134+
smsObserver = new SmsObserver(this, smsHandler);
135+
getContentResolver().registerContentObserver(SMS_INBOX, true,
136+
smsObserver);
137+
138+
checkSMSPermission();
139+
}
140+
141+
private void checkSMSPermission() {
142+
if (ContextCompat.checkSelfPermission(UserLoginActivity.this, Manifest.permission.READ_SMS)
143+
!= PERMISSION_GRANTED) {
144+
ActivityCompat.requestPermissions(UserLoginActivity.this, new String[]{Manifest.permission.READ_SMS}, 1);
145+
}
146+
}
147+
148+
@Override
149+
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
150+
if (1 == requestCode && permissions.length == 1) {
151+
if (grantResults[0] == PERMISSION_GRANTED) {
152+
//授权读取短信
153+
}//授权失败
154+
else {
155+
156+
}
157+
}
158+
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
159+
}
160+
161+
public Handler smsHandler = new Handler() {
162+
};
163+
164+
boolean checkPhoneNumber() {
165+
String number = mPhoneNumber.getText().toString();
166+
if (number.length() == 11 || number.length() == 14) {
167+
return true;
168+
}
169+
mPhoneNumber.setError("Number length is invalid");
170+
return false;
171+
}
172+
173+
boolean checkVerifyCode() {
174+
String number = mVerifyCode.getText().toString();
175+
if (number.length() != 4) {
176+
mVerifyCode.setError("Verify code is invalid");
177+
return false;
178+
}
179+
return true;
180+
}
181+
182+
183+
private Uri SMS_INBOX = Uri.parse("content://sms/inbox");
184+
185+
public void getSmsFromPhone() {
186+
ContentResolver cr = getContentResolver();
187+
String[] projection = new String[]{"body", "address"};//"_id", "address", "person",, "date", "type
188+
String where = " date > "
189+
+ (System.currentTimeMillis() - 60 * 1000);
190+
Cursor cur = cr.query(SMS_INBOX, projection, where, null, "date desc");
191+
// if (null == cur)
192+
// return;
193+
// if (cur.moveToFirst()) {
194+
// String number = cur.getString(cur.getColumnIndex("address"));//手机号
195+
// String body = cur.getString(cur.getColumnIndex("body"));
196+
//
197+
// }
198+
199+
Cursor cursor = getContentResolver().query(
200+
Uri.parse("content://sms"),
201+
new String[]{"_id", "address", "body", "date"},
202+
where, null, "date desc"); //
203+
if (cursor != null) {
204+
// String body = "";
205+
while (cursor.moveToNext()) {
206+
String number = cur.getString(cur.getColumnIndex("address"));//手机号
207+
String body = cur.getString(cur.getColumnIndex("body"));
208+
//-----------------写自己的逻辑
209+
210+
}
211+
212+
}
213+
}
214+
215+
class SmsObserver extends ContentObserver {
216+
217+
public SmsObserver(Context context, Handler handler) {
218+
super(handler);
219+
}
220+
221+
@Override
222+
public void onChange(boolean selfChange) {
223+
super.onChange(selfChange);
224+
//每当有新短信到来时,使用我们获取短消息的方法
225+
getSmsFromPhone();
226+
}
227+
}
228+
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
package com.icarbonx.smartdevice.account;
2+
3+
/**
4+
* Account information callback class
5+
*/
6+
public class AccountInfoResponse extends BaseResponse<UserAccount> {
7+
}

0 commit comments

Comments
 (0)