Android-приложение остается подключенным к HC-05, даже если оно было отключено от телефона Bluetooth - PullRequest
0 голосов
/ 30 октября 2019

Я создал приложение для Android с помощью Android Studio (Java), в него интегрированы функции BlueTooth, и мое приложение успешно подключается к устройству HC-05 через BlueTooth. Мое приложение остается подключенным к устройству HC-05, даже если мой телефон находится вне зоны действия устройства HC-05.
Ниже приведен код, который реализует подключение к устройству HC-05.

package com.example.passengersafety;

import androidx.appcompat.app.AppCompatActivity;

import android.app.ProgressDialog;
import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothDevice;
import android.bluetooth.BluetoothSocket;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;
import java.io.IOException;
import java.util.UUID;

public class ConnectedDevice extends AppCompatActivity {
    Button btnDis;
    String address = null;
    TextView connectedDevice;
    private ProgressDialog progress;
    BluetoothAdapter myBluetooth = null;
    BluetoothSocket btSocket = null;
    private boolean isBtConnected = false;
    private BluetoothReceiver b;
    static final UUID myUUID = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB");

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

        Intent intent = getIntent();
        address = intent.getStringExtra(PairedDevices.EXTRA_ADDRESS);

        setContentView(R.layout.activity_connected_device);

        btnDis = findViewById(R.id.disconnect_button);
        connectedDevice = findViewById(R.id.connected_device_text);

        new ConnectBT().execute();

        btnDis.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Disconnect();
            }
        });        


    }
    @Override
    protected void onDestroy(){
        super.onDestroy();
        unregisterReceiver(b);
    }
    private void Disconnect () {
        if (btSocket!=null ) {
            try {
                btSocket.close();
            }
            catch(IOException e)
            {
                msg("Error");
            }
        }
        finish();
    }

    private void msg (String s) {
        Toast.makeText(getApplicationContext(), s, Toast.LENGTH_LONG).show();
    }

    private class ConnectBT extends AsyncTask<Void, Void, Void> {
        private boolean ConnectSuccess = true;

        @Override
        protected  void onPreExecute () {
            progress = ProgressDialog.show(ConnectedDevice.this, "Connecting...", "Please Wait!!!");
        }

        @Override
        protected Void doInBackground (Void... devices) {
            try {
                if ( btSocket==null || !isBtConnected ) {
                    myBluetooth = BluetoothAdapter.getDefaultAdapter();
                    BluetoothDevice remoteDevice = myBluetooth.getRemoteDevice(address);

                    btSocket = remoteDevice.createInsecureRfcommSocketToServiceRecord(myUUID);
                    BluetoothAdapter.getDefaultAdapter().cancelDiscovery();
                    btSocket.connect();
                }
            } catch (IOException e) {
                ConnectSuccess = false;
            }
            return null;
        }
        @Override
        protected void onPostExecute (Void result) {
            super.onPostExecute(result);

            if (!ConnectSuccess) {
                msg("Connection Failed. Make sure your device is in range");
                finish();

            }
            else {

                msg("Connected");
                isBtConnected = true;
            }
            progress.dismiss();
        }
    }


}

 

Когда телефон выходит из зоны действия устройства HC-05, я хочу отправить в телефон уведомление о том, что «Соединение потеряно». Любая помощь приветствуется. Заранее спасибо!

...