Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package com.example.trackgps.fragments;
- import android.annotation.SuppressLint;
- import android.bluetooth.BluetoothAdapter;
- import android.bluetooth.BluetoothDevice;
- import android.bluetooth.BluetoothSocket;
- import android.os.Bundle;
- import android.os.Handler;
- import android.support.annotation.NonNull;
- import android.support.v4.app.Fragment;
- import android.util.Log;
- import android.view.LayoutInflater;
- import android.view.View;
- import android.view.ViewGroup;
- import android.widget.AdapterView;
- import android.widget.ArrayAdapter;
- import android.widget.Button;
- import android.widget.CompoundButton;
- import android.widget.ListView;
- import android.widget.Switch;
- import android.widget.TextView;
- import android.widget.Toast;
- import com.example.trackgps.R;
- import java.io.IOException;
- import java.io.InputStream;
- import java.lang.reflect.InvocationTargetException;
- import java.lang.reflect.Method;
- import java.util.Objects;
- public class SettingsFragment extends Fragment {
- final int RECIEVE_MESSAGE = 1;
- BluetoothSocket clientSocket;
- InputStream inputStream = null;
- Handler h;
- //private OnSaveListener onSaveListener;
- @SuppressLint("HandlerLeak")
- @Override
- public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
- //Заполнение контейнера Activity фрагментом
- View view = inflater.inflate(R.layout.settings_fragment, container, false);
- //получение стандартного адаптера блютуз
- final BluetoothAdapter mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
- //массив для списка блютуз устройств
- int deviceArraySize = mBluetoothAdapter.getBondedDevices().size();
- String[] bluetoothDeviseList = new String[deviceArraySize];
- //объекты интерфейса
- ListView lv_bluetooth = view.findViewById(R.id.lv_bluetooth);
- Switch s_bluetooth = view.findViewById(R.id.s_bluetooth);
- Button b_save = view.findViewById(R.id.b_save);
- //если блютуз включен - включить переключатель
- s_bluetooth.setChecked(mBluetoothAdapter.isEnabled());
- //обработка изменения состояния переключателя
- s_bluetooth.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
- @Override
- public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
- if (isChecked) {
- mBluetoothAdapter.enable();//включить блютуз
- } else
- mBluetoothAdapter.disable();//выключить
- }
- });
- //формирование списка устройств в виде ИМЯ(МАК_АДРЕС)
- for (int i = 0; i < deviceArraySize; i++) {
- String deviceMAC = Objects.requireNonNull(mBluetoothAdapter.getBondedDevices().toArray())[i].toString();
- String deviceName = mBluetoothAdapter.getRemoteDevice(deviceMAC).getName();
- bluetoothDeviseList[i] = deviceName + " (" + deviceMAC + ")";
- }
- //подключение списка устройств к объекту списка
- lv_bluetooth.setAdapter(new ArrayAdapter<>(Objects.requireNonNull(getContext()), android.R.layout.simple_list_item_1, bluetoothDeviseList));
- //обработка нажатий на элементы списка
- lv_bluetooth.setOnItemClickListener(new AdapterView.OnItemClickListener() {
- @Override
- public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
- String listItemText = ((TextView) view).getText().toString();
- String deviceMACSubstr = listItemText.substring(listItemText.indexOf("(") + 1, listItemText.length() - 1);//получение значения МАК_АДРЕС из строки ИМЯ(МАК_АДРЕС)
- Log.d("MAC_LOG", deviceMACSubstr);
- try {
- BluetoothDevice deviceGPS = mBluetoothAdapter.getRemoteDevice(deviceMACSubstr); //попытка подключения к устройству по MAC
- Method m = deviceGPS.getClass().getMethod("createRfcommSocket", int.class); //открытие сокета
- clientSocket = (BluetoothSocket) m.invoke(deviceGPS, 1);
- clientSocket.connect(); //подключение
- } catch (IOException e) { //обработка исключений
- Log.d("BLUETOOTH_LOG", e.getMessage());
- } catch (SecurityException e) {
- Log.d("BLUETOOTH_LOG", e.getMessage());
- } catch (NoSuchMethodException e) {
- Log.d("BLUETOOTH_LOG", e.getMessage());
- } catch (IllegalArgumentException e) {
- Log.d("BLUETOOTH_LOG", e.getMessage());
- } catch (IllegalAccessException e) {
- Log.d("BLUETOOTH_LOG", e.getMessage());
- } catch (InvocationTargetException e) {
- Log.d("BLUETOOTH_LOG", e.getMessage());
- }
- //проверка подключение и вывод результата на экран
- if (clientSocket.isConnected())
- Toast.makeText(getContext(), R.string.connected, Toast.LENGTH_SHORT).show(); //соединено
- else
- Toast.makeText(getContext(), R.string.not_connected, Toast.LENGTH_SHORT).show(); //не соединено
- }
- });
- //используется для получения данных из побочного потока и их вывод в UI-поток
- h = new Handler() {
- public void handleMessage(android.os.Message msg) {
- if (msg.what == RECIEVE_MESSAGE) {//по факту, сейчас просто вывод в лог полученные данные
- Log.d("HANDLER_LOG", String.valueOf(msg.obj));
- Log.d("HANDLER_LOG", "------");
- }
- }
- };
- //обработка нажатия на кнопку "сохранить"
- b_save.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- //получение входного потока данных, если подключение к устройству удалось
- if (clientSocket != null) {
- try {
- inputStream = clientSocket.getInputStream();
- } catch (IOException e) {
- e.printStackTrace();
- }
- //создание побочного потока для обработки входящий данных
- new Thread(new Runnable() {
- @Override
- public void run() {
- while (true) {
- StringBuilder result;
- try {
- result = new StringBuilder();
- char inputChar = 0;
- while (inputChar != (char) 13) { //получение данных до символа перевода каретки
- inputChar = (char) inputStream.read();
- result.append(inputChar);
- }
- inputStream.skip(1);//пропуск символа возврата каретки
- h.obtainMessage(RECIEVE_MESSAGE, result).sendToTarget();//отправка данных в UI-поток
- } catch (IOException e) {
- break;
- }
- }
- }
- }).start();
- }
- //onSaveListener.onSave();
- else
- Toast.makeText(getContext(), R.string.choose_device, Toast.LENGTH_LONG).show();//предупреждение о необходимости выбрать устройство, если это не было сделано
- }
- });
- return view;
- }
- /*@Override
- public void onAttach(Context context) {
- super.onAttach(context);
- onSaveListener = (OnSaveListener) context;
- }*/
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement