点扫描停止后一段时间怎么还在打印设备信息?
来源: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)为了统一版本的兼容性
相似问题