接收广播意图时出错 { act=android.bluetooth.device.action.FOUND flg=0x10}

Mar*_*rco 3 android bluetooth android-bluetooth

我搜索了一下,没有发现任何类似的东西。我正在 Android 中使用蓝牙开发两个设备之间的连接。在 ACTION_FOUND 方法上,当我尝试使设备信息出现在 listView 上时,我在 logcat 上收到该错误。

\n\n

DesafioActivity: \n 公共类 DesafioActivity 扩展 Activity {

\n\n
  private TextView nomeDispositivo;\n  private TextView MAC_Adress;\n  private BluetoothAdapter bthAdapter = BluetoothAdapter.getDefaultAdapter();\n  private ArrayAdapter<String> bthDispositivosArea;\n\n  private ListView lv_devicesArea;\n  private IntentFilter filter;\n\n  private Button btn_servidor, btn_cliente;\n\n  @Override\n  public void onCreate(Bundle savedInstanceState) {\n    super.onCreate(savedInstanceState);\n    setContentView(R.layout.activity_desafio);\n\n    nomeDispositivo = (TextView)findViewById(id.tv_apresentaNomeDispositivo);\n    MAC_Adress = (TextView)findViewById(id.tv_apresentaMacAdress);\n    lv_devicesArea = (ListView)findViewById(id.lv_apresentaDispositivosDescobertos);\n\n    VerificarEstadoBth();\n\n    nomeDispositivo.setText(bthAdapter.getName());\n    MAC_Adress.setText(bthAdapter.getAddress());\n\n    //Regista o BroadcastReceiver\n\n    IntentFilter filter = new IntentFilter(BluetoothDevice.ACTION_FOUND);\n    filter.addAction(BluetoothDevice.ACTION_UUID);\n    filter.addAction(BluetoothAdapter.ACTION_DISCOVERY_STARTED);\n    filter.addAction(BluetoothAdapter.ACTION_DISCOVERY_FINISHED);\n    registerReceiver(HandleDiscovery, filter); // Don\'t forget to unregister during onDestroy\n\n    bthAdapter.startDiscovery();\n  }\n\n  public void VerificarEstadoBth(){\n\n    //Bluetooth n\xc3\xa3o suportado \n    if (bthAdapter == null) {\n      Toast.makeText(this, "DEVIDE DOESN\'T SUPPORT", Toast.LENGTH_LONG).show();\n    }\n    // Ativa e torna o dispositivo vis\xc3\xadvel para conex\xc3\xa3o\n    if (!bthAdapter.isDiscovering()) {\n      Intent getVisible = new Intent(BluetoothAdapter.ACTION_REQUEST_DISCOVERABLE);\n      startActivityForResult(getVisible, 0);\n      Toast.makeText(getApplicationContext(),"AVAIABLE FOR CONNECTION" ,Toast.LENGTH_LONG).show();\n    }\n    else{\n      Toast.makeText(getApplicationContext(),"AVAIABLE FOR CONNECTION",Toast.LENGTH_SHORT).show();\n    }\n  }\n\n  private final BroadcastReceiver HandleDiscovery = new BroadcastReceiver(){\n\n    @Override\n    public void onReceive(Context context, Intent intent) {\n      String action = intent.getAction();\n\n      if(BluetoothDevice.ACTION_FOUND.equals(action)) {\n        BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);\n        Toast.makeText(getApplicationContext(),"DEVICE FOUND! " ,Toast.LENGTH_LONG).show();\n        bthDispositivosArea.add("\\n  Device: " + device.getName() + ", " + device);\n        lv_devicesArea.setAdapter(bthDispositivosArea);\n\n      } else {\n        if(BluetoothDevice.ACTION_UUID.equals(action)) {\n          BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);\n          Parcelable[] uuidExtra = intent.getParcelableArrayExtra(BluetoothDevice.EXTRA_UUID);\n          for (int i=0; i<uuidExtra.length; i++) {\n            //out.append("\\n  Device: " + device.getName() + ", " + device + ", Service: " + uuidExtra[i].toString());\n          }\n        } else {\n          if(BluetoothAdapter.ACTION_DISCOVERY_STARTED.equals(action)) {\n            Toast.makeText(getApplicationContext(),"START DISCOVERY!",Toast.LENGTH_SHORT).show();\n          }\n        }\n      }\n    }\n  };\n\n  @Override\n  public void onDestroy() {\n    unregisterReceiver(HandleDiscovery);\n\n    super.onDestroy();\n  }\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

日志猫:

\n\n
12-30 16:33:24.657: E/AndroidRuntime(12794): FATAL EXCEPTION: main\n12-30 16:33:24.657: E/AndroidRuntime(12794): Process: com.AMOV.mr.fit, PID: 12794\n12-30 16:33:24.657: E/AndroidRuntime(12794): java.lang.RuntimeException: Error receiving broadcast Intent { act=android.bluetooth.device.action.FOUND flg=0x10 (has extras) } in com.AMOV.mr.fit.DesafioActivity$1@41a98b68\n12-30 16:33:24.657: E/AndroidRuntime(12794):    at android.app.LoadedApk$ReceiverDispatcher$Args.run(LoadedApk.java:776)\n12-30 16:33:24.657: E/AndroidRuntime(12794):    at android.os.Handler.handleCallback(Handler.java:733)\n12-30 16:33:24.657: E/AndroidRuntime(12794):    at android.os.Handler.dispatchMessage(Handler.java:95)\n12-30 16:33:24.657: E/AndroidRuntime(12794):    at android.os.Looper.loop(Looper.java:136)\n12-30 16:33:24.657: E/AndroidRuntime(12794):    at android.app.ActivityThread.main(ActivityThread.java:5146)\n12-30 16:33:24.657: E/AndroidRuntime(12794):    at java.lang.reflect.Method.invokeNative(Native Method)\n12-30 16:33:24.657: E/AndroidRuntime(12794):    at java.lang.reflect.Method.invoke(Method.java:515)\n12-30 16:33:24.657: E/AndroidRuntime(12794):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:796)\n12-30 16:33:24.657: E/AndroidRuntime(12794):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:612)\n12-30 16:33:24.657: E/AndroidRuntime(12794):    at dalvik.system.NativeStart.main(Native Method)\n12-30 16:33:24.657: E/AndroidRuntime(12794): Caused by: java.lang.NullPointerException\n12-30 16:33:24.657: E/AndroidRuntime(12794):    at com.AMOV.mr.fit.DesafioActivity$1.onReceive(DesafioActivity.java:112)\n12-30 16:33:24.657: E/AndroidRuntime(12794):    at android.app.LoadedApk$ReceiverDispatcher$Args.run(LoadedApk.java:766)\n12-30 16:33:24.657: E/AndroidRuntime(12794):    ... 9 more\n
Run Code Online (Sandbox Code Playgroud)\n

Aas*_*hir 5

bthDispositivosArea,您的 ArrayAdapter 为 null,因为您尚未在任何地方初始化它。并且您正在尝试向空对象添加一些内容。