Jump to content

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

Link to comment
Share on other 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.

Link to comment
Share on other 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"

Link to comment
Share on other 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();
}

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...