Comment activer / désactiver le Bluetooth par programme dans Android

104

Je souhaite activer / désactiver le Bluetooth via le programme. J'ai le code suivant.

BluetoothAdapter mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();    
if (!mBluetoothAdapter.isEnabled()) {
        Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
        startActivityForResult(enableBtIntent, REQUEST_ENABLE_BT);

Mais ce code ne fonctionne pas dans le SDK 1.5. Comment puis-je le faire fonctionner?

user458295
la source
Comment ça ne marche pas? Obtenez-vous une erreur? Si oui, quelle est l'erreur?
Adam Driscoll
1
BluetoothAdapter affiche une erreur dans le SDK 1.5
user458295

Réponses:

164

ce code a fonctionné pour moi.

//Disable bluetooth
BluetoothAdapter mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();    
if (mBluetoothAdapter.isEnabled()) {
    mBluetoothAdapter.disable(); 
} 

Pour que cela fonctionne, vous devez disposer des autorisations suivantes:

<uses-permission android:name="android.permission.BLUETOOTH"/>
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>
Prijin
la source
ça marche vraiment pour moi aussi. méthode simple pour déconnecter le bluetooth des appareils Android. merci beaucoup mon pote.
Amit Thaper le
7
si vous ajoutez l'autorisation BLUETOOTH_ADMIN, cela fonctionne mais sinon, vous devez utiliser startActivityForResult (enableBtIntent, 0); pour activer votre bluetooth
Majid Golshadi
1
Merci pour votre réponse utile +1. juste je veux ajouter pour qui ne sait pas comment l'activer: mBluetoothAdapter.enable ()
Chris Sim
97

Voici un moyen un peu plus robuste de le faire, en gérant également les valeurs de retour des enable()\disable()méthodes:

public static boolean setBluetooth(boolean enable) {
    BluetoothAdapter bluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
    boolean isEnabled = bluetoothAdapter.isEnabled();
    if (enable && !isEnabled) {
        return bluetoothAdapter.enable(); 
    }
    else if(!enable && isEnabled) {
        return bluetoothAdapter.disable();
    }
    // No need to change bluetooth state
    return true;
}

Et ajoutez les autorisations suivantes dans votre fichier manifeste:

<uses-permission android:name="android.permission.BLUETOOTH"/>
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>

Mais rappelez-vous ces points importants:

Il s'agit d'un appel asynchrone: il sera renvoyé immédiatement et les clients doivent écouter ACTION_STATE_CHANGED pour être avertis des modifications ultérieures de l'état de l'adaptateur. Si cet appel retourne true, l'état de l'adaptateur passera immédiatement de STATE_OFF à STATE_TURNING_ON, et un peu plus tard, passera à STATE_OFF ou STATE_ON. Si cet appel retourne false, il y a eu un problème immédiat qui empêchera la carte d'être allumée - comme le mode Avion, ou la carte est déjà activée.

METTRE À JOUR:

Ok, alors comment implémenter l'écouteur Bluetooth?:

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

        if (action.equals(BluetoothAdapter.ACTION_STATE_CHANGED)) {
            final int state = intent.getIntExtra(BluetoothAdapter.EXTRA_STATE,
                                                 BluetoothAdapter.ERROR);
            switch (state) {
            case BluetoothAdapter.STATE_OFF:
                // Bluetooth has been turned off;
                break;
            case BluetoothAdapter.STATE_TURNING_OFF:
                // Bluetooth is turning off;
                break;
            case BluetoothAdapter.STATE_ON:
                // Bluetooth is on
                break;
            case BluetoothAdapter.STATE_TURNING_ON:
                // Bluetooth is turning on
                break;
            }
        }
    }
};

Et comment enregistrer / désinscrire le récepteur? (Dans ta Activityclasse)

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    // ...

    // Register for broadcasts on BluetoothAdapter state change
    IntentFilter filter = new IntentFilter(BluetoothAdapter.ACTION_STATE_CHANGED);
    registerReceiver(mReceiver, filter);
}

@Override
public void onStop() {
    super.onStop();

     // ...

    // Unregister broadcast listeners
    unregisterReceiver(mReceiver);
}
Caner
la source
1
si vous ajoutez une BLUETOOTH_ADMINautorisation, cela fonctionne, mais sinon, vous devez utiliser startActivityForResult(enableBtIntent, 0);pour activer votre bluetooth
Majid Golshadi
1
les informations en surbrillance sont tirées de la documentation BluetoothAdapter, spécifiquement pour la méthode enable ().
Kevin Lee
hé, les docs disent que Bluetooth should never be enabled without direct user consent. If you want to turn on Bluetooth in order to create a wireless connection, you should use the ACTION_REQUEST_ENABLE Intent, which will raise a dialog that requests user permission to turn on Bluetooth. The enable() method is provided only for applications that include a user interface for changing system settings, such as a "power manager" app.Qu'est-ce que cela signifie? Par ex. J'ai créé une petite application à partir de votre code et cela a fonctionné. Mais si je veux télécharger sur Play Store, cela ne fonctionnera pas?
Hilal
@Hilal cela fonctionnera. Mais les utilisateurs doivent donner leur consentement avant l'installation. Ils verront une boîte de dialogue comme celle-ci: pewinternet.org/2015/11/10/…
Caner
23

Pour activer le Bluetooth, vous pouvez utiliser l'une des fonctions suivantes:

 public void enableBT(View view){
    BluetoothAdapter mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
    if (!mBluetoothAdapter.isEnabled()){
        Intent intentBtEnabled = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE); 
        // The REQUEST_ENABLE_BT constant passed to startActivityForResult() is a locally defined integer (which must be greater than 0), that the system passes back to you in your onActivityResult() 
        // implementation as the requestCode parameter. 
        int REQUEST_ENABLE_BT = 1;
        startActivityForResult(intentBtEnabled, REQUEST_ENABLE_BT);
        }
  }

La deuxième fonction est:

public void enableBT(View view){
    BluetoothAdapter mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
    if (!mBluetoothAdapter.isEnabled()){
        mBluetoothAdapter.enable();
    }
}

La différence est que la première fonction oblige l'application à demander à l'utilisateur l'autorisation d'activer le Bluetooth ou de refuser. La deuxième fonction permet à l'application d'activer directement le Bluetooth.

Pour désactiver le Bluetooth, utilisez la fonction suivante:

public void disableBT(View view){
    BluetoothAdapter mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
    if (mBluetoothAdapter.isEnabled()){
        mBluetoothAdapter.disable();
    }
}

REMARQUE / La première fonction n'a besoin que de l'autorisation suivante pour être définie dans le fichier AndroidManifest.xml:

<uses-permission android:name="android.permission.BLUETOOTH"/>

Alors que, les deuxième et troisième fonctions nécessitent les autorisations suivantes:

<uses-permission android:name="android.permission.BLUETOOTH"/>
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>
Ahmed Alnabhan
la source
je pense que le paramètre (vue vue) n'est pas nécessaire
CitrusO2
6

La solution de prijin a parfaitement fonctionné pour moi. Il est juste de mentionner que deux autorisations supplémentaires sont nécessaires:

<uses-permission android:name="android.permission.BLUETOOTH"/>
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>

Lorsque ceux-ci sont ajoutés, l'activation et la désactivation fonctionnent parfaitement avec l'adaptateur Bluetooth par défaut.

Peter Osburg
la source
4

J'ai utilisé le code ci-dessous pour désactiver BT lorsque mon application se lance et fonctionne correctement. Je ne sais pas si c'est la bonne façon de mettre en œuvre cela, car Google recommande de ne pas utiliser "bluetooth.disable ();" sans action explicite de l'utilisateur pour désactiver Bluetooth.

    BluetoothAdapter bluetooth = BluetoothAdapter.getDefaultAdapter();
    bluetooth.disable();

J'ai uniquement utilisé l'autorisation ci-dessous.

<uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>
nik
la source
2

Ajoutez les autorisations suivantes dans votre fichier manifeste:

<uses-permission android:name="android.permission.BLUETOOTH"/>
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>

Activer Bluetooth utiliser ceci

BluetoothAdapter mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();    
if (!mBluetoothAdapter.isEnabled()) {
    mBluetoothAdapter.enable(); 
}else{Toast.makeText(getApplicationContext(), "Bluetooth Al-Ready Enable", Toast.LENGTH_LONG).show();}

Désactivez le Bluetooth, utilisez ceci

BluetoothAdapter mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();    
if (mBluetoothAdapter.isEnabled()) {
    mBluetoothAdapter.disable(); 
}
Selim Raza
la source
0

essaye ça:

//this method to check bluetooth is enable or not: true if enable, false is not enable
public static boolean isBluetoothEnabled()
    {
        BluetoothAdapter mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
        if (!mBluetoothAdapter.isEnabled()) {
            // Bluetooth is not enable :)
            return false;
        }
        else{
            return true;
        }

    }

//method to enable bluetooth
    public static void enableBluetooth(){
        BluetoothAdapter mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
        if (!mBluetoothAdapter.isEnabled()) {
            mBluetoothAdapter.enable();
        }
    }

//method to disable bluetooth
    public static void disableBluetooth(){
        BluetoothAdapter mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
        if (mBluetoothAdapter.isEnabled()) {
            mBluetoothAdapter.disable();
        }
    }

Ajouter ces autorisations dans le manifeste

<uses-permission android:name="android.permission.BLUETOOTH"/>
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>
Bapusaheb Shinde
la source