Skip to content

Commit

Permalink
添加ble相关操作失败的错误码
Browse files Browse the repository at this point in the history
  • Loading branch information
aicareles committed Apr 24, 2020
1 parent 7b205a7 commit aee1460
Show file tree
Hide file tree
Showing 25 changed files with 530 additions and 443 deletions.
Binary file modified .idea/caches/build_file_checksums.ser
Binary file not shown.
3 changes: 1 addition & 2 deletions app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -51,8 +51,7 @@
android:screenOrientation="portrait" />

<activity android:name=".ui.DeviceInfoActivity"
android:screenOrientation="portrait"
android:parentActivityName=".ui.BleActivity"/>
android:screenOrientation="portrait" />

</application>

Expand Down
37 changes: 29 additions & 8 deletions app/src/main/java/com/example/admin/mybledemo/MyApplication.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,9 @@
import android.app.Application;
import android.bluetooth.le.ScanFilter;
import android.content.Context;
import android.os.Build;
import android.os.ParcelUuid;
import android.support.annotation.RequiresApi;

import com.pgyersdk.Pgyer;
import com.pgyersdk.PgyerActivityManager;
Expand All @@ -14,6 +16,7 @@
import java.util.UUID;

import cn.com.heaton.blelibrary.ble.Ble;
import cn.com.heaton.blelibrary.ble.BleLog;
import cn.com.heaton.blelibrary.ble.model.BleDevice;
import cn.com.heaton.blelibrary.ble.model.BleFactory;
import cn.com.heaton.blelibrary.ble.utils.UuidUtils;
Expand Down Expand Up @@ -60,27 +63,45 @@ public void onCreate() {

//初始化蓝牙
private void initBle() {
/*ScanFilter filter = new ScanFilter.Builder()
.setServiceUuid(ParcelUuid.fromString(UuidUtils.uuid16To128("fff0")))//8.0以上手机后台扫描,必须开启
.build();*/
Ble.options().setLogBleEnable(true)//设置是否输出打印蓝牙日志
ScanFilter scanFilter = null;
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP) {
scanFilter = new ScanFilter.Builder()
// .setServiceUuid(ParcelUuid.fromString(UuidUtils.uuid16To128("fff0")))//8.0以上手机后台扫描,必须开启
// .setDeviceAddress("00:3D:00:00:00:18")
// .setDeviceName("QCAR")
.build();
}
Ble.options()
.setLogBleEnable(true)//设置是否输出打印蓝牙日志
.setThrowBleException(true)//设置是否抛出蓝牙异常
.setLogTAG("AndroidBLE")//设置全局蓝牙操作日志TAG
.setAutoConnect(false)//设置是否自动连接
.setIgnoreRepeat(false)//设置是否过滤扫描到的设备(已扫描到的不会再次扫描)
.setConnectFailedRetryCount(3)
.setConnectFailedRetryCount(3)//连接异常时(如蓝牙协议栈错误),重新连接次数
.setConnectTimeout(10 * 1000)//设置连接超时时长
.setScanPeriod(12 * 1000)//设置扫描时长
.setUuidService(UUID.fromString(UuidUtils.uuid16To128("fee9", true)))//设置主服务的uuid
.setUuidWriteCha(UUID.fromString("d44bc439-abfd-45a2-b575-925416129600"))//设置可写特征的uuid
.setMaxConnectNum(7)//最大连接数量
.setScanFilter(scanFilter)
.setUuidService(UUID.fromString(UuidUtils.uuid16To128("fd00")))//设置主服务的uuid
.setUuidWriteCha(UUID.fromString(UuidUtils.uuid16To128("fd01")))//设置可写特征的uuid
.setFactory(new BleFactory() {//实现自定义BleDevice时必须设置
@Override
public BleRssiDevice create(String address, String name) {
return new BleRssiDevice(address, name);//自定义BleDevice的子类
}
})
.setBleWrapperCallback(new MyBleWrapperCallback())
.create(mApplication);
.create(mApplication, new Ble.InitCallback() {
@Override
public void success() {
BleLog.e("MainApplication", "初始化成功");
}

@Override
public void failed(int failedCode) {
BleLog.e("MainApplication", "初始化失败:" + failedCode);
}
});
}

private void initPgy() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -102,9 +102,10 @@ public void onClick(View v) {
tv_uuid.setText(String.format("Service Uuids: %s", TextUtils.join(", ", serviceUuids)));
}
String localName = scanRecord.getDeviceName();
if (!TextUtils.isEmpty(localName)){
tv_local_name.setText("Local Name: "+localName);
if (TextUtils.isEmpty(localName)){
localName = device.getBleName();
}
tv_local_name.setText("Local Name: "+localName);
if (scanRecord.getTxPowerLevel()>-100 && scanRecord.getTxPowerLevel()<=0){
tv_tx_power_level.setText(String.format("Tx Power Level: %d dBm", scanRecord.getTxPowerLevel()));
}
Expand Down
21 changes: 6 additions & 15 deletions app/src/main/java/com/example/admin/mybledemo/ui/BleActivity.java
Original file line number Diff line number Diff line change
Expand Up @@ -220,12 +220,10 @@ private void rescan() {
private BleScanCallback<BleRssiDevice> scanCallback = new BleScanCallback<BleRssiDevice>() {
@Override
public void onLeScan(final BleRssiDevice device, int rssi, byte[] scanRecord) {
BleLog.i(TAG, "onLeScan: " + device.getBleName());
if (TextUtils.isEmpty(device.getBleName())) return;
synchronized (ble.getLocker()) {
for (int i = 0; i < bleRssiDevices.size(); i++) {
BleRssiDevice rssiDevice = bleRssiDevices.get(i);
// BleDevice bleDevice = rssiDevice.getDevice();
if (TextUtils.equals(rssiDevice.getBleAddress(), device.getBleAddress())){
if (rssiDevice.getRssi() != rssi && System.currentTimeMillis()-rssiDevice.getRssiUpdateTime() >1000L){
rssiDevice.setRssiUpdateTime(System.currentTimeMillis());
Expand All @@ -235,7 +233,6 @@ public void onLeScan(final BleRssiDevice device, int rssi, byte[] scanRecord) {
return;
}
}
// BleRssiDevice rssiDevice = new BleRssiDevice(device, ScanRecord.parseFromBytes(scanRecord), rssi);
device.setScanRecord(ScanRecord.parseFromBytes(scanRecord));
device.setRssi(rssi);
bleRssiDevices.add(device);
Expand All @@ -254,6 +251,12 @@ public void onStop() {
super.onStop();
stopBannerLoadingAnim();
}

@Override
public void onScanFailed(int errorCode) {
super.onScanFailed(errorCode);
Log.e(TAG, "onScanFailed: "+errorCode);
}
};

public void startBannerLoadingAnim() {
Expand Down Expand Up @@ -312,16 +315,4 @@ protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
}

@Override
protected void onDestroy() {
super.onDestroy();
/*if (ble != null) {
ble.released();
scanCallback = null;
connectCallback = null;
writeEntityCallback = null;
bleNotiftCallback = null;
}*/
}

}
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package com.example.admin.mybledemo.ui;

import android.bluetooth.BluetoothGatt;
import android.bluetooth.BluetoothGattCharacteristic;
import android.bluetooth.BluetoothGattService;
import android.os.Bundle;
import android.support.annotation.Nullable;
Expand All @@ -11,21 +10,17 @@
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.util.Log;
import android.view.MenuItem;

import com.example.admin.mybledemo.R;
import com.example.admin.mybledemo.Utils;
import com.example.admin.mybledemo.adapter.DeviceInfoAdapter;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.UUID;

import cn.com.heaton.blelibrary.ble.Ble;
import cn.com.heaton.blelibrary.ble.BleLog;
import cn.com.heaton.blelibrary.ble.callback.BleConnectCallback;
import cn.com.heaton.blelibrary.ble.callback.BleNotiftCallback;
import cn.com.heaton.blelibrary.ble.model.BleDevice;
import cn.com.heaton.blelibrary.ble.utils.ByteUtils;

public class DeviceInfoActivity extends AppCompatActivity {

Expand All @@ -50,13 +45,7 @@ private void initData() {
ble = Ble.getInstance();
bleDevice = getIntent().getParcelableExtra(EXTRA_TAG);
if (bleDevice == null) return;
if (bleDevice.isConnected()) {
ble.disconnect(bleDevice);
} else if (bleDevice.isConnectting()) {
ble.cancelConnectting(bleDevice);
} else if (bleDevice.isDisconnected()) {
ble.connect(bleDevice, connectCallback);
}
ble.connect(bleDevice, connectCallback);
}

private void initView() {
Expand All @@ -80,7 +69,7 @@ public void onConnectionChanged(BleDevice device) {
Log.e(TAG, "onConnectionChanged: " + device.getConnectionState());
if (device.isConnected()) {
actionBar.setSubtitle("已连接");
}else if (device.isConnectting()){
}else if (device.isConnecting()){
actionBar.setSubtitle("连接中...");
}
else if (device.isDisconnected()){
Expand Down Expand Up @@ -142,17 +131,30 @@ public void run() {
@Override
public void onNotifySuccess(BleDevice device) {
super.onNotifySuccess(device);
BleLog.e(TAG, "onNotifySuccess: "+device.getBleName());
}
});*/
}
};

@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:// 点击返回图标事件
this.finish();
default:
return super.onOptionsItemSelected(item);
}
}


@Override
protected void onDestroy() {
super.onDestroy();
ble.cancelCallback(connectCallback);
if (bleDevice != null){
if (bleDevice.isConnectting()){
ble.cancelConnectting(bleDevice);
if (bleDevice.isConnecting()){
ble.cancelConnecting(bleDevice);
}else if (bleDevice.isConnected()){
ble.disconnect(bleDevice);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,10 +13,15 @@ import cn.com.heaton.blelibrary.ble.utils.ByteUtils
*/

object AppProtocol {
val TAG = "AppProtocol"

private val bleDeviceBleWriteCallback = object :BleWriteCallback<BleDevice>() {
override fun onWriteSuccess(device: BleDevice?, characteristic: BluetoothGattCharacteristic?) {
BleLog.w("AppProtocol", "onWriteSuccess: ")
BleLog.w(TAG, "onWriteSuccess: ")
}

override fun onWiteFailed(device: BleDevice?, failedCode: Int) {
BleLog.e(TAG, "onWiteFailed:$failedCode")
}

}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ class DeviceAdapter(var items: List<BleDevice>) : RecyclerView.Adapter<DeviceAda
holder.itemView.device_address.text = bleAddress
when {
device.isConnected -> holder.itemView.state.text = "已连接"
device.isConnectting -> holder.itemView.state.text = "正在连接中..."
device.isConnecting -> holder.itemView.state.text = "正在连接中..."
else -> holder.itemView.state.text = "未连接"
}
}
Expand Down
44 changes: 32 additions & 12 deletions appkotlin/src/main/java/com/i502tech/appkotlin/MainActivity.kt
Original file line number Diff line number Diff line change
Expand Up @@ -8,23 +8,29 @@ import android.content.DialogInterface
import android.content.Intent
import android.content.pm.PackageManager
import android.os.Build
import android.support.v7.app.AppCompatActivity
import android.os.Bundle
import android.support.v4.app.ActivityCompat
import android.support.v4.content.ContextCompat
import android.support.v7.app.AppCompatActivity
import android.support.v7.widget.LinearLayoutManager
import android.text.TextUtils
import android.util.Log
import cn.com.heaton.blelibrary.ble.Ble
import cn.com.heaton.blelibrary.ble.BleLog
import cn.com.heaton.blelibrary.ble.callback.*
import cn.com.heaton.blelibrary.ble.model.BleDevice
import cn.com.heaton.blelibrary.ble.utils.ByteUtils
import cn.com.heaton.blelibrary.ble.utils.UuidUtils
import kotlinx.android.synthetic.main.activity_main.*
import java.io.IOException
import java.util.*

class MainActivity : AppCompatActivity() {
private val REQUESTCODE: Int = 0x01
companion object{
const val TAG = "MainActivity"
const val REQUESTCODE: Int = 0x01
}

private lateinit var mBle: Ble<BleDevice>
private var listDatas = mutableListOf<BleDevice>()
private val adapter = DeviceAdapter(listDatas)
Expand All @@ -33,9 +39,7 @@ class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)

requestBLEPermission()

initView()
initLinsenter()
}
Expand All @@ -60,10 +64,10 @@ class MainActivity : AppCompatActivity() {
if (mBle.connetedDevices.size > 0)
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
//此处第二个参数 不是特定的 比如你也可以设置500 但是如果设备不支持500个字节则会返回最大支持数
mBle.setMTU(mBle.connetedDevices[0].bleAddress, 96, object : BleMtuCallback<BleDevice>() {
mBle.setMTU(mBle.connetedDevices[0].bleAddress, 500, object : BleMtuCallback<BleDevice>() {
override fun onMtuChanged(device: BleDevice, mtu: Int, status: Int) {
super.onMtuChanged(device, mtu, status)
toast("最大支持MTU$mtu")
toast("设置MTU$mtu")
}
})
} else {
Expand All @@ -84,6 +88,11 @@ class MainActivity : AppCompatActivity() {
listDatas.addAll(mBle.connetedDevices)
mBle.startScan(bleScanCallback())
}
/*writeQueue.setOnClickListener {
for(index in 1..200){
mBle.writeQueueDelay(50, RequestTask.newWriteTask(mBle.connetedDevices[0].bleAddress, ByteArray(20)))
}
}*/
}

private fun initView() {
Expand All @@ -94,15 +103,16 @@ class MainActivity : AppCompatActivity() {
device.apply {
if (isConnected){
mBle.disconnect(this)
}else if (!isConnectting){
}else if (!isConnecting){
mBle.connect(this, connectCallback())
}
}
}
}

private fun requestBLEPermission() {
ActivityCompat.requestPermissions(this, arrayOf(Manifest.permission.BLUETOOTH_ADMIN, Manifest.permission.ACCESS_COARSE_LOCATION), REQUESTCODE)
ActivityCompat.requestPermissions(this, arrayOf(Manifest.permission.BLUETOOTH_ADMIN,
Manifest.permission.ACCESS_COARSE_LOCATION), REQUESTCODE)
}


Expand All @@ -115,8 +125,8 @@ class MainActivity : AppCompatActivity() {
connectFailedRetryCount = 3
connectTimeout = 10000L
scanPeriod = 12000L
uuidService = UUID.fromString("0000fee9-0000-1000-8000-00805f9b34fb")
uuidWriteCha = UUID.fromString("d44bc439-abfd-45a2-b575-925416129600")
uuidService = UUID.fromString(UuidUtils.uuid16To128("fd00", true))
uuidWriteCha = UUID.fromString(UuidUtils.uuid16To128("fd01", true))
}.create(applicationContext)
//3、检查蓝牙是否支持及打开
checkBluetoothStatus()
Expand All @@ -142,8 +152,13 @@ class MainActivity : AppCompatActivity() {
private fun bleScanCallback(): BleScanCallback<BleDevice> {
return object : BleScanCallback<BleDevice>() {
override fun onLeScan(device: BleDevice?, rssi: Int, scanRecord: ByteArray?) {
if (TextUtils.isEmpty(device?.bleName)){
return
}
for (d in listDatas) {
if (d.bleAddress == device?.bleAddress)return
if (d.bleAddress == device?.bleAddress){
return
}
}
device?.let {
listDatas.add(it)
Expand Down Expand Up @@ -171,7 +186,8 @@ class MainActivity : AppCompatActivity() {

override fun onReady(device: BleDevice?) {
super.onReady(device)
mBle.startNotify(device, bleNotifyCallback())
// mBle.startNotify(device, bleNotifyCallback())
mBle.enableNotify(device, true, bleNotifyCallback())
}

}
Expand All @@ -183,6 +199,10 @@ class MainActivity : AppCompatActivity() {
BleLog.i("收到硬件数据>>>>>onChanged:",ByteUtils.toHexString(characteristic?.value))
}

override fun onNotifySuccess(device: BleDevice?) {
super.onNotifySuccess(device)
BleLog.i(TAG, "设置通知成功:"+device?.bleName)
}
}
}

Expand Down
Loading

0 comments on commit aee1460

Please sign in to comment.