Здравствуйте, я работаю над простым приложением для сканирования BLE с java, но оно не работает.
Я обратился к разработчикам https://github.com/benlc/ble, android и завершил исходный код code.
import androidx.appcompat.app.AppCompatActivity;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothManager;
import android.bluetooth.le.BluetoothLeScanner;
import android.bluetooth.le.ScanCallback;
import android.bluetooth.le.ScanResult;
import android.content.Context;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
import java.util.ArrayList;
import java.util.List;
public class MainActivity extends AppCompatActivity {
private Button btnScanAdvStart;
private ArrayList<ItemDevice> arrayList;
private LeDeviceListAdapter leDeviceListAdapter;
private RecyclerView recyclerViewDevice;
private LinearLayoutManager linearLayoutManager;
private BluetoothAdapter mBluetoothAdapter;
private BluetoothLeScanner mBluetoothLeScanner;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btnScanAdvStart = findViewById(R.id.btn_start);
recyclerViewDevice = findViewById(R.id.rv_device);
linearLayoutManager = new LinearLayoutManager(this);
recyclerViewDevice.setLayoutManager(linearLayoutManager);
arrayList = new ArrayList<>();
leDeviceListAdapter = new LeDeviceListAdapter(arrayList);
recyclerViewDevice.setAdapter(leDeviceListAdapter);
final BluetoothManager bluetoothManager = (BluetoothManager) getSystemService(Context.BLUETOOTH_SERVICE);
mBluetoothAdapter = bluetoothManager.getAdapter();
btnScanAdvStart.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
startReceiving();
}
});
}
@Override protected void onDestroy() {
super.onDestroy();
stopReceiving();
}
private ScanCallback mScanCallback = new ScanCallback() {
@Override
public void onScanResult(int callbackType, ScanResult result) {
super.onScanResult(callbackType, result);
ItemDevice item = new ItemDevice(
result.getDevice().getName(),
result.getDevice().getAddress(),
result.getRssi(),
result.getTimestampNanos());
arrayList.add(item);
leDeviceListAdapter.notifyDataSetChanged();
}
@Override
public void onBatchScanResults(List<ScanResult> results) {
super.onBatchScanResults(results);
}
@Override public void onScanFailed(int errorCode) {
super.onScanFailed(errorCode);
Toast.makeText(MainActivity.this, "Scan fail", Toast.LENGTH_SHORT).show();
}
};
private void startReceiving() {
mBluetoothLeScanner = mBluetoothAdapter.getBluetoothLeScanner();
mBluetoothLeScanner.startScan(mScanCallback);
}
private void stopReceiving() {
mBluetoothLeScanner.stopScan(mScanCallback);
}
}
также разрешение добавлено в файл манифеста
<uses-permission android:name="android.permission.BLUETOOTH"/>
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
Я хочу знать, почему это не работает и как заставить его работать. Я проверил ScanResult с всплывающим сообщением, но он не показывает никаких результатов ...