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

标签 android bluetooth android-bluetooth

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

DesafioActivity: 公共(public)类 DesafioActivity 扩展 Activity {

  private TextView nomeDispositivo;
  private TextView MAC_Adress;
  private BluetoothAdapter bthAdapter = BluetoothAdapter.getDefaultAdapter();
  private ArrayAdapter<String> bthDispositivosArea;

  private ListView lv_devicesArea;
  private IntentFilter filter;

  private Button btn_servidor, btn_cliente;

  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_desafio);

    nomeDispositivo = (TextView)findViewById(id.tv_apresentaNomeDispositivo);
    MAC_Adress = (TextView)findViewById(id.tv_apresentaMacAdress);
    lv_devicesArea = (ListView)findViewById(id.lv_apresentaDispositivosDescobertos);

    VerificarEstadoBth();

    nomeDispositivo.setText(bthAdapter.getName());
    MAC_Adress.setText(bthAdapter.getAddress());

    //Regista o BroadcastReceiver

    IntentFilter filter = new IntentFilter(BluetoothDevice.ACTION_FOUND);
    filter.addAction(BluetoothDevice.ACTION_UUID);
    filter.addAction(BluetoothAdapter.ACTION_DISCOVERY_STARTED);
    filter.addAction(BluetoothAdapter.ACTION_DISCOVERY_FINISHED);
    registerReceiver(HandleDiscovery, filter); // Don't forget to unregister during onDestroy

    bthAdapter.startDiscovery();
  }

  public void VerificarEstadoBth(){

    //Bluetooth não suportado 
    if (bthAdapter == null) {
      Toast.makeText(this, "DEVIDE DOESN'T SUPPORT", Toast.LENGTH_LONG).show();
    }
    // Ativa e torna o dispositivo visível para conexão
    if (!bthAdapter.isDiscovering()) {
      Intent getVisible = new Intent(BluetoothAdapter.ACTION_REQUEST_DISCOVERABLE);
      startActivityForResult(getVisible, 0);
      Toast.makeText(getApplicationContext(),"AVAIABLE FOR CONNECTION" ,Toast.LENGTH_LONG).show();
    }
    else{
      Toast.makeText(getApplicationContext(),"AVAIABLE FOR CONNECTION",Toast.LENGTH_SHORT).show();
    }
  }

  private final BroadcastReceiver HandleDiscovery = new BroadcastReceiver(){

    @Override
    public void onReceive(Context context, Intent intent) {
      String action = intent.getAction();

      if(BluetoothDevice.ACTION_FOUND.equals(action)) {
        BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
        Toast.makeText(getApplicationContext(),"DEVICE FOUND! " ,Toast.LENGTH_LONG).show();
        bthDispositivosArea.add("\n  Device: " + device.getName() + ", " + device);
        lv_devicesArea.setAdapter(bthDispositivosArea);

      } else {
        if(BluetoothDevice.ACTION_UUID.equals(action)) {
          BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
          Parcelable[] uuidExtra = intent.getParcelableArrayExtra(BluetoothDevice.EXTRA_UUID);
          for (int i=0; i<uuidExtra.length; i++) {
            //out.append("\n  Device: " + device.getName() + ", " + device + ", Service: " + uuidExtra[i].toString());
          }
        } else {
          if(BluetoothAdapter.ACTION_DISCOVERY_STARTED.equals(action)) {
            Toast.makeText(getApplicationContext(),"START DISCOVERY!",Toast.LENGTH_SHORT).show();
          }
        }
      }
    }
  };

  @Override
  public void onDestroy() {
    unregisterReceiver(HandleDiscovery);

    super.onDestroy();
  }
}

LogCat:

12-30 16:33:24.657: E/AndroidRuntime(12794): FATAL EXCEPTION: main
12-30 16:33:24.657: E/AndroidRuntime(12794): Process: com.AMOV.mr.fit, PID: 12794
12-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
12-30 16:33:24.657: E/AndroidRuntime(12794):    at android.app.LoadedApk$ReceiverDispatcher$Args.run(LoadedApk.java:776)
12-30 16:33:24.657: E/AndroidRuntime(12794):    at android.os.Handler.handleCallback(Handler.java:733)
12-30 16:33:24.657: E/AndroidRuntime(12794):    at android.os.Handler.dispatchMessage(Handler.java:95)
12-30 16:33:24.657: E/AndroidRuntime(12794):    at android.os.Looper.loop(Looper.java:136)
12-30 16:33:24.657: E/AndroidRuntime(12794):    at android.app.ActivityThread.main(ActivityThread.java:5146)
12-30 16:33:24.657: E/AndroidRuntime(12794):    at java.lang.reflect.Method.invokeNative(Native Method)
12-30 16:33:24.657: E/AndroidRuntime(12794):    at java.lang.reflect.Method.invoke(Method.java:515)
12-30 16:33:24.657: E/AndroidRuntime(12794):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:796)
12-30 16:33:24.657: E/AndroidRuntime(12794):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:612)
12-30 16:33:24.657: E/AndroidRuntime(12794):    at dalvik.system.NativeStart.main(Native Method)
12-30 16:33:24.657: E/AndroidRuntime(12794): Caused by: java.lang.NullPointerException
12-30 16:33:24.657: E/AndroidRuntime(12794):    at com.AMOV.mr.fit.DesafioActivity$1.onReceive(DesafioActivity.java:112)
12-30 16:33:24.657: E/AndroidRuntime(12794):    at android.app.LoadedApk$ReceiverDispatcher$Args.run(LoadedApk.java:766)
12-30 16:33:24.657: E/AndroidRuntime(12794):    ... 9 more

最佳答案

bthDispositivosArea,您的 ArrayAdapter 为空,因为您尚未在任何地方对其进行初始化。而您正在尝试向空对象添加一些内容。

关于android - 接收广播 Intent 时出错 { act=android.bluetooth.device.action.FOUND flg=0x10},我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27709194/

相关文章:

android - 如何从蓝牙 LE 设备获取数据

android - Android中的MediaPlayer和VideoView有什么区别

bluetooth - 在蓝牙世界中,众所周知的 GUID 如何转换为设备 UUID

android - Android与BLE设备完成蓝牙通信

Android:自动重新连接 BLE 设备

android - 在 Android 中更改蓝牙的 MTU 或数据包大小?

android - 无法使用 AndroidAnnotations 添加新 Activity

java - 代码块在 Android Studio 中无法运行,但在 Eclipse 中运行良好?

android - 从另一个包开始 Activity

android - 将传入的蓝牙数据读取到另一个应用程序