###前提・実現したいこと
AndroidStudioで、BlueToothで接続したバーコードを読み取るスキャナから、読み取ったデータを受け取るアプリを作りたいのですが、接続がうまくいきません。
Androidの実機とスキャナはすでにペアリング済みです。
###発生している問題・エラーメッセージ
エラーメッセージは以下の通りです。
12-20 15:00:51.336 27378-27378/? W/System.err: java.io.IOException: read failed, socket might closed or timeout, read ret: -1 12-20 15:00:51.336 27378-27378/? W/System.err: at android.bluetooth.BluetoothSocket.readAll(BluetoothSocket.java:738) 12-20 15:00:51.337 27378-27378/? W/System.err: at android.bluetooth.BluetoothSocket.readInt(BluetoothSocket.java:750) 12-20 15:00:51.337 27378-27378/? W/System.err: at android.bluetooth.BluetoothSocket.connect(BluetoothSocket.java:375) 12-20 15:00:51.337 27378-27378/? W/System.err: at com.example.root.bluetooth_test.MainActivity.run(MainActivity.java:66) 12-20 15:00:51.337 27378-27378/? W/System.err: at com.example.root.bluetooth_test.MainActivity.onCreate(MainActivity.java:48) 12-20 15:00:51.337 27378-27378/? W/System.err: at android.app.Activity.performCreate(Activity.java:6750) 12-20 15:00:51.337 27378-27378/? W/System.err: at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1122) 12-20 15:00:51.337 27378-27378/? W/System.err: at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2654) 12-20 15:00:51.337 27378-27378/? W/System.err: at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2765) 12-20 15:00:51.337 27378-27378/? W/System.err: at android.app.ActivityThread.-wrap12(ActivityThread.java) 12-20 15:00:51.337 27378-27378/? W/System.err: at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1513) 12-20 15:00:51.338 27378-27378/? W/System.err: at android.os.Handler.dispatchMessage(Handler.java:102) 12-20 15:00:51.338 27378-27378/? W/System.err: at android.os.Looper.loop(Looper.java:154) 12-20 15:00:51.338 27378-27378/? W/System.err: at android.app.ActivityThread.main(ActivityThread.java:6262) 12-20 15:00:51.338 27378-27378/? W/System.err: at java.lang.reflect.Method.invoke(Native Method) 12-20 15:00:51.338 27378-27378/? W/System.err: at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:890) 12-20 15:00:51.338 27378-27378/? W/System.err: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:780)
###該当のソースコード
java
1package com.example.root.bluetooth_test; 2 3import android.bluetooth.BluetoothAdapter; 4import android.bluetooth.BluetoothDevice; 5import android.bluetooth.BluetoothSocket; 6import android.location.Address; 7import android.support.v7.app.AppCompatActivity; 8import android.os.Bundle; 9import android.util.Log; 10import android.view.View; 11import android.widget.Toast; 12 13import java.io.IOException; 14import java.io.InputStream; 15import java.util.Set; 16import java.util.UUID; 17 18public class MainActivity extends AppCompatActivity implements Runnable{ 19 20 private BluetoothAdapter mBtAdapter; 21 private BluetoothDevice mBtDevice; // BTデバイス 22 private BluetoothSocket mBtSocket; // BTソケット 23 private InputStream mmInStream; 24 private boolean isRunning; 25 26 @Override 27 protected void onCreate(Bundle savedInstanceState) { 28 super.onCreate(savedInstanceState); 29 setContentView(R.layout.activity_main); 30 mBtAdapter = BluetoothAdapter.getDefaultAdapter(); 31 32 Set<BluetoothDevice> pairedDevices = mBtAdapter.getBondedDevices(); 33 34 if (pairedDevices.size() > 0) { 35 for (BluetoothDevice device : pairedDevices) { 36 //mBtDevice = mBtAdapter.getRemoteDevice(device.getAddress()); 37 mBtDevice = device; 38 Log.d("", "" + mBtDevice); 39 } 40 } else { 41 Log.w("","false"); 42 } 43 run(); 44 45 } 46 47 @Override 48 public void run() { 49 50 try { 51 // 接続に使用するプロファイルを指定 52 mBtSocket = mBtDevice.createRfcommSocketToServiceRecord( 53 UUID.fromString("00001101-0000-1000-8000-00805F9B34FB")); 54 Log.d("", "" +mBtSocket); 55 } catch (IOException e) { 56 e.printStackTrace(); 57 } 58 59 // ソケットを接続する 60 try { 61 mBtSocket.connect(); 62 mmInStream = mBtSocket.getInputStream(); 63 64 // InputStreamのバッファを格納 65 byte[] buffer = new byte[1024]; 66 int bytes; 67 68 while(isRunning){ 69 70 // InputStreamの読み込み 71 bytes = mmInStream.read(buffer); 72 Log.i("","bytes="+bytes); 73 // String型に変換 74 String readMsg = new String(buffer, 0, bytes); 75 76 // null以外なら表示 77 if(readMsg.trim() != null && !readMsg.trim().equals("")){ 78 Log.i("","value="+readMsg.trim()); 79 } 80 else{ 81 82 } 83 84 } 85 } catch (IOException e) { 86 e.printStackTrace(); 87 88 try{ 89 mBtSocket.close(); 90 }catch(Exception ee){} 91 isRunning = false; 92 } 93 94 } 95 96 @Override 97 protected void onDestroy() { 98 super.onDestroy(); 99 100 // ソケットを閉じる 101 try { 102 mBtSocket.close(); 103 } catch (IOException e) { 104 e.printStackTrace(); 105 } 106 } 107}
###追記
エラーメッセージとソース部分で重要そうなのは
12-20 15:00:51.337 27378-27378/? W/System.err: at com.example.root.bluetooth_test.MainActivity.run(MainActivity.java:66)
java
1mBtSocket.connect(); //66行目
この部分です。
###試したこと
スキャナ側の接続の設定を変えてみたりしましたが変化ありませんでした。
Log.d("", "" + mBtDevice);
このログの中身を見たところ、デバイスは取得できているようでした。
わかる方がいらっしゃいましたら回答を宜しくお願いいたします。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。