java - Ble 扫描设备 Android

标签 java android bluetooth-lowenergy

我正在扫描 BLE 设备。 这是我的代码;

public class MainActivity extends AppCompatActivity {



private boolean mScanning;Button ara ;
ListView lw;
private BluetoothAdapter mBluetoothAdapter;
private int REQUEST_ENABLE_BT = 1;
private Handler mHandler;
private static final long SCAN_PERIOD = 10000;
private BluetoothLeScanner mLEScanner;
private ScanSettings settings;
private List<ScanFilter> filters;
private BluetoothGatt mGatt;
private ArrayList<String> deviceListesi = new ArrayList<String>();
private ArrayList<String> mDeviceStore = new ArrayList<String>();
private ArrayAdapter<String> deviceAdapter ;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    mHandler = new Handler();
    if (!getPackageManager().hasSystemFeature(PackageManager.FEATURE_BLUETOOTH_LE)) {
        Toast.makeText(this, "BLE Not Supported",
                Toast.LENGTH_SHORT).show();
        finish();
    }
    final BluetoothManager bluetoothManager =
            (BluetoothManager) getSystemService(Context.BLUETOOTH_SERVICE);
    mBluetoothAdapter = bluetoothManager.getAdapter();
    lw = (ListView) findViewById(R.id.listview);
    ara = (Button) findViewById(R.id.button2);
    deviceAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, android.R.id.text1, deviceListesi);
    mBluetoothAdapter.startDiscovery();
    ara.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            scanLeDevice(true);
        }
    });
}
private final BluetoothAdapter.LeScanCallback mLeScanCallback = new BluetoothAdapter.LeScanCallback() {
    @Override
    public void onLeScan(final BluetoothDevice device, final int rssi, final byte[] scanRecord) {
        System.out.println("Buradayım mmmmmmmmmmmm");
        final String deviceIsim = device.getName()+" "+device.getAddress();
        Toast.makeText(getApplicationContext(),deviceIsim,Toast.LENGTH_SHORT).show();
        mDeviceStore.add(deviceIsim);


        for (final String leDevice : mDeviceStore) {
                deviceListesi.add(leDevice);

        }

        runOnUiThread(new Runnable() {
            @Override
            public void run() {
               lw.setAdapter(deviceAdapter);

            }
        });
    }
};
public void scanLeDevice( final boolean enable) {
    if (enable) {
        if (mScanning) {
            return;
        }
        Log.d("TAG", "~ Starting Scan");
        // Stops scanning after a pre-defined scan period.

            mHandler.postDelayed(new Runnable() {
                @Override
                public void run() {
                    Log.d("TAG", "~ Stopping Scan (timeout)");
                    mScanning = false;
                    mBluetoothAdapter.stopLeScan(mLeScanCallback);
                }
            }, SCAN_PERIOD);

        mScanning = true;
        mBluetoothAdapter.startLeScan(mLeScanCallback);
    } else {
        Log.d("TAG", "~ Stopping Scan");
        mScanning = false;
        mBluetoothAdapter.stopLeScan(mLeScanCallback);
    }
}

}

我有 ListView ,但没有发生任何事情?这是 Android 监视器打印;

D/TAG: ~ Starting Scan D/TAG: ~ Stopping Scan (timeout) D/BluetoothAdapter: stopLeScan() D/BluetoothAdapter: scan not started yet

我哪里做错了?

最佳答案

删除行

mBluetoothAdapter.startDiscovery();

蓝牙 LE 和“旧”蓝牙是不同的东西。你不能把两者混为一谈。

关于java - Ble 扫描设备 Android,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42613279/

相关文章:

android - 本地通知的ID是否需要全局唯一?

Android 短信发送失败通知 : false positive

bluetooth-lowenergy - BTLE 特征值字节数过多

java - 在 Jboss 中部署一个 jar

java - 在 JCC 模块中包含系统类

Java:JDialog 关闭问题

android - 已发布错误通知 - 无法为 : StatusBarNotification 展开 RemoteViews

java - Maven 在目标文件夹中解压 war

ios - 在哪里可以找到 BR-LE4.0-S2A 技术规范。即服务和特征的 UUID 列表?

swift - 通过 ios 应用程序快速将数据写入蓝牙设备