Androidフォン(samsung galaxy s2)からLinuxを実行しているPCのPythonスクリプトに「helloWorld」(単なる文字列)を送信しようとしています。しかし、私はそれを機能させることができません。以下は、Android アプリ (クライアント) と Python スクリプト (サーバー) のコードです。Bluetooth は PC と電話で正常に動作しています (たとえば、電話から BT 経由で写真を送信できます)。btSocket.connect(); を呼び出すと、以下のJavaコードでは、接続できません。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()
.