Bluetoothyhteyden muodostaminen koitui projektin haastavimmaksi
osuudeksi. Eri Android-versiot ja puhelimet toimivat eri tavoin kun
muodostetaan laiteyhteyttä. Lisäksi käytettävä Bluetoothrauta ja
Android eivät tykkää toisistaan (http://stackoverflow.com/questions/9052460/with-just-one-particular-bluetooth-spp-module-createrfcommsockettoservicerecor).
Ratkaisuna ongelmaan ohjelmassa käyttäjä voi valita mitä yhdistystapaa käytetään. Jos laiteyhteyksiä ei saa muodostettua, käyttäjä voi vaihtaa yhdistystapaa. Keräsin kaikki löytämäni bluetoothyhdistystavat, joilla jokaiseen testipuhelimeen löytyi oikeat asetukset.
Ratkaisuna ongelmaan ohjelmassa käyttäjä voi valita mitä yhdistystapaa käytetään. Jos laiteyhteyksiä ei saa muodostettua, käyttäjä voi vaihtaa yhdistystapaa. Keräsin kaikki löytämäni bluetoothyhdistystavat, joilla jokaiseen testipuhelimeen löytyi oikeat asetukset.
/** * Luo socketin laitteeseen. Huom! yhdistämisessä paljon eroja eri * laitteiden välillä. Katso API-levelit ja android versioiden vastaavuudet * Androidin nettisivuilta. * * Yhdistystapaa voi muuttaa asetuksista. Oletuksena on neljä erilaista tapaa. Kts. * @param device * * @throws IOException */ private BluetoothSocket createBluetoothSocket(BluetoothDevice device) throws IOException { try { final Method m; BluetoothDevice hxm; Log.i(BT_TAG, "Connection "+ MainActivity.CONNECTION_METHOD); switch (MainActivity.CONNECTION_METHOD) { case RFCOMMSECURE: return device.createRfcommSocketToServiceRecord(REMOTE_UUID); case REFLECTION_RFCOMM: m = device.getClass().getMethod( "createRfcommSocketToServiceRecord", new Class[] { UUID.class }); Log.i(BT_TAG, "createInsecure"); return (BluetoothSocket) m.invoke(device, REMOTE_UUID); case REFLECTION_NOUUID: hxm = BluetoothAdapter.getDefaultAdapter().getRemoteDevice( device.getAddress()); m = hxm.getClass().getMethod("createRfcommSocket", new Class[] { int.class }); return (BluetoothSocket) m.invoke(hxm, Integer.valueOf(1)); case REFLECTION_INSECURE: hxm = BluetoothAdapter.getDefaultAdapter().getRemoteDevice( device.getAddress()); m = hxm.getClass().getMethod("createInsecureRfcommSocket", new Class[] { int.class }); return (BluetoothSocket) m.invoke(hxm, Integer.valueOf(1)); } } catch (Exception e) { Log.e(BT_TAG, "Could not create Insecure RFComm Connection", e); } return device.createRfcommSocketToServiceRecord(REMOTE_UUID); }
Comments
Post a Comment