2017-08-05 8 views
0

私はデバイスに接続して仕事をしているBluetoothアプリケーションをやっています。私にはたくさんの活動があります。私はBlutoothConnectionService.javaクラスのすべての接続を行います。私の中でBondedDevicesActivity私は接続したいデバイスをクリックします。その後、サービスが動作し、別のアクティビティが開かれます。次に、いくつかのボタンをクリックして別のアクティビティを開きます。すべての活動で、私はブルートゥースを介していくつかの情報を送信しています。したがって、別のアクティビティを開くたびに、私はBlutoothConnectionService.javaクラスを使用します。問題はこのクラスにあり、常にデバイスに接続しようとしています。私はそれが接続されたら、それが決して接続が死ぬまでそれをもう一度試してみたいです。しかし、私はそれを作る方法を理解できませんでした。私はisConnected()と呼ばれる方法があることを知っていますが、私はそれをサービスクラスに入れる場所がわかりません。ここにサービスの私のコードは次のとおりです。Bluetooth IsConnected()

public class BluetoothConnectionService { 
private static final String TAG = "BluetoothConnectionSrvc"; 
private static final UUID connectionUUID = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB"); 
private final BluetoothAdapter bluetoothAdapter; 
Context ctx; 
private ConnectThread connectThread; 
private BluetoothDevice bluetoothDevice; 
private UUID deviceUUID; 
ProgressDialog progressDialog; 
private ConnectedThread connectedThread; 
String incomingMessage; 

public BluetoothConnectionService(Context context, BluetoothDevice device, UUID uuid) { 
    bluetoothAdapter = BluetoothAdapter.getDefaultAdapter(); 
    ctx = context; 
    startClient(device, uuid); 
} 

public void startClient(BluetoothDevice device, UUID uuid) { 
    Log.d(TAG, "startClient: Started."); 
    connectThread = new ConnectThread(device, uuid); 
    connectThread.start(); 
} 

private class ConnectThread extends Thread { 
    private BluetoothSocket bluetoothSocket; 

    public ConnectThread(BluetoothDevice device, UUID uuid) { 
     Log.d(TAG, "ConnectThread: started."); 
     bluetoothDevice = device; 
     deviceUUID = uuid; 
    } 

    public void run() { 
     Log.i(TAG, "ConnectThread: Run."); 
     BluetoothSocket tmp = null; 
     try { 
      Log.d(TAG, "ConnectThread: Trying to create RFcommSocket using UUID: " + connectionUUID); 
      tmp = bluetoothDevice.createRfcommSocketToServiceRecord(deviceUUID); 
      progressDialog = ProgressDialog.show(ctx, "Cihaza Bağlanılıyor", "Lütfen Bekleyiniz...", true); 
     } catch (Exception e) { 
      progressDialog.dismiss(); 
      e.printStackTrace(); 
      Log.e(TAG, "ConnectThread: Couldn't create RFcommSocket" + e.getMessage()); 
      showMessage("Cihaza bağlanılamadı, lütfen bağlantınızı kontrol ederek tekrar deneyiniz."); 
      AnaEkranActivity.instance.finish(); 
     } 

     if (tmp != null) { 
      bluetoothSocket = tmp; 
      bluetoothAdapter.cancelDiscovery(); 

      try { 
       bluetoothSocket.connect(); 
       Log.d(TAG, "run: ConnectionThread connected."); 
       connected(bluetoothSocket); 
      } catch (Exception e) { 
       progressDialog.dismiss(); 
       e.printStackTrace(); 
       showMessage("Cihaza bağlanılamadı, lütfen bağlantınızı kontrol ederek tekrar deneyiniz."); 
       AnaEkranActivity.instance.finish(); 
       try { 
        bluetoothSocket.close(); 
        Log.d(TAG, "run: Closed Socket."); 
       } catch (Exception e1) { 
        e1.printStackTrace(); 
        Log.e(TAG, "ConnectThread: run: Unable to close connection in socket" + e1.getMessage()); 
       } 
       Log.d(TAG, "run: ConnectThread: Could not connect to UUID: " + connectionUUID); 
      } 
     } 
    } 
} 

public void connected(BluetoothSocket socket) { 
    Log.d(TAG, "Connected: Starting."); 
    connectedThread = new ConnectedThread(socket); 
    connectedThread.start(); 
} 

private class ConnectedThread extends Thread { 
    private final BluetoothSocket bluetoothSocket; 
    private final InputStream inputStream; 
    private final OutputStream outputStream; 

    public ConnectedThread(BluetoothSocket socket) { 
     Log.d(TAG, "ConnectedThread: Starting."); 
     bluetoothSocket = socket; 
     InputStream tmpIn = null; 
     OutputStream tmpOut = null; 

     try { 
      progressDialog.dismiss(); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 

     try { 
      tmpIn = bluetoothSocket.getInputStream(); 
      tmpOut = bluetoothSocket.getOutputStream(); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 

     inputStream = tmpIn; 
     outputStream = tmpOut; 
    } 

    public void run() { 
     byte[] readBuffer = new byte[1024]; 
     int readBytes; 

     while (true) { 
      try { 
       readBytes = inputStream.read(readBuffer); 
       incomingMessage = new String(readBuffer, 0, readBytes); 
       Log.d(TAG, "InputStream: " + incomingMessage); 
       showMessage(incomingMessage); 
      } catch (Exception e) { 
       e.printStackTrace(); 
       Log.e(TAG, "read: Error reading from inputStream." + e.getMessage()); 
       showMessage("Connection is dead."); 
       AnaEkranActivity.instance.finish(); 
       break; 
      } 
     } 
    } 

    public void write(byte[] writeBytes) { 
     String text = new String(writeBytes, Charset.defaultCharset()); 
     Log.d(TAG, "write: Writing to outputStream: " + text); 
     try { 
      outputStream.write(writeBytes); 
     } catch (Exception e) { 
      e.printStackTrace(); 
      Log.e(TAG, "write: Error writing to outputStream." + e.getMessage()); 
      showMessage("Error while writing."); 
     } 
    } 
} 

public void write (byte[] out) { 
    Log.d(TAG, "write: Write Called."); 
    connectedThread.write(out); 
} 

public String read() { 
    Log.d(TAG, "read: Read Called."); 
    connectedThread.run(); 
    return incomingMessage; 
} 

public void showMessage(final String toastMessage) { 
    AnaEkranActivity.instance.runOnUiThread(new Runnable() { 
     @Override 
     public void run() { 
      Toast.makeText(ctx, toastMessage, Toast.LENGTH_SHORT).show(); 
     } 
    }); 
} 

}

任意のアイデア?

答えて

0

あなたはこの回答を得るでしょう。そこでは、Bluetoothチャットアプリでも同じことを使用しています。ここにリンクがありますBluetooth chat app

これはあなたに接続についての情報を提供します。そして、this explanation

この問題を解決するのに役立ちます。一度はっきりと解決策を得ることができます。

+0

不幸にも、私はこれらの文書を深く勉強しましたが、私の問題については何も役に立たないです。 – Burak