点扫描停止后一段时间怎么还在打印设备信息?
来源: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回答
1、你在mLeScanner.stopScan(scanCallback);代码上下一个断点,停止时跟踪下代码看有没有被执行
2、BluetoothLeScanner.startScan(List, ScanSettings, ScanCallback)是为了支持Android L版本推出的用于添加满足条件的扫描,建议你这里把startScan(ScanCallback)和stopScan(ScanCallback)为了统一版本的兼容性
相似问题