ペアリングせずにBLEでRfcommSocketを使用する?

私はJavaとAndroidの両方に不慣れです、そして、私は現在ブルートゥースを通して送られる情報のために簡単なデータ記録アプリに取り組んでいます。私は最近、古典的なブルートゥースのHM-10(CC41)BLEモジュールを使うことに切り替えました。接続を作成してデータを受信するためにGatt特性を使用することについては何も知らないので、引き続きソケット通信を使用したいと思います。私の携帯電話S7エッジはBLEデバイスとペアリングすることはできませんが、RfcommSocketを起動する前にプログラムでボンドを作成することはできません。ペアリングせずにソケット通信を使い続ける方法はありますか?最後に、私はBLEモジュールのMACアドレスをすでに持っているので、スキャンはしたくないでしょう。これが私の関連コードです。

パブリッククラスMainActivityはAppCompatActivityを拡張したRunnableを実装します。

private BluetoothAdapter adapter;
private InputStream inputStream;
private OutputStream outputStream;
private Thread thread;
private TextView Status;
private TextView Connection;
private BluetoothSocket socket = null;
public boolean threadStatusInitial; //changed the status global variables to public static
public boolean threadStatus;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    threadStatusInitial=true;
    threadStatus=true;

    Status=(TextView) findViewById(R.id.StatusID);

    Connection=(TextView) findViewById(R.id.ConnectionStatus);

    adapter= BluetoothAdapter.getDefaultAdapter();

    if(adapter==null){

        Toast.makeText(this,"bluetooth is unavailable",Toast.LENGTH_SHORT).show();

        finish();
        return;
    }
    thread=new Thread(this);

}

public void connect(View view){
    BluetoothDevice device=adapter.getRemoteDevice("3C:A3:08:94:C3:11");


            try {
                socket=device.createRfcommSocketToServiceRecord(device.getUuids()[0].getUuid());

                socket.connect();

                Connection.setText("Connected");

                inputStream=socket.getInputStream();

                outputStream=socket.getOutputStream();


                if (threadStatusInitial){
                   thread.start();
                   threadStatusInitial=false; //this ensures that the thread.start() method will only be called during the initial connection
               }
               threadStatus=true; 





            } catch (IOException e) {
                Toast.makeText(this,"Can't Connect",Toast.LENGTH_LONG).show();
                e.printStackTrace();
            }






}

スレッド関連のグローバル変数は、切断中およびBLEモジュールへの再接続中にロギングスレッドを維持することと関係があります。

ありがとうございます。

1

5 答え

まず第一に、Bluetooth low energyは、接続とデータ転送にSocketsを使用することを意図していません。 BLEの最大のポイントは、データを送信しているかどうかにかかわらず、ソケットが継続的なデータ転送ストリームを維持するため、ソケットでは達成できない電力消費をできるだけ低く抑えることです。 あなたはandroid-HM10コミュニケーションのためにこのリンクから助けを得ることができます。

http:// android- er.blogspot.in/2015/12/connect-hm-10-ble-module-to-android.html

0
追加された

まず第一に、Bluetooth low energyは、接続とデータ転送にSocketsを使用することを意図していません。 BLEの最大のポイントは、データを送信しているかどうかにかかわらず、ソケットが継続的なデータ転送ストリームを維持するため、ソケットでは達成できない電力消費をできるだけ低く抑えることです。 あなたはandroid-HM10コミュニケーションのためにこのリンクから助けを得ることができます。

http:// android- er.blogspot.in/2015/12/connect-hm-10-ble-module-to-android.html

0
追加された

BluetoothクラシックとBluetooth Low Energyは関連していますが、異なる規格です。古典的な接続では、あなたが示したコードのようなものを使うでしょう。しかし、BLEクライアントは大きく異なります。まったく異なるクライアントコードが必要です。お使いのデバイスのHM-10(CC41)BLEモジュールは、おそらくBLEしかサポートしていないと思います。私はあなたの唯一の選択はBLEに移行することだと思います。

0
追加された

BluetoothクラシックとBluetooth Low Energyは関連していますが、異なる規格です。古典的な接続では、あなたが示したコードのようなものを使うでしょう。しかし、BLEクライアントは大きく異なります。まったく異なるクライアントコードが必要です。お使いのデバイスのHM-10(CC41)BLEモジュールは、おそらくBLEしかサポートしていないと思います。私はあなたの唯一の選択はBLEに移行することだと思います。

0
追加された

BluetoothクラシックとBluetooth Low Energyは関連していますが、異なる規格です。古典的な接続では、あなたが示したコードのようなものを使うでしょう。しかし、BLEクライアントは大きく異なります。まったく異なるクライアントコードが必要です。お使いのデバイスのHM-10(CC41)BLEモジュールは、おそらくBLEしかサポートしていないと思います。私はあなたの唯一の選択はBLEに移行することだと思います。

0
追加された