Partage
  • Partager sur Facebook
  • Partager sur Twitter

besoin d'aide pour connexion Bluetooth

24 février 2015 à 13:50:02

Bonjour

Je suis novice en programmation android. Je suis les tutoriaux présent sur le site.

Je voudrais réaliser une connexion bluetooth. Après de multiples recherches, voici ce que j'ai comme code

MainActivity.java

package com.bluetoothtest.pc.bluetoothtest;

import android.bluetooth.BluetoothSocket;
import android.os.Bundle;
import android.app.Activity;
import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothDevice;
import android.content.BroadcastReceiver;
import android.content.Context;

import java.io.IOException;
import java.util.Set;
import android.content.Intent;
import android.content.IntentFilter;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends Activity {

    private static final int REQUEST_ENABLE_BT = 1;
    private Button onBtn;
    private Button offBtn;
    private Button listBtn;
    private Button findBtn;
    private TextView text;
    private BluetoothAdapter myBluetoothAdapter;
    private Set<BluetoothDevice> pairedDevices;
    private ListView myListView;
    private ArrayAdapter<String> BTArrayAdapter;




    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // take an instance of BluetoothAdapter - Bluetooth radio
        myBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
        if(myBluetoothAdapter == null) {
            onBtn.setEnabled(false);
            offBtn.setEnabled(false);
            listBtn.setEnabled(false);
            findBtn.setEnabled(false);
            text.setText("Status: not supported");

            Toast.makeText(getApplicationContext(),"Your device does not support Bluetooth",
                    Toast.LENGTH_LONG).show();
        } else {
            text = (TextView) findViewById(R.id.text);
            onBtn = (Button)findViewById(R.id.turnOn);
            onBtn.setOnClickListener(new OnClickListener() {

                @Override
                public void onClick(View v) {
                    // TODO Auto-generated method stub
                    on(v);
                }
            });

            offBtn = (Button)findViewById(R.id.turnOff);
            offBtn.setOnClickListener(new OnClickListener() {

                @Override
                public void onClick(View v) {
                    // TODO Auto-generated method stub
                    off(v);
                }
            });

            listBtn = (Button)findViewById(R.id.paired);
            listBtn.setOnClickListener(new OnClickListener() {

                @Override
                public void onClick(View v) {
                    // TODO Auto-generated method stub
                    list(v);
                }
            });

            findBtn = (Button)findViewById(R.id.search);
            findBtn.setOnClickListener(new OnClickListener() {

                @Override
                public void onClick(View v) {
                    // TODO Auto-generated method stub
                    find(v);
                }
            });

            myListView = (ListView)findViewById(R.id.listView1);

            // create the arrayAdapter that contains the BTDevices, and set it to the ListView
            BTArrayAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1);
            myListView.setAdapter(BTArrayAdapter);
        }

    }

    public void on(View view){
        if (!myBluetoothAdapter.isEnabled()) {
            Intent turnOnIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
            startActivityForResult(turnOnIntent, REQUEST_ENABLE_BT);

            Toast.makeText(getApplicationContext(),"Bluetooth turned on" ,
                    Toast.LENGTH_LONG).show();
        }
        else{
            Toast.makeText(getApplicationContext(),"Bluetooth is already on",
                    Toast.LENGTH_LONG).show();
        }
    }

    public void onItemClick(AdapterView<?> parent, final View view,
                            int position, long id){

    }
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        // TODO Auto-generated method stub
        if(requestCode == REQUEST_ENABLE_BT){
            if(myBluetoothAdapter.isEnabled()) {
                text.setText("Status: Enabled");
            } else {
                text.setText("Status: Disabled");
            }
        }
    }

    public void list(View view){
        // get paired devices
        pairedDevices = myBluetoothAdapter.getBondedDevices();

        // put it's one to the adapter
        for(BluetoothDevice device : pairedDevices)
            BTArrayAdapter.add(device.getName()+ "\n" + device.getAddress());

        Toast.makeText(getApplicationContext(),"Show Paired Devices",
                Toast.LENGTH_SHORT).show();

    }

    final BroadcastReceiver bReceiver = new BroadcastReceiver() {
        public void onReceive(Context context, Intent intent) {
            String action = intent.getAction();
            // When discovery finds a device
            if (BluetoothDevice.ACTION_FOUND.equals(action)) {
                // Get the BluetoothDevice object from the Intent
                BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
                // add the name and the MAC address of the object to the arrayAdapter
                BTArrayAdapter.add(device.getName() + "\n" + device.getAddress());
                BTArrayAdapter.notifyDataSetChanged();
            }
        }
    };

    public void find(View view) {
        if (myBluetoothAdapter.isDiscovering()) {
            // the button is pressed when it discovers, so cancel the discovery
            myBluetoothAdapter.cancelDiscovery();
        }
        else {
            BTArrayAdapter.clear();
            myBluetoothAdapter.startDiscovery();

            registerReceiver(bReceiver, new IntentFilter(BluetoothDevice.ACTION_FOUND));
        }
    }

    public void off(View view){
        myBluetoothAdapter.disable();
        text.setText("Status: Disconnected");

        Toast.makeText(getApplicationContext(),"Bluetooth turned off",
                Toast.LENGTH_LONG).show();
    }


    private class ClientBluetooth extends Thread {
        private final BluetoothSocket blueSocket;
        private final BluetoothDevice blueDevice;

        public ClientBluetooth(BluetoothDevice device) {
            // On utilise un objet temporaire car blueSocket et blueDevice sont "final"
            BluetoothSocket tmp = null;
            blueDevice = device;

            // On récupère un objet BluetoothSocket grâce à l'objet BluetoothDevice
            try {
                // MON_UUID est l'UUID (comprenez identifiant serveur) de l'application. Cette valeur est nécessaire côté serveur également !

                tmp = device.createRfcommSocketToServiceRecord(MON_UUID);
            } catch (IOException e) { }
            blueSocket = tmp;
        }

        public void run() {
            // On annule la découverte des périphériques (inutile puisqu'on est en train d'essayer de se connecter)
            myBluetoothAdapter.cancelDiscovery();

            try {
                // On se connecte. Cet appel est bloquant jusqu'à la réussite ou la levée d'une erreur
                blueSocket.connect();
            } catch (IOException connectException) {
                // Impossible de se connecter, on ferme la socket et on tue le thread
                try {
                    blueSocket.close();
                } catch (IOException closeException) { }
                return;
            }

            // Utilisez la connexion (dans un thread séparé) pour faire ce que vous voulez
            manageConnectedSocket(blueSocket);
        }

        // Annule toute connexion en cours et tue le thread
        public void cancel() {
            try {
                blueSocket.close();
            } catch (IOException e) { }
        }
    }

 activity_main.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
    android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity">

    <TextView
	       android:id="@+id/text"
	       android:layout_width="wrap_content"
	       android:layout_height="wrap_content"
	       android:textAppearance="?android:attr/textAppearanceLarge"
	       android:text="@string/Text" />

	   <LinearLayout
	      android:layout_width="match_parent"
	      android:layout_height="wrap_content"
	      android:orientation="horizontal"
          android:layout_marginTop="30dp" >

	   <Button
	      android:id="@+id/turnOn"
	      android:layout_width="wrap_content"
	      android:layout_height="wrap_content"
	      android:text="@string/on" />

	   <Button
	      android:id="@+id/turnOff"
	      android:layout_width="wrap_content"
	      android:layout_height="wrap_content"
	      android:text="@string/off" />

	   </LinearLayout>


	   <LinearLayout
	      android:layout_width="match_parent"
	      android:layout_height="wrap_content"
	      android:orientation="vertical"
	      android:layout_marginTop="80dp" >

	       <Button
	          android:id="@+id/paired"
	          android:layout_width="wrap_content"
	          android:layout_height="wrap_content"
	          android:text="@string/List" />

	       <Button
	          android:id="@+id/search"
	          android:layout_width="wrap_content"
	          android:layout_height="wrap_content"
	          android:text="@string/Find" />

	       <ListView
	           android:id="@+id/listView1"
	           android:layout_width="fill_parent"
	           android:layout_height="200dp" >

	       </ListView>

	   </LinearLayout>


</RelativeLayout>

manifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.bluetoothtest.pc.bluetoothtest" >

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="19" />

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

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name=".MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

Ce code fonctionne ( activation , recherche , affichage)

Le périphérique bluetooth , sont affiché dans un listview.

Une fois la recherche effectuée et affichée sur le téléphone , je voudrais pouvoir selectionner dans le listeview un périphérique et pouvoir attribuer ce périphérique à mon UUID. Pour établir une connexion client.

Pourriez vous me dire comment effectuer cette operation ?

Merci




  • Partager sur Facebook
  • Partager sur Twitter
7 septembre 2018 à 14:44:49

Bonjour,

avez vous trouvé la solution...depuis 2 ans ;) ? s'il vous plait ?

je suis bloqué sur le meme point. j'ai trouvé des bouts de pistes : qu'il faut un socket(qui decoule de la class BluetoothSocket) et aussi des UUID...mais rien d'encore assez précis pour que ça plaise à android studio :(

quelqu'un a-t-il des pistes pour comprendre le fonctionnement de cette partie là.

Merci

  • Partager sur Facebook
  • Partager sur Twitter
14 décembre 2018 à 18:43:20

Bonjour OlivierBd.

Je viens juste de voir ton message.

Je ne me souvient plus depuis le temps !

C'est une connexion Bluetooth standard que tu veux ou une en low énergie ?

  • Partager sur Facebook
  • Partager sur Twitter
25 juillet 2019 à 12:35:23

bonjour,

merci pour votre réponse mais effectivement, si on se repond tous les 6 mois, on va pas avancer ;)

le projet est en stand by, et c'etait pour un bluetooth standart.

en fait, je pouvais lancer le bluetooth mais l'apparait auquel il fallait le connecter est un capteur IOT....une vraie boite noire le machin....

je me servirais peut-etre du bluetooth pour une autre applie mais là, j'en ai plus l'utilité....et je n'ai pas réussi à faire mieux que ça que vous avez  fait en haut de la page.

cordialement

Merci quand meme.

  • Partager sur Facebook
  • Partager sur Twitter
25 juillet 2019 à 14:44:14

Bonjour,

Déterrage

Citation des règles générales du forum :

Avant de poster un message, vérifiez la date du sujet dans lequel vous comptiez intervenir.

Si le dernier message sur le sujet date de plus de deux mois, mieux vaut ne pas répondre.
En effet, le déterrage d'un sujet nuit au bon fonctionnement du forum, et l'informatique pouvant grandement changer en quelques mois il n'est donc que rarement pertinent de déterrer un vieux sujet.

Au lieu de déterrer un sujet il est préférable :

  • soit de contacter directement le membre voulu par messagerie privée en cliquant sur son pseudonyme pour accéder à sa page profil, puis sur le lien "Ecrire un message"
  • soit de créer un nouveau sujet décrivant votre propre contexte
  • ne pas répondre à un déterrage et le signaler à la modération

Je ferme ce sujet. En cas de désaccord, me contacter par MP.

  • Partager sur Facebook
  • Partager sur Twitter
Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL