2017-07-19 2 views
0

J'ai testé les forums afin d'essayer de comprendre pourquoi mon Bluetooth BroadcastReceiver ne fonctionne pas et tout ce que je peux trouver, c'est que les gens disent pour s'assurer que les permissions de localisation sont demandées. Je fais déjà ici (méthode est appelée avant la méthode de découverte):Android Bluetooth BroadcastReceiver ne découvre pas les périphériques

Demande d'autorisations

private void requestPermissions() 
{ 
    final int CODE = 5; // app defined constant used for onRequestPermissionsResult 

    boolean allPermissionsGranted = true; 

    String[] permissionsToRequest = 
      { 
       Manifest.permission.BLUETOOTH_ADMIN, 
       Manifest.permission.BLUETOOTH, 
       Manifest.permission.ACCESS_FINE_LOCATION, 
       Manifest.permission.ACCESS_COARSE_LOCATION 
      }; 

    for(String permission : permissionsToRequest) 
    { 
     allPermissionsGranted = allPermissionsGranted && 
       (ContextCompat.checkSelfPermission(this, permission) 
         == PackageManager.PERMISSION_GRANTED); 
    } 

    if(!allPermissionsGranted) 
    { 
     ActivityCompat.requestPermissions(this, permissionsToRequest, CODE); 
    } 
} 

Le problème est que mon BroadcastReceiver ne trouve jamais d'autres appareils découvrables, si un appareil est déjà associé , il le place dans un ListView comme prévu, mais une fois que le périphérique n'est pas associé, il ne peut plus l'identifier. Voir les captures d'écran ci-dessous.

Output with no paired devices

Output with paired devices

Je suis à une perte à ce moment, il se sent comme je l'ai tout essayé, si quelqu'un a des idées que vous voulez sauver ma vie et je serais éternellement reconnaissant.

Merci,

diffusion Récepteur

private final BroadcastReceiver broadcastReceiver = new BroadcastReceiver() 
{ 
    @Override 
    public void onReceive(Context context, Intent intent) 
    { 
     String action = intent.getAction(); 

     if(BluetoothDevice.ACTION_FOUND.equals(action)) 
     { 
      BluetoothDevice btDevice = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE); 

      if(btDevice.getBondState() != BluetoothDevice.BOND_BONDED) 
      { 
       newDevicesArrayAdapter.add(btDevice.getName() + "\n" + btDevice.getAddress()); 
      } 
     } 
     else if(BluetoothAdapter.ACTION_DISCOVERY_FINISHED.equals(action)) 
     { 
      setTitle(R.string.select_device); 

      if(newDevicesArrayAdapter.getCount() == 0) 
      { 
       newDevicesArrayAdapter.clear(); 
       String noDevices = getResources().getText(R.string.none_found).toString(); 
       newDevicesArrayAdapter.add(noDevices); 
      } 
     } 
    } 
}; 

onCreate - Configuration éléments ListView et IntentFilters

protected void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_choose_machine); 

    setResult(Activity.RESULT_CANCELED); 

    pairedDevicesArrayAdapter = new ArrayAdapter<String>(this, R.layout.device_name); 
    newDevicesArrayAdapter  = new ArrayAdapter<String>(this, R.layout.device_name); 

    ListView pairedListView  = (ListView) findViewById(R.id.paired_devices); 
    ListView newDevicesListView = (ListView) findViewById(R.id.new_devices); 

    pairedListView.setAdapter(pairedDevicesArrayAdapter); 
    pairedListView.setOnItemClickListener(deviceClickListener); 
    newDevicesListView.setAdapter(pairedDevicesArrayAdapter); 
    newDevicesListView.setOnItemClickListener(deviceClickListener); 

    IntentFilter filter = new IntentFilter(BluetoothDevice.ACTION_FOUND); 
    registerReceiver(broadcastReceiver, filter); 

    filter    = new IntentFilter(BluetoothAdapter.ACTION_DISCOVERY_FINISHED); 
    registerReceiver(broadcastReceiver, filter); 
} 

doDiscovery() - appelée par la méthode onStart, I » J'ai vérifié qu'il obtient s appelé

private void doDiscovery() 
{ 
    Log.d(TAG, "doDiscovery()"); 

    requestPermissions(); 

    setTitle(R.string.scanning); 

    findViewById(R.id.title_new_devices).setVisibility(View.VISIBLE); 

    if(btAdapter.isDiscovering()) { btAdapter.cancelDiscovery(); } 

    newDevicesArrayAdapter.clear(); 
    btAdapter.startDiscovery(); 
} 

Répondre

0

se trouve que j'étais juste stupide et avait des valeurs de mise à jour à la fois listviews, donc je n'a jamais vu la liste des autres appareils.

pairedListView.setAdapter(pairedDevicesArrayAdapter); 
pairedListView.setOnItemClickListener(deviceClickListener); 
newDevicesListView.setAdapter(pairedDevicesArrayAdapter); 
newDevicesListView.setOnItemClickListener(deviceClickListener); 

aurait dû être:

pairedListView.setAdapter(pairedDevicesArrayAdapter); 
pairedListView.setOnItemClickListener(deviceClickListener); 
newDevicesListView.setAdapter(newDevicesArrayAdapter); 
newDevicesListView.setOnItemClickListener(deviceClickListener);