Я пытаюсь открыть соединение с моим ноутбуком, у которого есть Bluetooth с моего телефона. В моем ноутбуке работает серверная программа. Мое намерение состояло в том, чтобы установить связь с моим ноутбуком, чтобы посылать некоторые входы непрерывно в том же созданном сокете. Соединение было успешно установлено, и байт был отправлен на сервер, работающий на моем ноутбуке, но после нажатия кнопки отправки ничего не было отправлено.получать команды uing Соединение с Bluetooth-разъемом
Приведенный ниже код отлично подходит для первой попытки. Когда я пытаюсь выполнить повторную отправку, использование того же значения байта подключения не было отправлено. Когда я запускаю свое приложение во второй раз, мой телефон повесился. Я ищу проблемы с памятью, но я не мог найти проблем с памятью. Я что-то пропустил ? Мне нужно что-то сделать.
public class BluetoothActivity extends Activity {
private TextView myLabel;
private EditText myTextbox;
private BluetoothAdapter mBluetoothAdapter;
private BluetoothSocket mmSocket;
private BluetoothDevice mmDevice;
private OutputStream mmOutputStream;
private BufferedOutputStream mbuffStream;
private ProgressDialog progressBar;
private int progressBarStatus;
private Context mContext;
private TextView devicesLabel;
private TextView devices;
private final static int MAX_VALUE = 100;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_bluetooth);
mContext = this;
Button openButton = (Button) findViewById(R.id.open);
Button sendButton = (Button) findViewById(R.id.send);
Button closeButton = (Button) findViewById(R.id.close);
myLabel = (TextView) findViewById(R.id.label);
devicesLabel = (TextView) findViewById(R.id.devicelabel);
devices = (TextView) findViewById(R.id.devices);
myTextbox = (EditText) findViewById(R.id.entry);
mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
// Open Button
openButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
try {
openBTConnection();
} catch (IOException e) {
e.printStackTrace();
}
}
});
// Send Button
sendButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
try {
sendData();
} catch (IOException ex) {
}
}
});
// Close button
closeButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
closeBT();
}
});
}
private void openBTConnection() throws IOException {
UUID uuid = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB"); // Standard
// SerialPortService
// ID
mmSocket = mmDevice.createRfcommSocketToServiceRecord(uuid);
System.out.println("socket " + mmSocket.toString());
if (mmSocket != null) {
mmSocket.connect();
mmOutputStream = mmSocket.getOutputStream();
mbuffStream = new BufferedOutputStream(mmOutputStream, 1);
myLabel.setText("Bluetooth Opened");
} else {
myLabel.setText("No bluetooth device found");
}
}
void sendData() throws IOException {
String msg = myTextbox.getText().toString();
mbuffStream.write(msg.getBytes(), 0, msg.getBytes().length);
mbuffStream.flush();
myLabel.setText("Data Sent");
}
void closeBT() {
try {
if (mmOutputStream != null) {
mmOutputStream.close();
}
if (mbuffStream != null) {
mbuffStream.close();
}
if (mmSocket != null) {
mmSocket.close();
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
myLabel.setText("Bluetooth Closed");
}
@Override
public void onBackPressed() {
closeBT();
finish();
}
}
благодаря Шрирам М
Вы делаете IO в основной теме. Но, кроме этого, я думаю, что это должно сработать. Я бы начал отлаживать обработчик кнопки отправки, а также регистрировать полученные данные в хосте. –
Спасибо Смит. В любом случае я не могу непрерывно отправлять данные. Если я нажму кнопку sendData, данные не будут отправляться второй раз. Из-за этого я использовал Bufferedoutputstream и уменьшил размер до 1 (отправил только один байт данных). – Shriram
Теперь я снова прочитал ваш код, я заметил, что вы используете 'BufferedOutputStream'. В качестве теста вместо этого используйте регулярный базовый (небуферизованный) поток, чтобы исключить проблемы с буферизацией. –