Android BLE Bluetooth 검색 실패 데이터 및 해결 방법
저소모 블루투스를 개발하는 과정에서 안드로이드 시스템의 끊임없는 업그레이드와 최적화로 인해 BLE에 대한 개발도 업그레이드 과정에서 서로 다른 문제에 부딪힐 수 있다.검색 열기에 대한 요약은 다음과 같습니다.
E/BtGatt.GattService: App 'com.bluetooth.app' is scanning too frequently
这时问题就是你开启扫描功能太频繁了,导致系统吃不消导致的,遇到这种情况你需要在关闭扫描之后至少停止2秒钟,然后再次调用开启扫描方法,开启成功。
-
在Android 6.0及以上版本中开启蓝牙扫描后扫描不到数据问题
在Android 6.0之前的版本中能够完美运行,但换到Android 6.0 及以上系统的手机运行时搜索不到数据。
这是因为在Android 6.0及以上系统中低功耗蓝牙添加了距离检测功能,所以扫描时需要开启定位功能权限,在更高版本中甚至需要开启精准定位权限
코드에서도 동적 권한을 신청해야 한다
//
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M &&
checkSelfPermission(Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED &&
checkSelfPermission(Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED &&
checkSelfPermission(Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED ) {
requestPermissions(new String[]{Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.ACCESS_FINE_LOCATION ,
Manifest.permission.CAMERA,}, PERMISSIONS_REQUEST_CODE_ACCESS);
}
각종 권한 문제를 해결한 후 안드로이드 6.0 이전에 스캔해도 문제가 없고 이후에 스캔하지 않아도 문제가 해결된다
BtGatt.ScanManager: Cannot start unfiltered scan in screen-off. This scan will be resumed later: 9
이것은 당신이 설정한 스캔 방법이 스캔 필터를 설정하지 않은 문제이기 때문입니다. 안드로이드 8.1 및 이상 시스템에서 백엔드 모드에서 스캔을 하려면 반드시 관련 스캔 필터를 연결해야 백엔드 모드에서 완벽하게 실행할 수 있습니다.
//
private List scanFilterList;
//
private ScanFilter.Builder scanFilterBuilder;
//
private ScanSettings.Builder scanSettingBuilder;
private List buildScanFilters() {
scanFilterList = new ArrayList<>();
// uuid GATT UUID
scanFilterBuilder = new ScanFilter.Builder();
ParcelUuid parcelUuidMask = ParcelUuid.fromString("FFFFFFFF-FFFF-FFFF-FFFF-FFFFFFFFFFFF");
ParcelUuid parcelUuid = ParcelUuid.fromString("00001800-0000-1000-8000-00805f9b34fb");
scanFilterBuilder.setServiceUuid(parcelUuid, parcelUuidMask);
scanFilterList.add(scanFilterBuilder.build());
return scanFilterList;
}
private ScanSettings buildScanSettings() {
scanSettingBuilder = new ScanSettings.Builder();
// LE 。
// 。
scanSettingBuilder.setScanMode(ScanSettings.SCAN_MODE_LOW_LATENCY);
// LE
// , ,hw . / 。
scanSettingBuilder.setMatchMode(ScanSettings.MATCH_MODE_AGGRESSIVE);
// LE
// 。 ,
scanSettingBuilder.setCallbackType(ScanSettings.CALLBACK_TYPE_ALL_MATCHES);
return scanSettingBuilder.build();
}
//
mBluetoothAdapter.getBluetoothLeScanner().startScan(buildScanFilters(), buildScanSettings(), mLeScanCallback);
실제 상황에 따라 상응하는 매개 변수 설정을 설정하고 필터 설정과 스캐닝 설정을 추가하는 스캐닝 방법을 호출한다. 즉, 백엔드 상태에서 스캐닝 기능을 시작할 수 있다.
본고를 통해 개발 과정에서 겪은 오픈 스캐너가 서로 다른 버전에서 겪은 문제점과 해결 방법을 기록한다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
안드로이드 앱의 첫 설치가 완료된 후 설치 인터페이스에서 바로'열기'앱을 누르고 홈 키를 누르면 데스크톱으로 돌아가 앱에 다시 들어가 launcher activity를 반복하는 문제 해결문제 설명 제목에서 말한 바와 같이 최근에 실례화된 launcher activity가 중복되어 비참하게 되었는데, 이 문제는 어떤 표현이 있습니까?다음과 같습니다. 패키지 설치창에 앱을 설치한 후 바로 앱을 켜고Ac...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.