0
votes

Je ne reçois pas d'action sur mon Broadcasteceiver - Android Studio

C'est mon premier temps de travailler avec le module Bluetooth à Android, j'essaie de numériser des périphériques non jumelés et de les montrer dans un message mais cela ne fonctionne pas. J'ai essayé beaucoup de choses mais rien. J'ai toutes les autorisations nécessaires. Cela fait partie de mon code

private final BroadcastReceiver mBroadcastReceiver = 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);
                listAdapter.add(device.getName() + device.getAddress());
                listAdapter.notifyDataSetChanged();
                showToast("Action Scan Mode " );

            } else if (BluetoothAdapter.ACTION_DISCOVERY_FINISHED.equals(action)){
                mpossibleBtn.setText("Scanning Bluetooth Devices");
                showToast("Scannning Bluetooth Devices... " );
            } else if (BluetoothAdapter.ACTION_DISCOVERY_STARTED.equals(action)){
                mpossibleBtn.setText("Scanning in progress...");
                showToast("Scanning in progress... " );
            }


            if (action.equals(BluetoothAdapter.ACTION_SCAN_MODE_CHANGED)) {
                showToast("Action Scan Mode " );
                int modeValue=intent.getIntExtra(BluetoothAdapter.EXTRA_SCAN_MODE, BluetoothAdapter.ERROR);

                if(modeValue==BluetoothAdapter.SCAN_MODE_CONNECTABLE){
                    mPairedTv.setText("The device is not in discoverable mode but still can receive connections");
                } else if(modeValue==BluetoothAdapter.SCAN_MODE_CONNECTABLE_DISCOVERABLE){
                    mPairedTv.setText("The device is in discoverable mode");
                    BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
                    String deviceName = device.getName();
                    String deviceHardwareAddress = device.getAddress(); // MAC address
                    showToast("onReceive: " + device.getName() + ": " + device.getAddress());
                } else if (modeValue==BluetoothAdapter.SCAN_MODE_NONE){
                    mPairedTv.setText("The device is not in discoverable mode and can't receive connection");
                } else{
                    mPairedTv.setText("Error");
                }
            }
        }
    };


2 commentaires

Quelles autorisations possédez-vous? Vous avez probablement besoin de Bluetooth , Bluetooth_admin et sur les versions de la nouvelle os de nouvelles (pas sûr fine ou est suffisant)


J'ai


3 Réponses :


0
votes

Vous devez ajouter après l'enregistrement du récepteur

mBtAdapter.startDiscovery();


2 commentaires

Les actions utilisées en question doivent être envoyées par système lors de l'exécution de BT Scan


J'ai essayé de mettre si (mblueadapter.isdiscouverture ()) Showtoast ("commencé"); Rigth après le démarrage et cela ne fonctionne pas, j'ai changé les autorisations de l'emplacement à l'amende et rien



0
votes

Démarrer la découverte après avoir enregistré votre récepteur.

  mBluetoothAdapter.disable(); 
  mBluetoothAdapter.enable(); 


4 commentaires

J'ai essayé mais c'est la même chose, rien, j'ai choisi mes autorisations et que je suis bien sûr. J'ai essayé de scanner BTDevices avec mon téléphone Systems (tandis que mon application est en cours d'exécution à Brackground) et je retourne TU mon application et elle reçoit une action. Dans ce cas Action_Discovery_Finished.


J'ai essayé de mettre si (mblueadapter.isdiscouverture ()) Showtoast ("commencé"); Rigth après le démarrage et cela ne fonctionne pas, j'ai changé les autorisations de l'emplacement à l'amende et rien


StartDiscoveryy () est asynchrone, donc lorsque vous demandez à l'ISDiscovering (), cela n'a peut-être pas encore commencé


Sur certains téléphones, vous devrez redémarrer l'adaptateur MBUETOOTHADAPTER.DISABLE (); mBuetootootoadapter.Enable ();



0
votes

OK, je viens de trouver mon erreur. Dans ce cas, les autorisations Bluetooth et Bluetooth_Admin ont un niveau de protection de la normale, et il vous suffit donc de les demander dans le manifeste. Les autorisations de localisation sont dangereuses, cependant, et ainsi de suite sur des appareils Android 6.0+, avec une TargetsDkversion de 23 ou plus, vous devez demander à ceux lors de l'exécution.

I ALREDY avez les autorisations cependant, nous avons besoin de demander Access_Caarse_Location au moment de l'exécution. .

Cette fois, le code fonctionne xxx

});


0 commentaires