質問編集履歴
2
エラーが発生する箇所を追記
test
CHANGED
File without changes
|
test
CHANGED
@@ -241,3 +241,77 @@
|
|
241
241
|
|
242
242
|
|
243
243
|
スレッドの理解が及ばないまま`mSocket = mServerSocket.Accept();`を動かそうとしていましたが、ドキュメントを読むとAccept()は別スレッドでコールバックを受け付けないといけないとのことで、挫折しました。
|
244
|
+
|
245
|
+
|
246
|
+
|
247
|
+
|
248
|
+
|
249
|
+
### 追記(9/11)
|
250
|
+
|
251
|
+
f-miyuさんのご回答を参考に動かしてみましたが、機器の接続のところでIOExceptionが発生(Connect()メソッドがタイムアウトする)し、スレッドに関する動きを確認できていません。
|
252
|
+
|
253
|
+
ソース全体は[github](https://github.com/johta/XF-BT)にあげています。問題が発生しているのは以下のメソッドです。
|
254
|
+
|
255
|
+
```BluetoothManager
|
256
|
+
|
257
|
+
private void openDeviceConnection(BluetoothDevice btDevice)
|
258
|
+
|
259
|
+
{
|
260
|
+
|
261
|
+
try
|
262
|
+
|
263
|
+
{
|
264
|
+
|
265
|
+
mSocket = btDevice.CreateRfcommSocketToServiceRecord(getUUIDFromString());
|
266
|
+
|
267
|
+
System.Console.WriteLine("#debug get socket [{0}]", btDevice.Name);
|
268
|
+
|
269
|
+
mSocket.Connect();
|
270
|
+
|
271
|
+
System.Console.WriteLine("#debug connect[{0}]", btDevice.Name);
|
272
|
+
|
273
|
+
//input stream
|
274
|
+
|
275
|
+
mStream = mSocket.InputStream;
|
276
|
+
|
277
|
+
System.Console.WriteLine("#debug open InputStream [{0}]", btDevice.Name);
|
278
|
+
|
279
|
+
mReader = new InputStreamReader(mStream);
|
280
|
+
|
281
|
+
System.Console.WriteLine("#debug get StreamReader [{0}]", btDevice.Name);
|
282
|
+
|
283
|
+
reader = new BufferedReader(mReader);
|
284
|
+
|
285
|
+
System.Console.WriteLine("#debug get get BufferedReader [{0}]", btDevice.Name);
|
286
|
+
|
287
|
+
}
|
288
|
+
|
289
|
+
catch(IOException e)
|
290
|
+
|
291
|
+
{
|
292
|
+
|
293
|
+
close(mSocket);
|
294
|
+
|
295
|
+
close(mStream);
|
296
|
+
|
297
|
+
close(mReader);
|
298
|
+
|
299
|
+
e.PrintStackTrace();
|
300
|
+
|
301
|
+
throw e;
|
302
|
+
|
303
|
+
}
|
304
|
+
|
305
|
+
}
|
306
|
+
|
307
|
+
```
|
308
|
+
|
309
|
+
`btDevice`はペアリング済みデバイスの情報が格納されています。
|
310
|
+
|
311
|
+
|
312
|
+
|
313
|
+
`CreateRfcommSocketToServiceRecored()`の引数として読んでいる`getUUIDFromStrng()`は、String型のローカル変数で定義しているUUIDをUUID型に変換して渡しているだけです。
|
314
|
+
|
315
|
+
|
316
|
+
|
317
|
+
9行目の`Connect()`メソッドがタイムアウトし、IOExceptionが帰ってきてしまいます。
|
1
タイトル・読みにくい箇所の修正
test
CHANGED
@@ -1 +1 @@
|
|
1
|
-
【Xamarin.Forms】Bluetoothの実装
|
1
|
+
【Xamarin.Forms】AndroidにおけるBluetoothの実装(主にスレッド)
|
test
CHANGED
@@ -18,9 +18,9 @@
|
|
18
18
|
|
19
19
|
|
20
20
|
|
21
|
-
チュートリアルとしてよく見るのはスマホ同士で片方をサーバー、片方をクライアントにして接続するものですが、今回接続したいのは画面の無いクラシックBluetooth(SPP)のセンサーです。その場合はセンサーから送られて来るデータを読み込むサーバーとして実装
|
21
|
+
チュートリアルとしてよく見るのはスマホ同士で片方をサーバー、片方をクライアントにして接続するものですが、今回接続したいのは画面の無いクラシックBluetooth(SPP)のセンサーです。その場合はセンサーから送られて来るデータを読み込むサーバーとして実装するのが正解でしょうか?
|
22
|
-
|
22
|
+
|
23
|
-
デバイス側の実装が公開されておらず、スマホからMacAddressとUUIDを指定して接続要求をすれば値が返って来るものなのかもよく分かっていませんが、PC向けの純正アプリでは接続されるのを確認しています。
|
23
|
+
Bluetoothデバイス側の実装が公開されておらず、スマホからMacAddressとUUIDを指定して接続要求をすれば値が返って来るものなのかもよく分かっていませんが、PC向けの純正アプリでは接続され、値が取得できるのを確認しています。
|
24
24
|
|
25
25
|
|
26
26
|
|
@@ -28,7 +28,7 @@
|
|
28
28
|
|
29
29
|
Android固有機能の呼び出しはインターフェースを介してDependencyService呼び出してます(この解釈で合ってるのか怪しいですが…)
|
30
30
|
|
31
|
-
この場合、接続要求を待つ別スレッドはVM
|
31
|
+
この場合、接続要求を待つ別スレッドはVMに書くのか、Android側に書くのとどちらが望ましいでしょうか?
|
32
32
|
|
33
33
|
|
34
34
|
|
@@ -36,7 +36,7 @@
|
|
36
36
|
|
37
37
|
こちらの動画を参考にしています→[Youtube](https://www.youtube.com/watch?v=dL_CQmmsKSQ)
|
38
38
|
|
39
|
-
close
|
39
|
+
close処理などは省略しています。
|
40
40
|
|
41
41
|
```Android
|
42
42
|
|