Intereting Posts
Статистика приложений для Android на сетевом уровне пользователей Android / установлена Как определить, совместимо ли устройство Android с андроидной одеждой RemoteViews setViewVisibility для Android-виджета Android Layout – расширение ImageView для заполнения ширины, но не больше? ViewPager автоматически устанавливает текущую страницу Как перемещать горизонтальный свиток в определенную позицию? Установка Android-приложения через службу OTA Почему SparseIntArray не реализует Map <Integer, Integer>? Как заменить значение в определенном ключе в LinkedHashMap Изменить цвет фона вкладки и удалить границу разделителя между вкладками Андроид, получающий звуковые частоты в реальном времени? Android Studio говорит: «Локальная переменная избыточна» Android: как уведомлять активность, когда представления фрагментов готовы? Почему добавление OnClickListener внутри onBindViewHolder из RecyclerView.Adapter считается плохой практикой? Любой способ организовать идентификатор Android «@ + id /»

Телефон для блокировки сокета Bluetooth

Я разрабатываю приложение для Android. Это приложение должно взаимодействовать с устройством Bluetooth (BT) (отправляя несколько байтов). У меня проблема с отладкой / запуском этого приложения на моем устройстве (Samsung Galaxy mini). Когда я создаю сокет BT и останавливаю отладку, телефон замораживается, и я должен перезапустить его, вытащив аккумулятор. В случае запуска этого приложения (из Eclipse) все в порядке, но когда я пытаюсь запустить его снова, замораживание телефона и приложение не установлены. Если я попытаюсь отключить это приложение вручную до второго запуска, телефон снова замораживается. Вот проблематичный код:

private final BluetoothDevice mmDevice; private UUID uuid; public ConnectionThread(BluetoothDevice device) { Log.d(TAG, "create ConnectionThread"); uuid = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB"); BluetoothSocket tmp = null; mmDevice = device; try { tmp = mmDevice.createRfcommSocketToServiceRecord(uuid); } catch (IOException e) { } mmSocket = tmp; socketConnected = true; } 

Это конструктор потока. Когда я прокомментирую строку

  tmp = mmDevice.createRfcommSocketToServiceRecord(uuid); 

Телефон не замерзает, поэтому проблема заключается в создании сокета (не подключении). Перезапуск телефона после каждой отладки или работы довольно раздражает, и мне еще предстоит сделать много работы.

Если я запустил это приложение с телефона (отключенного от Eclipse), он работает без проблем. Любые идеи, которые могут быть проблемой или как ее исправить? Спасибо.

Solutions Collecting From Web of "Телефон для блокировки сокета Bluetooth"

Я также использую SGSIII mini для разработки. Следующий код хорошо работает для меня:

  private class ConnectThread extends Thread { private final BluetoothSocket mmSocket; private final BluetoothDevice mmDevice; public ConnectThread(BluetoothDevice device) { mmDevice = device; BluetoothSocket tmp = null; // Get a BluetoothSocket for a connection with the // given BluetoothDevice try { //tmp = device.createRfcommSocketToServiceRecord(MY_UUID); tmp = device.createInsecureRfcommSocketToServiceRecord(MY_UUID); } catch (IOException e) { Log.e(LOG_TAG, "create() failed", e); } mmSocket = tmp; Main.myBluetoothSocket = mmSocket; Main.myBluetoothDevice = mmDevice; } @Override public void run() { Log.i(LOG_TAG, "BEGIN mConnectThread"); setName("ConnectThread"); // Always cancel discovery because it will slow down a connection mAdapter.cancelDiscovery(); // Send a failure message back to the Activity Message msg = mHandler.obtainMessage(MESSAGE_TOAST); Log.e(LOG_TAG, "Attempting connection to " + mmSocket.getRemoteDevice().getName()); String ss = "Attempting connection to " + mmSocket.getRemoteDevice().getName(); Bundle bundle = new Bundle(); bundle.putString(TOAST, ss); msg.setData(bundle); mHandler.sendMessage(msg); // Make a connection to the BluetoothSocket try { // This is a blocking call and will only return on a // successful connection or an exception mmSocket.connect(); } catch (IOException e) { Log.e(LOG_TAG, "*+*+*+* Connection Failed"); connectionFailed(); // Close the socket try { mmSocket.close(); } catch (IOException e2) { Log.e(LOG_TAG, "unable to close() socket during connection failure", e2); } // Start the service over to restart listening mode BluetoothCommandService.this.start(); return; } // Reset the ConnectThread because we're done synchronized (BluetoothCommandService.this) { mConnectThread = null; } // Start the connected thread connected(mmSocket, mmDevice); } public void cancel() { try { mmSocket.close(); } catch (IOException e) { Log.e(LOG_TAG, "close() of connect socket failed", e); } } } 

Я также сталкиваюсь с той же проблемой, с которой вы можете использовать метод Reflection, который он будет работать

 Method m = device.getClass().getMethod("createRfcommSocket", new Class[] {int.class}); BluetoothSocket socket = socket = (BluetoothSocket) m.invoke(device, 1);