Intereting Posts
Почему метод onResume будет запущен дважды, если приложение все еще использует метод onCreate? Как создать Webapp для iOS, Android, BBerry, Symbian Android – удаление элемента из списка ListView при длительном нажатии Пейзаж предварительный просмотр макета android xml в Eclipse Android – ItemDecoration иногда уходит или неуместен при добавлении элемента или прокрутки Финишная активность не завершает работу? Android: сохранить имя пользователя в сеансе до выхода из системы «Net :: ERR_CACHE_MISS» при загрузке внешнего URL-адреса в Кордове Android – Как установить изображение обоев? ClassCastException в PreferenceActivity Все фрагменты ViewPager ссылаются на один и тот же RecyclerView и / или Adapter Использование RoboSpice с Jackson2 и Spring Получить только адрес электронной почты из списка контактов Android Как можно сохранить стиль поведения элемента списка по умолчанию для ExpandableListView при представлении группового представления, содержащего больше, чем просто TextView? Укладка контекстной панели действий?

Телефон для блокировки сокета 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), он работает без проблем. Любые идеи, которые могут быть проблемой или как ее исправить? Спасибо.

Я также использую 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);