そこで、GUI クラスを持つアプリケーションを作成しました。このアプリケーションは、トグルボタンがアクティブになったときに作成した別のアプリケーションからの 2 つの着信文字列をリッスンします。私が頭を悩ませているのは、着信バイトを読み取り、コードを介してGUIクラスで使用されている場所に戻す方法です。誰かが助けてくれることを願っています。
2 つの文字列を送信すると、両方のバイトを取得してから最初の文字列を送信し、「%」文字列のバイトを取得して区切り文字として送信し、2 番目の文字列を送信します。
public void ListenForAddress(View view)
{
on = ((ToggleButton) view).isChecked();
if(on)
{
Address address = reciever.RecieveObject();
Intent intent = new Intent(this, Screen3.class);
String adressStr = address.Address;
intent.putExtra("ADRESS_MESSAGE", adressStr);
String postalcodeStr = address.Postalcode;
intent.putExtra("POSTALCODE_MESSAGE", postalcodeStr);
intent.putExtra("ONE", 1);
startActivity(intent);
}
else
{
reciever.closeReception();
}
}
ご覧のとおり、レシーバーを作成し、それを使用して RecieveObject() というメソッドを呼び出します。このメソッドは次のようになります。
public Address RecieveObject()
{
accThread = new AcceptThread();
accThread.start();
return null;
}
次のステップは、接続を作成し、管理スレッドを開始するスレッドです。
public class AcceptThread extends Thread {
public AcceptThread() {
BluetoothServerSocket tmp = null;
try {
tmp = mBluetoothAdapter.listenUsingRfcommWithServiceRecord("Server", MY_UUID);
} catch (IOException e) { }
mmServerSocket = tmp;
}
public void run() {
BluetoothSocket socket = null;
while (true) {
try {
socket = mmServerSocket.accept();
} catch (IOException e) {
break;
}
// If a connection was accepted
if (socket != null) {
mConnSock = new manageConnectedSocket(socket);
mConnSock.read();
try {
mmServerSocket.close();
} catch (IOException e) {
}
break;
}
}
}
}
最後のステップは、データを処理するスレッドです
public class manageConnectedSocket extends Thread {
public manageConnectedSocket(BluetoothSocket socket) {
mmSocket = socket;
InputStream tmpIn = null;
try {
tmpIn = socket.getInputStream();
} catch (IOException e) { }
mmInStream = tmpIn;
}
public Address read() {
byte[] buffer = new byte[1024];
int bytes;
Address address = new Address("", "");
int count = 0;
while(count<2)
{
try {
bytes = mmInStream.read(buffer);
if(count==0)
{
address.Address = new String(buffer);
}
else
{
address.Postalcode = new String(buffer);
}
buffer = new byte[1024];
} catch (IOException e) {
break;
}
}
return address;
}
}