代码之家  ›  专栏  ›  技术社区  ›  Z3R0

蓝牙扫描仪内部服务问题

  •  0
  • Z3R0  · 技术社区  · 7 年前

    **********************************************************************************

    **********************************************************************************

    好吧,我找到了解决办法。。。我已经给了所有的权限 但我不知道为什么我发现,如果我手动添加“访问我的位置”权限,扫描回调就开始工作了。 所以现在我要在启动服务之前在MainActivity中实现权限请求。 这很奇怪,因为我在MainActivity内部执行BLE扫描的其他应用程序中没有遇到相同的问题;我在MainActivity中扫描的另一个应用程序没有请求这个特定的权限,它只需要“BLUETOOTH”和“BLUETOOTH”管理权限。

    (我在我的设备“华为P8 Lite”上试用了Android版本“8.0.0”)

    我已经在一个活动中试用了“蓝牙扫描器”,扫描过程中没有发现任何问题。

    这是我的服务:

    public class BLEService extends Service {
    
        private static final int SCAN_TIME_MILLIS = 5000;
        private static final String MY_MAC = "00:15:85:10:85:3C";
    
        private Handler mHandler;
        private BluetoothAdapter mBluetoothAdapter;
        private BluetoothLeScanner mScanner;
        private ScanCallback mScanCallback;
        private BluetoothGatt mBluetoothGatt;
        private BluetoothGattCallback mGattCallback;
        private int mTxpower;
    
        @Override
        public void onCreate() {
            super.onCreate();
            mHandler = new Handler();
        }
    
        @Override
        public int onStartCommand(Intent intent, int flags, int startId) {
            initAll();
            startScan();
            return START_STICKY;
        }
    
        @Nullable
        @Override
        public IBinder onBind(Intent intent) {
            return null;
        }
    
        private void startScan(){
            mScanner.startScan(mScanCallback);
            mHandler.postDelayed(new Runnable() {
                @Override
                public void run() {
                    stopScan();
                }
            }, SCAN_TIME_MILLIS);
        }
    
        private void stopScan(){
            mScanner.stopScan(mScanCallback);
            mHandler.postDelayed(new Runnable() {
                @Override
                public void run() {
                    startScan();
                }
            }, SCAN_TIME_MILLIS);
        }
    
        private void initAll(){
            initBluetoothAdapter();
            initBluetoothLeScanner();
            initBluetoothScanCallback();
            initGattCallback();
        }
    
        private void initBluetoothAdapter(){
            final BluetoothManager bluetoothManager = (BluetoothManager) getBaseContext().getSystemService(Context.BLUETOOTH_SERVICE);
            mBluetoothAdapter = bluetoothManager.getAdapter();
            mBluetoothAdapter.startDiscovery();
        }
    
        private void initBluetoothLeScanner(){
            mScanner = mBluetoothAdapter.getBluetoothLeScanner();
        }
    
        private void initBluetoothScanCallback(){
            mScanCallback = new ScanCallback() {
                @Override
                public void onScanResult(int callbackType, ScanResult result) {
                    super.onScanResult(callbackType, result);
                }
    
                @Override
                public void onBatchScanResults(List<ScanResult> results) {
                    super.onBatchScanResults(results);
                }
    
                @Override
                public void onScanFailed(int errorCode) {
                    super.onScanFailed(errorCode);
                }
            };
        }
    
        private void initGattCallback(){
            mGattCallback = new BluetoothGattCallback() {
                @Override
                public void onConnectionStateChange(BluetoothGatt gatt, int status, int newState) {
                    super.onConnectionStateChange(gatt, status, newState);
                }
    
                @Override
                public void onReadRemoteRssi(BluetoothGatt gatt, int rssi, int status) {
                    super.onReadRemoteRssi(gatt, rssi, status);
                }
            };
        }
    }
    

    I/蓝牙适配器:getBluetoothLeScanner

    D/BluetoothLeScanner:onScannerRegistered()-状态=0 scannerId=7 mScannerId=0

    所以看起来扫描是正确开始的,但是如果我尝试调试扫描的回调,它就永远不会到达断点。

    0 回复  |  直到 6 年前