Aller au contenu

Recherche de peripheriques Bluetooth


Florent Just

Recommended Posts

Bonjour, j'essaye de m'initier au developpement android et je voudrais faire une application de chat par bluetooth. du coup j'ai suivi quelque tuto que je me permet de cité :

http://www.tutos-android.com/utilisation-bluetooth-application-android

J'arrive a allumer le peripherique mais je n'arrive pas a faire la decouverte de nouveau peripherique. je vous presente mon code :

Ma classe activity :


package blueWorld.blueChat;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.CompoundButton.OnCheckedChangeListener;
import android.widget.TextView;
import android.widget.Toast;

public class PeripheriqueActivity extends Activity
{
private BlueServices blueservices;
   private MyException exception;
   private Button scanPeriph;
   private CheckBox activblue;

 public void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 setContentView(R.layout.peripherique);

 blueservices = new BlueServices();
    exception = new MyException();
    scanPeriph = (Button) findViewById(R.id.scanPeriph);
    activblue = (CheckBox) findViewById(R.id.activbluetooth);

 this.AddListener();
 }

//public void AddListener()
public void AddListener()
{
 activblue.setOnCheckedChangeListener(new OnCheckedChangeListener()
 {
  public void onCheckedChanged(CompoundButton buttonView, boolean isChecked)
  {

	  if ( isChecked )
	  {
	   try {
  String blueStatus = blueservices.ActivateBlue();
	    Toast.makeText(PeripheriqueActivity.this, blueStatus, Toast.LENGTH_SHORT).show();
 }
	   catch(Exception e)
    {
	 exception.TraiteException(PeripheriqueActivity.this, e);
    }
	  }
	  else
	  {
	   try {
  String blueStatus = blueservices.DisableBlue();
  Toast.makeText(PeripheriqueActivity.this, blueStatus, Toast.LENGTH_SHORT).show();
 }
	   catch(Exception e)
 {
  exception.TraiteException(PeripheriqueActivity.this, e);
 }
	  }
  }

 });

 scanPeriph.setOnClickListener(new View.OnClickListener() {
	 public void onClick(View v) {
	  try{
	   blueservices.ScanDevices(PeripheriqueActivity.this);
	  }catch (Exception e) {
	   Toast.makeText(PeripheriqueActivity.this, "erreur " + e, Toast.LENGTH_SHORT).show();
   }
	 }
    });

}

}

Ma classe qui gère le bluetooth

package blueWorld.blueChat;

import java.util.ArrayList;
import java.util.Set;

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.content.IntentFilter;
import android.widget.ArrayAdapter;
import android.widget.Toast;

public class BlueServices extends Activity {

   private final BluetoothAdapter blueAdapter;
   private final MyBroadcastReceiver blueReceiver;
   protected Set<BluetoothDevice> mArrayAdapter;

   public BlueServices()
   {
       blueAdapter = BluetoothAdapter.getDefaultAdapter();
       blueReceiver = new MyBroadcastReceiver();
   }

   public boolean GetEtat()
   {
       if (blueAdapter.isEnabled()) {
           return true;
       }
       else
       {
           return false;
       }

   }

   public String ActivateBlue()
   {

       String returnedString = "";
       if (!blueAdapter.isEnabled()) {
           try {
               blueAdapter.enable();
          	 returnedString = "Le Bluetooth est activé";
           }
           catch(Exception e)
           {
               returnedString = "Erreur : " + e.toString();
           }
       }
       return returnedString;

   }

   public String DisableBlue()
   {

       String returnedString = "";

       if (blueAdapter.isEnabled()) {
           try {
               blueAdapter.disable();
          	 returnedString = "Le Bluetooth est désactivé";
           }
           catch(Exception e)
           {
               returnedString = "Erreur : " + e.toString();
           }

       }


       return returnedString;

   }

   public Set<BluetoothDevice> KnownDevices()
   {
       Set<BluetoothDevice> pairedDevices = blueAdapter.getBondedDevices();
       return pairedDevices;
   }

   //public Set<BluetoothDevice> ScanDevices()
   public void ScanDevices(Context context)
   {
       try{
           Toast.makeText(BlueServices.this, "demarage de la decouverte ", Toast.LENGTH_SHORT).show();
           //blueAdapter.startDiscovery();
       }catch (Exception e) {
           Toast.makeText(BlueServices.this, "erreur : " + e, Toast.LENGTH_SHORT).show();
       }

       //return pairedDevices;
   }

   protected void onDestroy() {
         super.onDestroy();
         blueAdapter.cancelDiscovery();
         unregisterReceiver(blueReceiver);
   }


   public void ConnectDevice()
   {

   }

   public void DisconnectionDevice()
   {

   }

}

Et mon brodcast receiver


package blueWorld.blueChat;

import android.bluetooth.BluetoothDevice;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.widget.Toast;

public class MyBroadcastReceiver extends BroadcastReceiver{

   @Override
   public void onReceive(Context context, Intent intent) {
       // TODO Auto-generated method stub
       String action = intent.getAction();
         if (BluetoothDevice.ACTION_FOUND.equals(action)) {
      	 BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
      	 Toast.makeText(context, "New Device = " + device.getName(), Toast.LENGTH_SHORT).show();
         }

   }


}

Lorsque je clique sur le bouton "scanPeriph" j'ai le droit à un java.lang.NullPointerException. Une idée d'où cela peux venir?

Merci

Lien vers le commentaire
Partager sur d’autres sites

Si tu as un NullPointerException, c'est que tu as quelque part une variable non initialisée. Regarde dans les traces de l'exception, tu y trouveras l'indication de la ligne dans ton code où cela se produit.

Lien vers le commentaire
Partager sur d’autres sites

Le NullPointerException semble vernir du e. quand je fais e.getmessage() il me dit erreur : null du coup ques ce que cela veux dire? qu'il n y a pas d'erreur? du coup pourquoi passe dans le catch.

J'ai du mal à comprendre.

Modifié par Florent Just
Lien vers le commentaire
Partager sur d’autres sites

j'ai changer le listener sur le scanPeriph qui agit comme ca maintenant :

scanPeriph.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            try{
                blueservices.ScanDevices(PeripheriqueActivity.this);
            }catch (Exception e) {
                Toast.makeText(PeripheriqueActivity.this, "erreur " + e.getMessage(), Toast.LENGTH_SHORT).show();
               }
        }
    });

d'où le e.getMessage qui m'affiche null.

de plus mon

public class BlueServices extends Activity {

me permet d'avoir accès au Toast dans la classe blueservices

J'ai modifier le code, j'ai enlever l'extend activity et ai retourné une String a la place ce qui donne ceci:

Dans mon Activity :

scanPeriph.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            try{
                String message = blueservices.ScanDevices(PeripheriqueActivity.this);
                Toast.makeText(PeripheriqueActivity.this, message, Toast.LENGTH_SHORT).show();
            }catch (Exception e) {
                Toast.makeText(PeripheriqueActivity.this, "erreur " + e.getMessage(), Toast.LENGTH_SHORT).show();
               }
        }
    });

Dans ma classe BlueServices :

public String ScanDevices(Context context)
   {

       String message = "";
       try{
           blueAdapter.startDiscovery();
           message = "je scan !!";
       }catch (Exception e) {
           message = "erreur : " + e.getMessage();
       }
       return message;
   }

du coup maintenant il arrive dans scandevices et m'affiche "erreur : null"

Lien vers le commentaire
Partager sur d’autres sites

Si tu obtiens le message "erreur : null", ton exception n'est pas nulle (sinon tu aurais un NPE), mais c'est que le message de l'exception est nul

Pour avoir plus d'info, il te suffirait de mettre un log lors de la survenance de l'exception, et tu aurais une indication beaucoup plus détaillée de ce qui se passe, visible dans le LogCat

}catch (Exception e) {
 Log.d("MonTag", "erreur scan devices", e);
 message = "erreur : " + e.getMessage();
}

Lien vers le commentaire
Partager sur d’autres sites

Rejoignez la conversation

Vous pouvez poster maintenant et vous enregistrez plus tard. Si vous avez un compte, connectez-vous maintenant pour poster.

Invité
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Répondre à ce sujet…

×   Collé en tant que texte enrichi.   Coller en tant que texte brut à la place

  Seulement 75 émoticônes maximum sont autorisées.

×   Votre lien a été automatiquement intégré.   Afficher plutôt comme un lien

×   Votre contenu précédent a été rétabli.   Vider l’éditeur

×   Vous ne pouvez pas directement coller des images. Envoyez-les depuis votre ordinateur ou insérez-les depuis une URL.

×
×
  • Créer...