Advertisement
dsfsaegf

Untitled

Jun 26th, 2019
131
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.74 KB | None | 0 0
  1. package com.example.trackgps.fragments;
  2.  
  3. import android.annotation.SuppressLint;
  4. import android.bluetooth.BluetoothAdapter;
  5. import android.bluetooth.BluetoothDevice;
  6. import android.bluetooth.BluetoothSocket;
  7. import android.os.Bundle;
  8. import android.os.Handler;
  9. import android.support.annotation.NonNull;
  10. import android.support.v4.app.Fragment;
  11. import android.util.Log;
  12. import android.view.LayoutInflater;
  13. import android.view.View;
  14. import android.view.ViewGroup;
  15. import android.widget.AdapterView;
  16. import android.widget.ArrayAdapter;
  17. import android.widget.Button;
  18. import android.widget.CompoundButton;
  19. import android.widget.ListView;
  20. import android.widget.Switch;
  21. import android.widget.TextView;
  22. import android.widget.Toast;
  23.  
  24. import com.example.trackgps.R;
  25.  
  26. import java.io.IOException;
  27. import java.io.InputStream;
  28. import java.lang.reflect.InvocationTargetException;
  29. import java.lang.reflect.Method;
  30. import java.util.Objects;
  31.  
  32. public class SettingsFragment extends Fragment {
  33. final int RECIEVE_MESSAGE = 1;
  34. BluetoothSocket clientSocket;
  35. InputStream inputStream = null;
  36. Handler h;
  37. //private OnSaveListener onSaveListener;
  38.  
  39. @SuppressLint("HandlerLeak")
  40. @Override
  41.  
  42. public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
  43. //Заполнение контейнера Activity фрагментом
  44. View view = inflater.inflate(R.layout.settings_fragment, container, false);
  45. //получение стандартного адаптера блютуз
  46. final BluetoothAdapter mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
  47. //массив для списка блютуз устройств
  48. int deviceArraySize = mBluetoothAdapter.getBondedDevices().size();
  49. String[] bluetoothDeviseList = new String[deviceArraySize];
  50. //объекты интерфейса
  51. ListView lv_bluetooth = view.findViewById(R.id.lv_bluetooth);
  52. Switch s_bluetooth = view.findViewById(R.id.s_bluetooth);
  53. Button b_save = view.findViewById(R.id.b_save);
  54.  
  55. //если блютуз включен - включить переключатель
  56. s_bluetooth.setChecked(mBluetoothAdapter.isEnabled());
  57. //обработка изменения состояния переключателя
  58. s_bluetooth.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
  59. @Override
  60. public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
  61. if (isChecked) {
  62. mBluetoothAdapter.enable();//включить блютуз
  63. } else
  64. mBluetoothAdapter.disable();//выключить
  65. }
  66. });
  67.  
  68. //формирование списка устройств в виде ИМЯ(МАК_АДРЕС)
  69. for (int i = 0; i < deviceArraySize; i++) {
  70. String deviceMAC = Objects.requireNonNull(mBluetoothAdapter.getBondedDevices().toArray())[i].toString();
  71. String deviceName = mBluetoothAdapter.getRemoteDevice(deviceMAC).getName();
  72. bluetoothDeviseList[i] = deviceName + " (" + deviceMAC + ")";
  73. }
  74.  
  75. //подключение списка устройств к объекту списка
  76. lv_bluetooth.setAdapter(new ArrayAdapter<>(Objects.requireNonNull(getContext()), android.R.layout.simple_list_item_1, bluetoothDeviseList));
  77. //обработка нажатий на элементы списка
  78. lv_bluetooth.setOnItemClickListener(new AdapterView.OnItemClickListener() {
  79. @Override
  80. public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
  81. String listItemText = ((TextView) view).getText().toString();
  82. String deviceMACSubstr = listItemText.substring(listItemText.indexOf("(") + 1, listItemText.length() - 1);//получение значения МАК_АДРЕС из строки ИМЯ(МАК_АДРЕС)
  83. Log.d("MAC_LOG", deviceMACSubstr);
  84. try {
  85. BluetoothDevice deviceGPS = mBluetoothAdapter.getRemoteDevice(deviceMACSubstr); //попытка подключения к устройству по MAC
  86. Method m = deviceGPS.getClass().getMethod("createRfcommSocket", int.class); //открытие сокета
  87. clientSocket = (BluetoothSocket) m.invoke(deviceGPS, 1);
  88. clientSocket.connect(); //подключение
  89. } catch (IOException e) { //обработка исключений
  90. Log.d("BLUETOOTH_LOG", e.getMessage());
  91. } catch (SecurityException e) {
  92. Log.d("BLUETOOTH_LOG", e.getMessage());
  93. } catch (NoSuchMethodException e) {
  94. Log.d("BLUETOOTH_LOG", e.getMessage());
  95. } catch (IllegalArgumentException e) {
  96. Log.d("BLUETOOTH_LOG", e.getMessage());
  97. } catch (IllegalAccessException e) {
  98. Log.d("BLUETOOTH_LOG", e.getMessage());
  99. } catch (InvocationTargetException e) {
  100. Log.d("BLUETOOTH_LOG", e.getMessage());
  101. }
  102.  
  103. //проверка подключение и вывод результата на экран
  104. if (clientSocket.isConnected())
  105. Toast.makeText(getContext(), R.string.connected, Toast.LENGTH_SHORT).show(); //соединено
  106. else
  107. Toast.makeText(getContext(), R.string.not_connected, Toast.LENGTH_SHORT).show(); //не соединено
  108. }
  109. });
  110.  
  111.  
  112. //используется для получения данных из побочного потока и их вывод в UI-поток
  113. h = new Handler() {
  114. public void handleMessage(android.os.Message msg) {
  115. if (msg.what == RECIEVE_MESSAGE) {//по факту, сейчас просто вывод в лог полученные данные
  116. Log.d("HANDLER_LOG", String.valueOf(msg.obj));
  117. Log.d("HANDLER_LOG", "------");
  118. }
  119. }
  120. };
  121.  
  122. //обработка нажатия на кнопку "сохранить"
  123. b_save.setOnClickListener(new View.OnClickListener() {
  124. @Override
  125. public void onClick(View v) {
  126. //получение входного потока данных, если подключение к устройству удалось
  127. if (clientSocket != null) {
  128. try {
  129. inputStream = clientSocket.getInputStream();
  130. } catch (IOException e) {
  131. e.printStackTrace();
  132. }
  133. //создание побочного потока для обработки входящий данных
  134. new Thread(new Runnable() {
  135. @Override
  136. public void run() {
  137. while (true) {
  138. StringBuilder result;
  139. try {
  140. result = new StringBuilder();
  141. char inputChar = 0;
  142. while (inputChar != (char) 13) { //получение данных до символа перевода каретки
  143. inputChar = (char) inputStream.read();
  144. result.append(inputChar);
  145. }
  146. inputStream.skip(1);//пропуск символа возврата каретки
  147. h.obtainMessage(RECIEVE_MESSAGE, result).sendToTarget();//отправка данных в UI-поток
  148. } catch (IOException e) {
  149. break;
  150. }
  151. }
  152. }
  153. }).start();
  154. }
  155. //onSaveListener.onSave();
  156. else
  157. Toast.makeText(getContext(), R.string.choose_device, Toast.LENGTH_LONG).show();//предупреждение о необходимости выбрать устройство, если это не было сделано
  158. }
  159. });
  160.  
  161. return view;
  162. }
  163.  
  164. /*@Override
  165. public void onAttach(Context context) {
  166. super.onAttach(context);
  167. onSaveListener = (OnSaveListener) context;
  168. }*/
  169. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement