我正在尝试从我的安卓手机(三星Galaxy S2)向运行Linux的PC上的Python脚本发送“helloWorld”(仅为字符串),但无法使其正常工作。以下是安卓应用程序(客户端)和Python脚本(服务器端)的代码。PC和手机上的蓝牙都可以正常工作(例如,我可以通过蓝牙从手机发送照片)。在下面的Java代码中调用btSocket.connect();时,它就不能连接。我是否需要指定要连接的端口,因为我已经为serverSocket指定了端口?任何帮助将不胜感激。
public class BlueTooth_testActivity extends Activity {
TextView header;
Button discoverDevicesBtn;
Button sendMsgBtn;
Button closeBtn;
EditText sendTxt;
BluetoothAdapter btAdapter;
BluetoothSocket btSocket;
private static String btAdress = "00:10:60:D1:95:CD";
private static final UUID MY_UUID = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB");
private OutputStream out;
public BluetoothDevice device;
private Boolean CONNECTED = false;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
//init layout parameters
header = (TextView) findViewById(R.id.text1);
discoverDevicesBtn = (Button) findViewById(R.id.discBtn);
sendMsgBtn = (Button) findViewById(R.id.sendButton);
closeBtn = (Button) findViewById(R.id.closeButton);
sendTxt = (EditText) findViewById(R.id.editText1);
discoverDevicesBtn.setOnClickListener(discoverDeviceListener);
sendMsgBtn.setOnClickListener(sendMsgListener);
closeBtn.setOnClickListener(closeBtnListener);
//init bluetooth
btAdapter = BluetoothAdapter.getDefaultAdapter();
if (btAdapter.isEnabled()) {
Toast.makeText(this, "Bluetooth state:" + btAdapter.getState() + " Ok!", Toast.LENGTH_LONG).show();
} else {
Toast.makeText(this, "Bluetooth state:" + btAdapter.getState() + " Not ok!", Toast.LENGTH_LONG).show();
}
}
private Button.OnClickListener discoverDeviceListener = new Button.OnClickListener() {@Override
public void onClick(View v) {
if (!CONNECTED) {
device = btAdapter.getRemoteDevice(btAdress);
header.append("\nRemote device: " + device.getName());
try {
btSocket = device.createRfcommSocketToServiceRecord(MY_UUID);
} catch (Exception e) {
}
header.append("\n createRfcommsockettoservice! ");
btAdapter.cancelDiscovery();
try {
btSocket.connect();
CONNECTED = true;
header.append("\n btSocket Created!");
} catch (IOException e) {
Toast.makeText(getApplicationContext(), "Could not connect to socket", Toast.LENGTH_LONG);
try {
btSocket.close();
} catch (Exception b) {}
}
}
}
};
private Button.OnClickListener sendMsgListener = new Button.OnClickListener() {@Override
public void onClick(View v) {
if (CONNECTED) {
try {
out = btSocket.getOutputStream();
String msg = sendTxt.getText().toString();
byte[] msgBffr = msg.getBytes();
out.write(msgBffr);
Toast.makeText(getApplicationContext(), "Message sent", Toast.LENGTH_LONG).show();
} catch (Exception a) {
Toast.makeText(getApplicationContext(), "Could not send msg", Toast.LENGTH_LONG).show();
}
} else {
Toast.makeText(getApplicationContext(), "cant send msg, not connected", Toast.LENGTH_LONG).show();
}
}
};
}
(由于问题在连接设置中某处,我没有费心包含Java代码的其余部分)
import bluetooth
name="bt_server"
target_name="siggen"
uuid="00001101-0000-1000-8000-00805F9B34FB"
def runServer():
serverSocket=bluetooth.BluetoothSocket(bluetooth.RFCOMM )
port=bluetooth.PORT_ANY
serverSocket.bind(("",port))
print "Listening for connections on port: ", port
serverSocket.listen(1)
port=serverSocket.getsockname()[1]
inputSocket, address=serverSocket.accept()
print "Got connection with" , address
data=inputSocket.recv("1024")
print "received [%s] \n " % data
inputSocket.close()
serverSocket.close()
runServer()
.