Black Friday je tu! Využij jedinečnou příležitost a získej až 80 % znalostí navíc zdarma! Více zde
Aktualizovali jsme provozní podmínky. Pokračováním užívání sítě s nimi projevíte souhlas.
BF extended 2022
Avatar
Petr Vaňásek:8.6.2020 23:17

Ahoj,

Pokouším se o spojení tabletu s Arduinem přes Bluetooth. Můžete prosím mrknout na můj kód a zasvětit mě do světa Bluetooth? :D
Přijde mi to podobné jako TCP ale fígle nefungují :D

Adaptér, Device je okey ale když se to má připojit (socket.connect) tak Error...že vypršel čas připojení nebo tak.

Pro testování mám spárované jen jedno zařízení abych ho mohl v kódu lehce najít.

Nemá s tím někdo prosím zkušenost?

Díky moc za odpověď. :D

S pozdravem

Petr

Zkusil jsem:

public class MainActivity extends AppCompatActivity
{

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

    public void LockEnable()
    {
        BluetoothAdapter adapter = BluetoothAdapter.getDefaultAdapter();

        BluetoothDevice bd=null;

        Set<BluetoothDevice> pairedDevices=adapter.getBondedDevices();

        if (pairedDevices.size()>0)
        {
            for(BluetoothDevice device : pairedDevices)
            {
                bd=device;
                Log.w("Device",bd.getName());
            }
        }

        boolean lock_on=false;
        BluetoothSocket mBTSocket=null;
        try
        {
            mBTSocket=bd.createInsecureRfcommSocketToServiceRecord(UUID.fromString("a60f35f0-b93a-11de-8a39-08002009c666"));
        }
        catch (IOException e)
        {
            e.printStackTrace();
        }
        adapter.cancelDiscovery();

        try
        {
            mBTSocket.connect(); //Dále se už nic neprovede a hodí...že čas připojení vypršel.
        }
        catch (IOException e)
        {
            try
            {
                mBTSocket.close();

            }
            catch (IOException e1)
            {
                e1.printStackTrace();
            }
            e.printStackTrace();
            lock_on=false;
            return;
        }

        try
        {
            OutputStream out=mBTSocket.getOutputStream();
            String message="aaa";
            byte[] buffer= message.getBytes();
            out.write(buffer);
        }
        catch (IOException e)
        {
            e.printStackTrace();
        }
        lock_on=true;
        return;

    }
}
 
Odpovědět
8.6.2020 23:17
Avatar
Petr Štechmüller
Překladatel
Avatar
Odpovídá na Petr Vaňásek
Petr Štechmüller:9.6.2020 7:01

Ahoj, to co máš napsané je docela špatně.
Nemůžeš v hlavním vlákně aplikace dělat takové psí kusy. O komunikaci přes bluetooth by se měla starat samostatná služba.

Jednu takovou jsem někde sehnal a lehce si ji upravil. Kód je tady: https://github.com/…Service.java

Zobrazení spárovaných zařízení: https://github.com/…ctivity.java

Používání toho bluetooth si najdi tady: https://github.com/…ctivity.java

Když budeš mít jakékoliv dotazy, rád je zodpovím. Ještě drobnost. Je to kód z bakalářky, kterou jsem psal tři roky zpátky. Je možné, že tam používám na dnešní dobu již zastaralé techniky. Hodně štěstí :-)

Editováno 9.6.2020 7:02
Nahoru Odpovědět
9.6.2020 7:01
Pokud spolu kód a komentář nekorespondují, budou patrně oba chybné
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 2 zpráv z 2.