IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

API standards et tierces Android Discussion :

[Bluetooth] Découvrir les périphériques


Sujet :

API standards et tierces Android

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2010
    Messages : 66
    Par défaut [Bluetooth] Découvrir les périphériques
    Bonjour à tous,

    Dans un premier temps, j'ai lu le tuto disponible sur le bluetooth avec Android.
    J'ai également lu quelques postes sur le sujet bluetooth mais aucun ne se rapproche de mon problème.

    Voici mon projet:

    établir une communication bluetooth entre un équipement bluetooth et mon smartphone. A la base l'équipement bluetooth communique avec un PC sur lequel un hyperterminal peut s'ouvrir pour communiquer avec l'équipement bluetooth.
    Je souhaite accéder à cet équipement en question via mon smartphone et non plus par PC.

    Je débute dans le développement Android mais j'ai quelques notions de JAVA.

    J'ai rédigé un début de code pour détecter/activer le bluetooth sur le smartphone. un code basic pour le moment.

    J'essai simplement de détecter mon équipement dans un premier temps. Par la suite j'essayerai de communiquer avec.

    Voici le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    package com.ggelec.unids6;
     
    import android.app.Activity;
    import android.bluetooth.BluetoothAdapter;
    import android.bluetooth.BluetoothDevice;
    import android.content.BroadcastReceiver;
    import android.content.Context;
    import android.content.Intent;
    import android.os.Bundle;
    import android.util.Log;
    import android.view.View;
    import android.widget.Button;
    import android.widget.Toast;
    import android.view.*;
     
    public class UniDS6BluetoothActivity extends Activity implements android.view.View.OnClickListener{
     
     
    	Button buttonConnection;
    	BluetoothAdapter bluetoothAdapter;
     
    	/** Called when the activity is first created. */
    	@Override
    	public void onCreate(Bundle savedInstanceState) {
    		super.onCreate(savedInstanceState);
    		setContentView(R.layout.main);
    		Log.i("", "onCreate");
    		buttonConnection = ((Button)this.findViewById(R.id.buttonConnection));
    		buttonConnection.setOnClickListener(this);
     
     
    	}
     
    	@Override
    	protected void onStart() {
    		Log.i("", "onStart");
    		bluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
    		if (bluetoothAdapter == null) {
    			Toast.makeText(UniDS6BluetoothActivity.this,
    					"No Bluetooth devices", Toast.LENGTH_LONG).show();
    			Log.e("ERROR", "No Bluetooth devices");
    		} else {
    			Toast.makeText(UniDS6BluetoothActivity.this, "Bluetooth available",
    					Toast.LENGTH_SHORT).show();
    			Log.i("INFO", "Bluetooth available");
    		}
    		if (!bluetoothAdapter.isEnabled()) {
    			   bluetoothAdapter.enable();			   
    			}
    		super.onStart();
    	}
     
    	@Override
    	protected void onResume() {
    		Log.i("", "onResume");
    		super.onResume();
    	}
     
    	@Override
    	protected void onPause() {
    		Log.i("", "onPause");
    		super.onPause();
    	}
     
    	@Override
    	protected void onStop() {
    		Log.i("", "onStop");
    		super.onStop();
    	}
     
    	@Override
    	protected void onDestroy() {
    		Log.i("", "onDestroy");
    		if (bluetoothAdapter.isEnabled()) {
    				bluetoothAdapter.cancelDiscovery();
    				bluetoothAdapter.disable();
    				Log.i("INFO", "Bluetooth disable");
    			}
     
    		super.onDestroy();
    	}
     
    	public void onClick(View v) {
    		Toast.makeText(UniDS6BluetoothActivity.this, "searching...",
    				Toast.LENGTH_SHORT).show();
    		Log.i("INFO", "searching...");
     
    		if (bluetoothAdapter.getScanMode() !=
    	            BluetoothAdapter.SCAN_MODE_CONNECTABLE_DISCOVERABLE) {
    	            Intent discoverableIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_DISCOVERABLE);
    	            discoverableIntent.putExtra(BluetoothAdapter.EXTRA_DISCOVERABLE_DURATION, 300);
    	            startActivity(discoverableIntent);
    	        }
     
    		if(bluetoothAdapter.isDiscovering())bluetoothAdapter.cancelDiscovery();
    		bluetoothAdapter.startDiscovery();
     
     
     
    	}
    	private final BroadcastReceiver bluetoothReceiver = new BroadcastReceiver() {
    		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(UniDS6BluetoothActivity.this, "New Device = " + device.getName(), Toast.LENGTH_SHORT).show();
    		  }
    		}
    		};
     
     
    }
    Comme vous pouvez le voir, je me suis inspiré de ce que j'ai pu trouver pour gérer le bluetooth.
    Malheureusement, je ne vois pas comment bien détecter les modules à proximités et les afficher pour ensuite s'y connecter.

    Si quelqu'un pouvait m'éclairer ça serait super.

    un grand merci d'avance

    GGelec

  2. #2
    Expert confirmé

    Avatar de Feanorin
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    4 589
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 4 589
    Par défaut
    Bonjour,

    Tu as un super exemple sur le sujet :

    http://developer.android.com/resourc...toothChat.html

    et ici :
    http://sberfini.developpez.com/tutor...luetooth/#LIII

    Tu trouveras toutes les réponses à tes questions dans cet exemple .

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2010
    Messages : 66
    Par défaut
    Citation Envoyé par Feanorin Voir le message
    Bonjour,

    Tu as un super exemple sur le sujet :

    http://developer.android.com/resourc...toothChat.html

    et ici :
    http://sberfini.developpez.com/tutor...luetooth/#LIII

    Tu trouveras toutes les réponses à tes questions dans cet exemple .
    Bonjour,

    j'ai déjà regardé ces exemples. Je vais essayer de m'en inspirer.

    J'essai malgré tout de trouver. Je ne suis pas sur d'avoir compris le principe de client serveur.

    voici mon code si tu pouvais y jeter un oeil histoire de voir si je ne fais pas de bêtes fautes:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    public class UniDS6BluetoothActivity extends Activity {
     
    	private static final UUID MY_UUID = UUID
    			.fromString("00001101-0000-1000-8000-09180F7294D1");
    	private static String address = "0A:06:66:07:6D:E6"; // address du module
     
     
    	Button buttonConnection;
    	BluetoothAdapter bluetoothAdapter;
    	private BluetoothSocket btSocket;
    	private OutputStream outStream;
     
    	/** Called when the activity is first created. */
    	@Override
    	public void onCreate(Bundle savedInstanceState) {
    		super.onCreate(savedInstanceState);
    		setContentView(R.layout.main);
    		Log.i("", "onCreate");
     
    		bluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
     
    		if (bluetoothAdapter == null) {
    			Toast.makeText(UniDS6BluetoothActivity.this,
    					"No Bluetooth devices", Toast.LENGTH_LONG).show();
    			Log.e("ERROR", "No Bluetooth devices");
    		} else {
    			Toast.makeText(UniDS6BluetoothActivity.this, "Bluetooth available",
    					Toast.LENGTH_SHORT).show();
    			Log.i("INFO", "Bluetooth available");
     
    		}
    		if (!bluetoothAdapter.isEnabled()) { // si pas activé, alors
    												// l'activer...
    			bluetoothAdapter.enable();
    			Log.i("INFO", "Bluetooth enable");
     
    		}
    		String mac = BluetoothAdapter.getDefaultAdapter().getAddress();
    		Log.i("MAC:", "++++" + mac + "++++"); // afficher l'adresse mac du
    												// nexus s
     
    	}
     
    	@Override
    	protected void onStart() {
    		Log.i("", "onStart");
    		super.onStart();
    	}
     
    	@Override
    	protected void onResume() {
    		Log.i("", "onResume");
    		BluetoothDevice device = bluetoothAdapter.getRemoteDevice(address);
    		try {
    			btSocket = device.createRfcommSocketToServiceRecord(MY_UUID);
    			Log.i("INFO", "Socket OK");
    		} catch (IOException e) {
    			Log.e("ERROR", "ON RESUME: Socket creation failed.", e);
    		}
    		bluetoothAdapter.cancelDiscovery();
    		try {
    			btSocket.connect();
    			Log.i("INFO","ON RESUME: BT connection established, data transfer link open.");
    		} catch (IOException e) {
    			try {
    				btSocket.close();
    			} catch (IOException e2) {
    				Log.e("ERROR","ON RESUME: Unable to close socket during connection failure",e2);
    			}
    		}
     
    		try {
    			outStream = btSocket.getOutputStream();
    			Log.i("INFO", "btSocket.getOutputStream(); OK");
    		} catch (IOException e) {
    			Log.e("ERROR", "ON RESUME: Output stream creation failed.", e);
    		}
     
    		if (outStream != null) {
    			try {
    				outStream.close();
    			} catch (Exception e) {
    			}
    			outStream = null;
    		}
     
    		if (btSocket != null) {
    			try {
    				btSocket.close();
    			} catch (Exception e) {
    			}
    			btSocket = null;
    		}
    		try {
    			btSocket.connect();
    		} catch (IOException e1) {
    			Log.e("ERROR", "btSocket.connect();", e1);
    		}
     
    		String message = "NEXUS S";
    		byte[] msgBuffer = message.getBytes();
    		try {
    			outStream.write(msgBuffer);
    		} catch (IOException e) {
    			Log.e("ERROR", "ON RESUME: Exception during write.", e);
    		}
    		super.onResume();
    	}
     
    	@Override
    	protected void onPause() {
    		Log.i("", "onPause");
    		if (outStream != null) {
    			try {
    				outStream.flush();
    			} catch (IOException e) {
    				Log.e("ERROR", "ON PAUSE: Couldn't flush output stream.", e);
    			}
    		}
    		try {
    			btSocket.close();
    		} catch (IOException e2) {
    			Log.e("ERROR", "ON PAUSE: Unable to close socket.", e2);
    		}
    		super.onPause();
    	}
     
    	@Override
    	protected void onStop() {
    		Log.i("", "onStop");
    		super.onStop();
    	}
     
    	@Override
    	protected void onDestroy() {
    		Log.i("", "onDestroy");
    		if (bluetoothAdapter.isEnabled()) {
    			bluetoothAdapter.cancelDiscovery();
    			bluetoothAdapter.disable();
    			Log.i("INFO", "Bluetooth disable... Application terminated");
    		}
     
    		super.onDestroy();
    	}
    }

  4. #4
    Expert confirmé

    Avatar de Feanorin
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    4 589
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 4 589
    Par défaut
    Bonjour,

    String address = "0A:06:66:07:6D:E6"; // address du module
    C'est l'adresse de quel module ?

    Après essaye tout d'abord de faire un inquiry pour récupérer les bluetooth devices possibles :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    // On crée un BroadcastReceiver pour ACTION_FOUND
    private final BroadcastReceiver receiver = new BroadcastReceiver() {
        public void onReceive(Context context, Intent intent) {
            String action = intent.getAction();
            // Quand la recherche trouve un terminal
            if (BluetoothDevice.ACTION_FOUND.equals(action)) {
                // On récupère l'object BluetoothDevice depuis l'Intent
                BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
                // On ajoute le nom et l'adresse du périphérique dans un ArrayAdapter (par exemple pour l'afficher dans une ListView)
                mArrayAdapter.add(device.getName() + "\n" + device.getAddress());
            }
        }
    };
    // Inscrire le BroadcastReceiver
    IntentFilter filter = new IntentFilter(BluetoothDevice.ACTION_FOUND);
    registerReceiver(receiver, filter); // N'oubliez pas de le désinscrire lors du OnDestroy() !
    Tu pourras ainsi te connecter à un de ces devices par la suite, plus de chaîne en dur.

    J'essai malgré tout de trouver. Je ne suis pas sur d'avoir compris le principe de client serveur.
    Après je te reconseille de lire ce tutoriel en premier alors :

    http://sberfini.developpez.com/tutor...oid/bluetooth/

    si tu pouvais y jeter un oeil histoire de voir si je ne fais pas de bêtes fautes
    Normalement cela a l'air bon

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2010
    Messages : 66
    Par défaut
    Citation Envoyé par Feanorin Voir le message
    Bonjour,



    C'est l'adresse de quel module ?

    Après essaye tout d'abord de faire un inquiry pour récupérer les bluetooth devices possibles :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    // On crée un BroadcastReceiver pour ACTION_FOUND
    private final BroadcastReceiver receiver = new BroadcastReceiver() {
        public void onReceive(Context context, Intent intent) {
            String action = intent.getAction();
            // Quand la recherche trouve un terminal
            if (BluetoothDevice.ACTION_FOUND.equals(action)) {
                // On récupère l'object BluetoothDevice depuis l'Intent
                BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
                // On ajoute le nom et l'adresse du périphérique dans un ArrayAdapter (par exemple pour l'afficher dans une ListView)
                mArrayAdapter.add(device.getName() + "\n" + device.getAddress());
            }
        }
    };
    // Inscrire le BroadcastReceiver
    IntentFilter filter = new IntentFilter(BluetoothDevice.ACTION_FOUND);
    registerReceiver(receiver, filter); // N'oubliez pas de le désinscrire lors du OnDestroy() !
    Tu pourras ainsi te connecter à un de ces devices par la suite, plus de chaîne en dur.


    Après je te reconseille de lire ce tutoriel en premier alors :

    http://sberfini.developpez.com/tutor...oid/bluetooth/



    Normalement cela a l'air bon
    Bonjour,

    j'ai recommencé mon application. J'avais oublié pas mal de choses en faite.
    Maintenant, je parviens à détecter mon équipement et à récupérer son adresse.

    Je regarde toujours l'exemple de google (bluetoothChat).

    J'ai d'ailleurs du mal a voir les étapes pour établir une connexion vers un périphérique détecté...

    Si quelqu'un pouvait juste me citer les étapes, ça serait super.
    (créer un socket puis un rfcomm, ....)

    Je suis un peu perdu à ce niveau là.

    J'avais également une question au niveau de la notion client/server.

    Dans mon cas, où je souhaite établir une connexion de mon téléphone à mon module bluetooth, je suis client ou server ? Je n'ai pas bien saisi le concept.

    Je pense que c'est client mais je ne suis pas sur.

    merci

  6. #6
    Expert confirmé

    Avatar de Feanorin
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    4 589
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 4 589
    Par défaut
    J'ai d'ailleurs du mal a voir les étapes pour établir une connexion vers un périphérique détecté...
    Tu as les exemples des connections serveur et client ici :
    http://sberfini.developpez.com/tutor...oid/bluetooth/

    Pour le client il faut faire un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     BluetoothSocket  tmp = device.createInsecureRfcommSocketToServiceRecord(
                                MY_UUID);
    Où ton device et le device sur lequel tu veux te connecter.

    Après sur le BluetoothSocket (tmp) tu fais un connect().

    Et te voilà connecté.

    ù je souhaite établir une connexion de mon téléphone à mon module bluetooth, je suis client ou server ?
    Client . Le serveur reçoit la requête, le client l'envoie, donc dans ce cas là tu es client.

    Je regarde toujours l'exemple de google (bluetoothChat).
    Concentre toi bien sur la classe BluetoothChatService qui elle contient toue les gestions des connections, la BlueChat gére juste le côté graphique et inquiry (discoverable)

Discussions similaires

  1. Comment lister les périphériques bluetooth à porté?
    Par xXO--Hades--OXx dans le forum API standards et tierces
    Réponses: 3
    Dernier message: 11/02/2011, 10h56
  2. Réponses: 1
    Dernier message: 31/08/2009, 09h53
  3. Réponses: 5
    Dernier message: 27/04/2007, 14h43
  4. demonter les périphérique USB par la ligne de commande.
    Par Essilife dans le forum Autres Logiciels
    Réponses: 3
    Dernier message: 20/01/2006, 11h50
  5. découvrir les erreurs sous Mozilla
    Par rabobsky dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 18/12/2004, 20h51

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo