override/vendor/mediatek/proprietary/packages/apps/Bluetooth/src/com/android/bluetooth/gatt/GattService.java
void registerScanner(方法中
源码把下面的注掉就行,意思就是30秒内太频繁搜索就不成功,无法注册扫描,直接注释完执行下一句mScanManager.registerScanner(uuid);
if (app != null && app.isScanningTooFrequently()
&& checkCallingOrSelfPermission(BLUETOOTH_PRIVILEGED) != PERMISSION_GRANTED) {
Log.e(TAG, "App '" + app.appName + "' is scanning too frequently");
callback.onScannerRegistered(ScanCallback.SCAN_FAILED_SCANNING_TOO_FREQUENTLY, -1);
return;
}
原理:
主要是isScanningTooFrequently这个方法,在./src/com/android/bluetooth/gatt/AppScanStats.java
源码:
synchronized boolean isScanningTooFrequently() {
if (lastScans.size() < NUM_SCAN_DURATIONS_KEPT) {
return false;
}
return (SystemClock.elapsedRealtime() - lastScans.get(0).timestamp)
< EXCESSIVE_SCANNING_PERIOD_MS;
}
已经定义好了
static final int NUM_SCAN_DURATIONS_KEPT = 5;
static final long EXCESSIVE_SCANNING_PERIOD_MS = 30 * 1000;