2016-08-10 1 views
1

J'ai une classe qui était utilisée pour coupler et se connecter à un périphérique Bluetooth. J'utilise Android 6.0 pour l'implémenter. L'application a deux boutons qui sont pour la fonction de paire et de connexion. Cela a bien fonctionné pour la fonction de paire. Cependant, je ne peux pas implémenter la fonction de connexion. J'ai regardé un exemple de connexion Bluetooth, mais ils ne fonctionnent pas quand je l'ai utilisé dans cette classe. S'il vous plaît regardez ma classe et donnez-moi une direction pour la mettre en œuvre? Merci à tousComment se connecter à un périphérique Bluetooth lorsqu'ils sont couplés?

enter image description here

public class DeviceListActivity extends Activity { 
    private ListView mListView; 
    private DeviceListAdapter mAdapter; 
    private ArrayList<BluetoothDevice> mDeviceList; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     setContentView(R.layout.activity_paired_devices); 

     mDeviceList  = getIntent().getExtras().getParcelableArrayList("device.list"); 

     mListView  = (ListView) findViewById(R.id.lv_paired); 

     mAdapter  = new DeviceListAdapter(this); 

     mAdapter.setData(mDeviceList); 
     mAdapter.setPairListener(new DeviceListAdapter.OnPairButtonClickListener() { 
      @Override 
      public void onPairButtonClick(int position) { 
       BluetoothDevice device = mDeviceList.get(position); 

       if (device.getBondState() == BluetoothDevice.BOND_BONDED) { 
        unpairDevice(device); 
       } else { 
        showToast("Pairing..."); 

        pairDevice(device); 
       } 
      } 

     }); 
     mAdapter.setConnectListener(new DeviceListAdapter.OnConnectButtonClickListener() { 
      @Override 
      public void onConnectButtonClick(int position) { 
      //Connect bluetooth 
      } 

     }); 
     mListView.setAdapter(mAdapter); 

     registerReceiver(mPairReceiver, new IntentFilter(BluetoothDevice.ACTION_BOND_STATE_CHANGED)); 
    } 

    @Override 
    public void onDestroy() { 
     unregisterReceiver(mPairReceiver); 

     super.onDestroy(); 
    } 


    private void showToast(String message) { 
     Toast.makeText(getApplicationContext(), message, Toast.LENGTH_SHORT).show(); 
    } 

    private void pairDevice(BluetoothDevice device) { 
     try { 
      Method method = device.getClass().getMethod("createBond", (Class[]) null); 
      method.invoke(device, (Object[]) null); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 

    private void unpairDevice(BluetoothDevice device) { 
     try { 
      Method method = device.getClass().getMethod("removeBond", (Class[]) null); 
      method.invoke(device, (Object[]) null); 

     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 
    private void connectDevice(BluetoothDevice device) { 
    // Connect bluetooth 
    } 

    private final BroadcastReceiver mPairReceiver = new BroadcastReceiver() { 
     public void onReceive(Context context, Intent intent) { 
      String action = intent.getAction(); 

      if (BluetoothDevice.ACTION_BOND_STATE_CHANGED.equals(action)) { 
       final int state  = intent.getIntExtra(BluetoothDevice.EXTRA_BOND_STATE, BluetoothDevice.ERROR); 
       final int prevState = intent.getIntExtra(BluetoothDevice.EXTRA_PREVIOUS_BOND_STATE, BluetoothDevice.ERROR); 

       if (state == BluetoothDevice.BOND_BONDED && prevState == BluetoothDevice.BOND_BONDING) { 
        showToast("Paired"); 
       } else if (state == BluetoothDevice.BOND_NONE && prevState == BluetoothDevice.BOND_BONDED){ 
        showToast("Unpaired"); 
       } 

       mAdapter.notifyDataSetChanged(); 
      } 
     } 
    }; 
} 
+0

Vous voudrez peut-être jeter un oeil à ceci: https://github.com/omaflak/Bluetooth-Library Bonne chance ;-) –

+1

Merci A. Omar pour lib utile. Cependant, le lib utilisé un UUID fixe. Comment puis-je connaître mon UUID de ma classe? – Jame

+1

Comme dit @ user2560571 l'UUID est similaire à un numéro de port. Je ** pense _ ** vous pouvez le garder comme ça ... –

Répondre

2

Connexion en tant que client est simple. Vous devez d'abord obtenir le socket RFCOMM du BluetoothDevice souhaité en appelant createRfcommSocketToServiceRecord(), en transmettant un UUID, une valeur de 128 bits que vous créez. Le UUID est similaire à un numéro de port

si vous tenez l'appareil Bluetooth dans la liste apparié, vous pouvez simplement utiliser cette classe pour s'y connecter,

public class ConnectThread extends Thread{ 
    private BluetoothSocket bTSocket; 

    public boolean connect(BluetoothDevice bTDevice, UUID mUUID) { 
     BluetoothSocket temp = null; 
     try { 
      temp = bTDevice.createRfcommSocketToServiceRecord(mUUID); 
     } catch (IOException e) { 
      Log.d("CONNECTTHREAD","Could not create RFCOMM socket:" + e.toString()); 
      return false; 
     } 
     try { 
      bTSocket.connect(); 
     } catch(IOException e) { 
      Log.d("CONNECTTHREAD","Could not connect: " + e.toString()); 
      try { 
       bTSocket.close(); 
      } catch(IOException close) { 
       Log.d("CONNECTTHREAD", "Could not close connection:" + e.toString()); 
       return false; 
      } 
     } 
     return true; 
    } 

    public boolean cancel() { 
     try { 
      bTSocket.close(); 
     } catch(IOException e) { 
      Log.d("CONNECTTHREAD","Could not close connection:" + e.toString()); 
      return false; 
     } 
     return true; 
    } 
} 

Je suggère d'utiliser ce tutoriel comme une start-up point à apprendre et en savoir plus sur la façon dont fonctionne Bluetooth dans Android.

http://code.tutsplus.com/tutorials/create-a-bluetooth-scanner-with-androids-bluetooth-api--cms-24084

+0

Merci. Je connaissais la classe. Comment puis-je l'appeler dans ma classe lorsque je clique sur la fonction Connect. Il est effectué dans la fonction onConnectButtonClick? – Jame