115 votes

Comment activer/désactiver le bluetooth de manière programmatique dans Android ?

Je veux activer/désactiver le bluetooth par le biais du 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 ?

0 votes

Comment se fait-il qu'il ne fonctionne pas ? Obtenez-vous une erreur ? Si oui, quelle est cette erreur ?

1 votes

BluetoothAdapter affiche une erreur dans le SDK 1.5

172voto

prijin Points 497

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"/>

0 votes

Je suis très satisfait de ce que j'ai appris et de la façon dont je l'ai fait. Je suis très satisfait de ce que j'ai appris et de la façon dont je l'ai fait.

7 votes

Si vous ajoutez la permission BLUETOOTH_ADMIN, cela fonctionne mais sinon vous devez utiliser startActivityForResult(enableBtIntent, 0) ; pour activer votre Bluetooth.

1 votes

Merci pour votre réponse utile +1 . Je veux juste ajouter pour ceux qui ne savent pas comment l'activer : mBluetoothAdapter.enable()

105voto

Caner Points 15625

Voici une manière un peu plus robuste de le faire, en traitant également les valeurs de retour de 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 permissions suivantes dans votre fichier manifeste :

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

Mais n'oubliez pas ces points importants :

Il s'agit d'un appel asynchrone : il sera retourné immédiatement, et les clients doivent écouter ACTION_STATE_CHANGED pour être informés des changements d'état de changements d'état de l'adaptateur. Si cet appel retourne vrai, alors l'état de l'adaptateur de l'adaptateur passera immédiatement de STATE_OFF à STATE_TURNING_ON, et un peu plus tard, il passera soit à STATE_OFF soit à STATE_ON. Si Si cet appel renvoie false, alors il y a un problème immédiat qui empêchera empêchera l'adaptateur d'être allumé - comme le mode avion, ou bien l'adaptateur est déjà allumé.

UPDATE :

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 ou désenregistrer le récepteur ? Activity classe)

@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);
}

1 votes

Si vous ajoutez BLUETOOTH_ADMIN permission c'est du travail mais si non vous devez utiliser startActivityForResult(enableBtIntent, 0); pour activer votre bluetooth

1 votes

Les informations en surbrillance sont tirées de la documentation de BluetoothAdapter, en particulier pour la méthode enable().

1 votes

Hey, 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 exemple. J'ai créé une petite application à partir de votre code et elle a fonctionné. Mais si je veux la télécharger sur Play Store, elle ne fonctionnera pas ?

31voto

James Schek Points 11070

Android Adaptateur Bluetooth La documentation indique qu'elle est disponible depuis le niveau 5 de l'API. Niveau 5 de l'API est Android 2.0.

Vous pouvez essayer d'utiliser un backport de l'API Bluetooth (je ne l'ai pas essayé personnellement) : http://code.google.com/p/backport-Android-bluetooth/

6voto

Peter Osburg Points 66

La solution de prijin a parfaitement fonctionné pour moi. Il est juste de mentionner que deux permissions 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.

0voto

bhushan Points 1

Il est clairement expliqué dans l'exemple de Bluetooth, veuillez visiter le lien.( http://Android-videos.blogspot.in/2011/10/Android-bluetooth-sample-app.html ).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X