Witam,
piszę aplikację na Androida która ma za zadanie połączyć się z modułem bluetooth podłączonym do AVR i wysłać dwie zmienne, rozłączyć się i zamknąć aplikację. Niby wszystko działa, program się łączy z modułem, wysyła co ma wysłać i rozłącza się i zamyka. Problem jest gdy chcę drugi raz się połączyć to już się aplikacja z modułem nie może połączyć. Tak jakby moduł nadal był połączony albo się zawieszał bo jak wyłączę układ z modułem BT i go raz jeszcze włączę i włączę aplikację raz jeszcze to się znów wszystko dobrze wykonuje, kolejny raz i już się nie połączy. Wydaje mi się, że muszę mieć coś z aplikacją na Androidzie, bo próbowałem łączyć z modułem BT przez program BlueSoleil i następnie przez program RealTerm wysyłać ręcznie te dwie wartości i rozłączyć w BlueSoleil i znów połaczyć itd. i się mi wtedy łączy za każdym razem.

public class ServiceARC extends IntentService {
    private ControlSystem controlSystem;
    //    private DataARCs dataARC;
    private SaveAndroidSerialFile saveASF;
    private LoadAndroidSerialFile loadASF;
    private String patchFile = "/storage/sdcard0/ARC/arcSetting.ser";
    private DataARC dataARC;
    private Handler handler = new Handler();

/*
    /**
     * Creates an IntentService.  Invoked by your subclass's constructor.
     *
     * @param name Used to name the worker thread, important only for debugging.
     */

    public ServiceARC() {
        super("ServiceARC");
    }

    @Override
    protected void onHandleIntent(Intent intent) {

//        makeToast("dzia");

        loadFile();

        sendBT();

        saveFile();

        controlSystem.close();
        //makeToast("koniec");
        handler.post(new Runnable() {
            @Override
            public void run() {

                makeToast(ServiceARC.this, "koniec");


            }
        });
    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        handler = new Handler();
        return super.onStartCommand(intent, flags, startId);
    }

    // METODA TWORZĄCA TOASTY

    private void  makeToast(Context ctx, String s) {
        Toast t = Toast.makeText(ctx, s, Toast.LENGTH_LONG);
        t.show();
    }

    private void loadFile() {
        loadASF = new LoadAndroidSerialFile(getApplicationContext());
        dataARC = (DataARC) loadASF.loadSerialFile(patchFile);
        if (dataARC == null) {
            dataARC = new DataARC();
        }
        handler.post(new Runnable() {
            @Override
            public void run() {
                if (dataARC.getPositiondoor() == 1)
                    makeToast(ServiceARC.this, "otwieranie");
                else if (dataARC.getPositiondoor() == 0)
                    makeToast(ServiceARC.this, "zamykanie");
            }
        });
    }

    private void sendBT() {
        controlSystem = new ControlSystem(getApplicationContext());

        controlSystem.sendParControl(dataARC.getPositiondoor(), dataARC.getTimeLight() / 10);
    }

    private void saveFile() {
        dataARC.changePositiondoor();
        saveASF = new SaveAndroidSerialFile(getApplicationContext());
        saveASF.saveSerialFile(dataARC, patchFile);

    }
}
public class ControlSystem {
    //Składowe
    private Context ctx;
    private BluetoothService btService;

    public ControlSystem(Context ctx) {
        this.ctx = ctx;
        initBluetooth();
    }

    private void initBluetooth() {
        //
        btService = new BluetoothService(ctx);
        while (!btService.isEnable()) {
        }
        btService.connectBT();

    }

    public void open() {
        btService.sendInt(1);
        btService.sendInt(6);
    }

    public void sendParControl(int position, int timeLight){

                btService.sendInt(position);
                btService.sendInt(timeLight);

    }

    public void CreateReceiveThread() {
        Runnable threadTask = new ReceiveSystem(ctx, btService.getBtSocket());
        Thread myThread = new Thread(threadTask);

        myThread.start();
    }

    public void close(){

        btService.disable();
    }

}
public class BluetoothService {
    // Składowe
    private BluetoothDevice btDevice;
    private BluetoothAdapter btAdapter;
    private BluetoothSocket btSocket;
    private OutputStream os;
    private UUID MY_UUID;
    private Context ctx;

    public BluetoothService(Context ctx) {
        this.ctx = ctx;
        initBT();
        enable();
//        makeToast("inicjalizacja");

    }

    public void enable(){
        btAdapter.enable();
    }

    public void disable(){
        try {
            os.close();
            btSocket.close();

        } catch (IOException e) {
            e.printStackTrace();
        }
        btAdapter.disable();
    }

    public BluetoothSocket getBtSocket() {
        return btSocket;
    }

    public boolean isEnable() {
        //
        if (btAdapter.isEnabled())
            return true;
        else
            return false;
    }

    private void initBT() {  //Inicjalizacja Bluetooth
        //
        btAdapter = BluetoothAdapter.getDefaultAdapter();
        //Ustawienie adresu MAC urządzenia z którym ma się połączyć aplikacja
        btDevice = btAdapter.getRemoteDevice("20:13:08:20:07:80");
        //("B4:62:93:8F:D9:78");     // netbook ("40:61:86:A0:1B:EB") //("20:13:08:20:07:80")
        //
        MY_UUID = UUID.fromString("00001101-0000-1000-8000-00805f9b34fb");

    }

    public void connectBT() {
        btAdapter.cancelDiscovery();
        try {
            btSocket = btDevice.createInsecureRfcommSocketToServiceRecord(MY_UUID);
            btSocket.connect();
            os = btSocket.getOutputStream();
        /* INFORMACJA CZY SOCKET SIE POŁĄCZYŁ
            if (btSocket.isConnected())
                makeToast("działa");
            else
                makeToast("nie działa");
        */
        } catch (IOException e) {
            os = null;
//            makeToast("Blad poloczenia   " + e);

        }

    }


    public void sendString(String s) {

        try {
            byte[] b = s.getBytes();
            os.write(b);
            os.flush();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

    void sendInt(int i) {
        while (true) {
            if (btSocket != null) {
                if (btSocket.isConnected()) {
                    try {
                        os.write(i);
                        os.flush();
                        break;
                    } catch (IOException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                        break;
                    }
                }
            }
        }
    }

    // METODA TWORZĄCA TOASTY
    private void makeToast(String s) {
        Toast t = Toast.makeText(ctx, s, Toast.LENGTH_LONG);
        t.show();
    }
public boolean btIsConnected(){
    if (btSocket.isConnected())
        return true;
    else
        return false;
}
    public void testRun() {

        //
        connectBT();
        while (true) {
            if (btSocket != null) {
                if (btSocket.isConnected()) {
                    //
                    sendInt(10);
                    break;
                }
            }
        }


        //sendInt(10);
        btAdapter.disable();
    }


}
```xml
Logcat pokazuje mi coś takiego:

05-01 2054.023 29999-30013/lolo.androidremotecar.androidremotecar.app W/BluetoothAdapter﹕ getBluetoothService() called with no BluetoothManagerCallback
05-01 2054.027 29999-30013/lolo.androidremotecar.androidremotecar.app D/BluetoothSocket﹕ connect(), SocketState: INIT, mPfd: {ParcelFileDescriptor: FileDescriptor[54]}