正在查看: WeatherSense v1.8.9 应用的 BleScanActivity.java JAVA 源代码文件
本页面展示 JAVA 反编译生成的源代码文件,支持语法高亮显示。 仅供安全研究与技术分析使用,严禁用于任何非法用途。请遵守相关法律法规。
正在查看: WeatherSense v1.8.9 应用的 BleScanActivity.java JAVA 源代码文件
本页面展示 JAVA 反编译生成的源代码文件,支持语法高亮显示。 仅供安全研究与技术分析使用,严禁用于任何非法用途。请遵守相关法律法规。
package com.emax.weather.ui.activity;
import android.bluetooth.BluetoothAdapter;
import android.bluetooth.le.ScanResult;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Build;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
import butterknife.BindView;
import butterknife.ButterKnife;
import butterknife.OnClick;
import butterknife.OnItemClick;
import com.emax.weahter.R;
import com.emax.weather.adapter.DevicesAdapter;
import com.emax.weather.base.MvpBaseActivity;
import com.emax.weather.bean.CmdConstant;
import com.emax.weather.bean.DeviceInfo;
import com.emax.weather.event.BleScanEvent;
import com.emax.weather.presenter.BleScanPersenterImp;
import com.emax.weather.receiver.BleStateReceiver;
import com.emax.weather.receiver.ClosePageReceiver;
import com.emax.weather.util.AndroidScheduler;
import com.emax.weather.utils.CheckClickUtils;
import com.ezon.health.utils_lib.ToastUtil;
import com.tbruyelle.rxpermissions2.RxPermissions;
import com.tuyenmonkey.mkloader.MKLoader;
import io.reactivex.Flowable;
import io.reactivex.Observable;
import io.reactivex.disposables.Disposable;
import io.reactivex.functions.Consumer;
import java.util.List;
import java.util.concurrent.TimeUnit;
public class BleScanActivity extends MvpBaseActivity<BleScanEvent.BleScanView, BleScanPersenterImp> implements BleScanEvent.BleScanView {
private DevicesAdapter adapter;
private Disposable disposable;
private List<DeviceInfo> list;
@BindView(R.id.lv_device)
ListView lvDevice;
@BindView(R.id.mkloader)
MKLoader mkLoader;
private Disposable timerDisposable;
@BindView(R.id.title_sub)
TextView titleSub;
@BindView(R.id.tv_scan_nodevice)
TextView tvScanNodevice;
@BindView(R.id.setting)
TextView tvSearch;
private int scanCount = 6;
private BleStateReceiver bleStateReceiver = new BleStateReceiver() {
@Override
public void bleScan() {
((BleScanPersenterImp) BleScanActivity.this.mPresenter).scan();
BleScanActivity.this.initTimer();
}
};
private ClosePageReceiver closePageReceiver = new ClosePageReceiver() {
@Override
public void onClosePage() {
BleScanActivity.this.finish();
}
};
@Override
protected int getActivityRId() {
return R.layout.activity_ble_scan;
}
@Override
public Context getViewContext() {
return this;
}
@Override
public void refreshScanFail() {
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ButterKnife.bind(this);
initView();
checkBlue();
}
private void checkBlue() {
try {
BluetoothAdapter defaultAdapter = BluetoothAdapter.getDefaultAdapter();
if (defaultAdapter != null) {
if (defaultAdapter.isEnabled()) {
requestPermission();
} else {
Toast.makeText(this, getResources().getString(R.string.ble_connect), 0).show();
startActivity(new Intent("android.bluetooth.adapter.action.REQUEST_ENABLE"));
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
private void requestPermission() {
RxPermissions rxPermissions = new RxPermissions(this);
if (Build.VERSION.SDK_INT >= 31) {
if (!rxPermissions.isGranted("android.permission.ACCESS_FINE_LOCATION") || !rxPermissions.isGranted("android.permission.ACCESS_COARSE_LOCATION")) {
rxPermissions.request(new String[]{"android.permission.ACCESS_FINE_LOCATION", "android.permission.ACCESS_COARSE_LOCATION"}).subscribe(new Consumer() {
public final void accept(Object obj) {
BleScanActivity.this.lambda$requestPermission$0$BleScanActivity((Boolean) obj);
}
});
}
if (!rxPermissions.isGranted("android.permission.BLUETOOTH_SCAN")) {
rxPermissions.request(new String[]{"android.permission.BLUETOOTH_SCAN"}).subscribe(new Consumer() {
public final void accept(Object obj) {
BleScanActivity.this.lambda$requestPermission$1$BleScanActivity((Boolean) obj);
}
});
}
if (rxPermissions.isGranted("android.permission.BLUETOOTH_CONNECT")) {
return;
}
rxPermissions.request(new String[]{"android.permission.BLUETOOTH_CONNECT"}).subscribe(new Consumer() {
public final void accept(Object obj) {
BleScanActivity.this.lambda$requestPermission$2$BleScanActivity((Boolean) obj);
}
});
return;
}
if (rxPermissions.isGranted("android.permission.ACCESS_FINE_LOCATION") && rxPermissions.isGranted("android.permission.ACCESS_COARSE_LOCATION") && rxPermissions.isGranted("android.permission.ACCESS_LOCATION_EXTRA_COMMANDS")) {
return;
}
rxPermissions.request(new String[]{"android.permission.ACCESS_FINE_LOCATION", "android.permission.ACCESS_COARSE_LOCATION", "android.permission.ACCESS_LOCATION_EXTRA_COMMANDS"}).subscribe(new Consumer() {
public final void accept(Object obj) {
BleScanActivity.this.lambda$requestPermission$3$BleScanActivity((Boolean) obj);
}
});
}
public void lambda$requestPermission$0$BleScanActivity(Boolean bool) throws Exception {
if (bool.booleanValue()) {
return;
}
Toast.makeText(this, getString(R.string.open_device_location), 0).show();
}
public void lambda$requestPermission$1$BleScanActivity(Boolean bool) throws Exception {
if (bool.booleanValue()) {
return;
}
Toast.makeText(this, getString(R.string.open_device_scan), 0).show();
}
public void lambda$requestPermission$2$BleScanActivity(Boolean bool) throws Exception {
if (bool.booleanValue()) {
return;
}
Toast.makeText(this, getString(R.string.open_device_connect_ble), 0).show();
}
public void lambda$requestPermission$3$BleScanActivity(Boolean bool) throws Exception {
if (bool.booleanValue()) {
return;
}
Toast.makeText(this, getString(R.string.open_device_scan), 0).show();
}
private void initView() {
this.titleSub.setText(getString(R.string.select_device));
this.tvSearch.setText(getString(R.string.search));
this.list = getIntent().getParcelableArrayListExtra("results");
DevicesAdapter devicesAdapter = new DevicesAdapter(this, this.list);
this.adapter = devicesAdapter;
this.lvDevice.setAdapter((ListAdapter) devicesAdapter);
IntentFilter intentFilter = new IntentFilter("android.bluetooth.adapter.action.STATE_CHANGED");
if (Build.VERSION.SDK_INT >= 33) {
registerReceiver(this.bleStateReceiver, intentFilter, 2);
} else {
registerReceiver(this.bleStateReceiver, intentFilter);
}
IntentFilter intentFilter2 = new IntentFilter(ClosePageReceiver.CLOSE_BLE_SCAN_PAGE_ACTION);
if (Build.VERSION.SDK_INT >= 33) {
registerReceiver(this.closePageReceiver, intentFilter2, 2);
} else {
registerReceiver(this.closePageReceiver, intentFilter2);
}
RxPermissions rxPermissions = new RxPermissions(this);
if (rxPermissions.isGranted("android.permission.ACCESS_COARSE_LOCATION") && rxPermissions.isGranted("android.permission.ACCESS_FINE_LOCATION")) {
this.mkLoader.setVisibility(0);
this.tvSearch.setVisibility(8);
if (this.list.isEmpty()) {
this.lvDevice.setVisibility(8);
this.tvScanNodevice.setVisibility(0);
this.tvScanNodevice.setText(getString(R.string.device_searching));
}
Observable.timer(2L, TimeUnit.SECONDS).subscribe(new Consumer() {
public final void accept(Object obj) {
BleScanActivity.this.lambda$initView$4$BleScanActivity((Long) obj);
}
});
return;
}
rxPermissions.request(new String[]{"android.permission.ACCESS_FINE_LOCATION", "android.permission.ACCESS_COARSE_LOCATION", "android.permission.ACCESS_LOCATION_EXTRA_COMMANDS", "android.permission.BLUETOOTH_ADMIN", "android.permission.BLUETOOTH"}).subscribe(new Consumer() {
public final void accept(Object obj) {
BleScanActivity.this.lambda$initView$6$BleScanActivity((Boolean) obj);
}
});
}
public void lambda$initView$4$BleScanActivity(Long l) throws Exception {
if (((BleScanPersenterImp) this.mPresenter).openBle().booleanValue()) {
((BleScanPersenterImp) this.mPresenter).scan();
initTimer();
}
}
public void lambda$initView$6$BleScanActivity(Boolean bool) throws Exception {
if (!bool.booleanValue()) {
ToastUtil.show(getString(R.string.Please_check_your_permissions), this);
return;
}
this.mkLoader.setVisibility(0);
this.tvSearch.setVisibility(8);
if (this.list.isEmpty()) {
this.lvDevice.setVisibility(8);
this.tvScanNodevice.setVisibility(0);
this.tvScanNodevice.setText(getString(R.string.device_searching));
}
Observable.timer(2L, TimeUnit.SECONDS).subscribe(new Consumer() {
public final void accept(Object obj) {
BleScanActivity.this.lambda$initView$5$BleScanActivity((Long) obj);
}
});
}
public void lambda$initView$5$BleScanActivity(Long l) throws Exception {
if (((BleScanPersenterImp) this.mPresenter).openBle().booleanValue()) {
((BleScanPersenterImp) this.mPresenter).scan();
initTimer();
}
}
@Override
public BleScanPersenterImp createPresenter() {
return new BleScanPersenterImp(this);
}
@Override
protected void onDestroy() {
super.onDestroy();
BleStateReceiver bleStateReceiver = this.bleStateReceiver;
if (bleStateReceiver != null) {
unregisterReceiver(bleStateReceiver);
}
ClosePageReceiver closePageReceiver = this.closePageReceiver;
if (closePageReceiver != null) {
unregisterReceiver(closePageReceiver);
}
Disposable disposable = this.disposable;
if (disposable != null && !disposable.isDisposed()) {
this.disposable.dispose();
this.disposable = null;
}
Disposable disposable2 = this.timerDisposable;
if (disposable2 != null && !disposable2.isDisposed()) {
this.timerDisposable.dispose();
this.timerDisposable = null;
}
((BleScanPersenterImp) this.mPresenter).stopScan();
}
public void initTimer() {
this.timerDisposable = Flowable.timer(20L, TimeUnit.SECONDS).observeOn(AndroidScheduler.mainThread()).subscribe(new Consumer() {
public final void accept(Object obj) {
BleScanActivity.this.lambda$initTimer$7$BleScanActivity((Long) obj);
}
});
}
public void lambda$initTimer$7$BleScanActivity(Long l) throws Exception {
((BleScanPersenterImp) this.mPresenter).stopScan();
this.mkLoader.setVisibility(8);
this.tvSearch.setVisibility(0);
if (this.list.isEmpty()) {
this.lvDevice.setVisibility(8);
this.tvScanNodevice.setVisibility(0);
this.tvScanNodevice.setText(getString(R.string.scan_no_device));
}
}
@Override
public void refreshScanStart() {
runOnUiThread(new Runnable() {
@Override
public final void run() {
BleScanActivity.this.lambda$refreshScanStart$8$BleScanActivity();
}
});
}
public void lambda$refreshScanStart$8$BleScanActivity() {
this.mkLoader.setVisibility(0);
this.tvSearch.setVisibility(8);
if (this.list.isEmpty()) {
this.lvDevice.setVisibility(8);
this.tvScanNodevice.setVisibility(0);
this.tvScanNodevice.setText(getString(R.string.device_searching));
} else {
this.lvDevice.setVisibility(0);
this.tvScanNodevice.setVisibility(8);
}
}
@Override
public void refreshScanResult(List<ScanResult> results) {
for (int i = 0; i < results.size(); i++) {
int i2 = 0;
while (true) {
if (i2 < this.list.size()) {
if (this.list.get(i2).getMac().equals(results.get(i).getDevice().getAddress())) {
break;
} else {
i2++;
}
} else {
this.list.add(new DeviceInfo(results.get(i).getDevice().getName(), results.get(i).getDevice().getAddress(), results.get(i).getRssi()));
this.adapter.notifyDataSetChanged();
this.lvDevice.setVisibility(0);
this.tvScanNodevice.setVisibility(8);
break;
}
}
}
}
@Override
public void refreshScanStop() {
int i = this.scanCount - 1;
this.scanCount = i;
if (i <= 0) {
this.mkLoader.setVisibility(8);
this.tvSearch.setVisibility(0);
if (this.list.isEmpty()) {
this.lvDevice.setVisibility(8);
this.tvScanNodevice.setVisibility(0);
this.tvScanNodevice.setText(getString(R.string.scan_no_device));
return;
} else {
this.lvDevice.setVisibility(0);
this.tvScanNodevice.setVisibility(8);
return;
}
}
System.out.println("扫描重试");
((BleScanPersenterImp) this.mPresenter).scan();
}
@OnClick({R.id.setting})
public void onViewClicked(View view) {
if (CheckClickUtils.isFastClick()) {
return;
}
this.scanCount = 6;
if (((BleScanPersenterImp) this.mPresenter).openBle().booleanValue()) {
((BleScanPersenterImp) this.mPresenter).scan();
initTimer();
}
}
@OnItemClick({R.id.lv_device})
public void onItemClicked(AdapterView<?> parent, View view, int position, long id) {
Intent intent = new Intent(this, (Class<?>) NewApConnectActivity.class);
intent.putExtra("MODEL_TYPE", CmdConstant.W_2);
intent.putExtra(NewApConnectActivity.MODEL_MAC, this.list.get(position).getMac());
startActivity(intent);
}
}