안드로이드 스튜디오를 처음 접하고 안드로이드ble스캔 어플 예제를 보고 열심히 공부하는 중입니다. 그런데 스캔을 진행하는 부분까지 만들고 테스트를 해보려고 하는데 어플은 정상 실행이 되는데 스캔 버튼을 클릭하면 어플이 강제종료 됩니다. 오류 내용은
E/BoostFramework: BoostFramework() : Exception_1 = java.lang.ClassNotFoundException: Didn't find class "com.qualcomm.qti.Performance" on path: DexPathList[[],nativeLibraryDirectories=[/system/lib64, /vendor/lib64]]
E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.myapplication, PID: 15923
java.lang.NullPointerException: Attempt to invoke virtual method 'void android.bluetooth.le.BluetoothLeScanner.startScan(java.util.List, android.bluetooth.le.ScanSettings, android.bluetooth.le.ScanCallback)' on a null object reference
at com.example.myapplication.MainActivity.startScan(MainActivity.java:182)
at com.example.myapplication.MainActivity.lambda$onCreate$0$MainActivity(MainActivity.java:141)
at com.example.myapplication.-$$Lambda$MainActivity$mssl4La-mhhX0ttBjD5v7QdktdI.onClick(lambda)
이렇게 나오는데 NullPointerException오류라고 검색을 계속 해보았는데 제 소스코드에서 어떻게 수정해서 에러를 잡아야할 지 막막해서 도움 요청 드립니다.
제 MainActivity 소스입니다. 여기가 오류가 발생하는 부분입니다.
이 두부분에서 오류가 발생한다고 나오고 아래는 전체 소스는 첨부가 안되서 OnCreate 부분과 startScan부분 첨부합니다.
btn_scan_.setOnClickListener((v) -> {startScan(v); });
ble_scanner_.startScan(filters, settings, scan_cb_);
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//// get instances of gui objects
// status textview
tv_status_= findViewById( R.id.tv_status );
// read textview
tv_read_= findViewById( R.id.tv_read );
// scan button
btn_scan_= findViewById( R.id.btn_scan );
// stop button
btn_stop_= findViewById( R.id.btn_stop );
// send button
btn_send_= findViewById( R.id.btn_send );
// show button
btn_show_= findViewById( R.id.btn_show );
// ble manager
BluetoothManager ble_manager;
ble_manager = (BluetoothManager)getSystemService(Context.BLUETOOTH_SERVICE);
// set ble adapter
ble_adapter_ = ble_manager.getAdapter();
btn_scan_.setOnClickListener((v) -> {startScan(v); });
}
//start scan
private void startScan(View v) {
tv_status_.setText("Scanning...");
// check ble adapter and ble enabled
if(ble_adapter_ == null || !ble_adapter_.isEnabled()){
requestEnableBLE();
tv_status_.setText("Scanning Failed: ble not enabled");
return;
}
//Set scanfilter
//creat filter list
List<ScanFilter> filters = new ArrayList<>();
// create a scan filter with device mac address
ScanFilter scan_filter = new ScanFilter.Builder().setDeviceAddress(MAC_ADDR).build();
// add filter to list
filters.add(scan_filter);
//// scan settings
// set low power scan mode
ScanSettings settings= new ScanSettings.Builder().setScanMode( ScanSettings.SCAN_MODE_LOW_POWER ).build();
// Scan callback
scan_results_ = new HashMap<>();
scan_cb_= new BLEScanCallback(scan_results_);
//now ready to scan
//start scan
ble_scanner_.startScan(filters, settings, scan_cb_);
//set scanning flag
is_scanning_ = true;
}