点扫描停止后一段时间怎么还在打印设备信息?

来源:3-4 蓝牙4.0扫描附近设备

李小明同学

2018-12-04 17:08:57

package com.a81981.bledemo;

import android.Manifest;
import android.annotation.SuppressLint;
import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothDevice;
import android.bluetooth.BluetoothManager;
import android.bluetooth.le.BluetoothLeScanner;
import android.bluetooth.le.ScanCallback;
import android.bluetooth.le.ScanResult;
import android.bluetooth.le.ScanSettings;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.support.v4.app.ActivityCompat;
import android.support.v4.content.ContextCompat;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {

    private Button btnScan;
    private TextView mShowTxt;

    private BluetoothAdapter mBluetoothAdapter;
    private BluetoothLeScanner mLeScanner;
    private ScanSettings mScanSettings;
    //是否在扫描
    private boolean mIsScanning =false;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        setLimits();
        initViews();

        final BluetoothManager bluetoothManager= (BluetoothManager) getSystemService(Context.BLUETOOTH_SERVICE);
        assert bluetoothManager != null;
        mBluetoothAdapter = bluetoothManager.getAdapter();
        if(mBluetoothAdapter==null)
        {
            T.showToast("手机不支持蓝牙");
            finish();
        }
        if(!getPackageManager().hasSystemFeature(PackageManager.FEATURE_BLUETOOTH_LE))
        {
            T.showToast("手机不支持BLE");
            finish();
        }


        mLeScanner=mBluetoothAdapter.getBluetoothLeScanner();
        mScanSettings=new ScanSettings.Builder()
                .setScanMode(ScanSettings.SCAN_MODE_LOW_LATENCY)
                .setReportDelay(3000)
                .build();
    }

    @Override
    protected void onResume() {
        super.onResume();
        if(mBluetoothAdapter!=null&&!mBluetoothAdapter.isEnabled())
        {
            //打开蓝牙
            Intent intent=new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
            startActivity(intent);
        }
    }

    private void initViews() {
        btnScan = findViewById(R.id.btn_scan);
        mShowTxt=findViewById(R.id.show_txt);
        btnScan.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (!mIsScanning) {
                    btnScan.setText("停止扫描");
                    mIsScanning = true;
                    scan(true);
                }
                else{
                    btnScan.setText("开始扫描");
                    mIsScanning =false;
                    scan(false);
                }
            }
        });
    }

    private void scan(boolean enable) {
        final ScanCallback scanCallback=new ScanCallback() {
            @SuppressLint("SetTextI18n")
            @Override
            public void onScanResult(int callbackType, ScanResult result) {
                super.onScanResult(callbackType, result);
                //获取设备
                BluetoothDevice device=result.getDevice();
                mShowTxt.setText(device.getName() + " "+device.getAddress());
            }
        };
        if(enable)
        {
            mLeScanner.startScan(null, mScanSettings, scanCallback);
        }
        else
        {
            mLeScanner.stopScan(scanCallback);
        }
    }

    private void setLimits(){
        boolean isAllGranted=checkPermissionAll(new String[]{
                Manifest.permission.ACCESS_COARSE_LOCATION
        });
        if(!isAllGranted){
            ActivityCompat.requestPermissions(
                    this,
                    new String[]{
                            Manifest.permission.ACCESS_COARSE_LOCATION
                    },0);
        }
    }

    private boolean checkPermissionAll(String[] strings) {
        for( String permission:strings){
            if(ContextCompat.checkSelfPermission(this,permission)!= PackageManager.PERMISSION_GRANTED)
                return false;
        }
        return true;
    }
}

还有下面这样可以吗

mLeScanner.startScan(null, mScanSettings, scanCallback);


写回答

1回答

irista23

2018-12-04

1、你在mLeScanner.stopScan(scanCallback);代码上下一个断点,停止时跟踪下代码看有没有被执行

2、BluetoothLeScanner.startScan(List, ScanSettings, ScanCallback)是为了支持Android L版本推出的用于添加满足条件的扫描,建议你这里把startScan(ScanCallback)和stopScan(ScanCallback)为了统一版本的兼容性

0

0 学习 · 687 问题

查看课程