問題

私は3ヶ月前に始めたばかりなので、Androidプログラミングの初心者です。私はBluetoothを使ってAndroidアプリをarduinoに接続するプロジェクトをやっています。私はすでにアンドロイドアプリ(blueton.adapter、ソケットなど)のコードを持っています。接続用のコードはすでに機能しています。目標の1つは、ユーザーにPINを入力するように要求せずに、

このフォーラムの古い投稿はあまり役に立ちません。 (安全でないモードを使用することをお勧めしますが、私の場合も安全なモードが必要ですが、arduinoは携帯電話アプリがクライアントであるため、createInsecureRfcommSocketToServiceRecord()サーバーメソッドは機能しません)

私は検索し、これをアンドロイドの開発者サイトでbluetonedeviceクラスについて見つけました:

setPairingConfirmation (boolean confirm) PAIRING_VARIANT_PASSKEY_CONFIRMATIONペアリングのパスキーを確認します。

PARING_VARIANT_PIN = "ユーザーにピンの入力を求められるか、アプリがユーザーのピンを入力します。"

PARING_VARIANT_PASSKEY_CONFIRMATION = "ユーザーは画面に表示されるパスキーを確認するよう求められます。または、アプリはユーザーのパスキーを確認します"

コードを使用しているようですが、アプリはパスワードを入力して確認するアプリです パスワードを "auto-connect"機能にしますが、Androidサイトではこれを使用する方法のサンプルコードはありません。あなたの誰かがこのまたは関連するプロセスを使用してサンプルコードを持っていますか?私はあなたの助けに感謝します!

  ベストアンサー

まず明確にするために、このソリューションは新しいバージョンのAPI(15以降)用に設計されています。

私は別の投稿で書かれた答えを見つけました( Here のRoldofoの答えを参照)。詳細なコードで私の再編成された答えはここにあります。

一言で言えば、放送受信機をセットアップしてACTION_PAIRING_REQUESTをトラップし、プログラムでPINを渡して確認する必要があります。

放送受信機を登録する:

     IntentFilter filter = new IntentFilter(BluetoothDevice.ACTION_PAIRING_REQUEST);
    getActivity().registerReceiver(mPairingRequestReceiver, filter);
 

受信者の定義:

 private final BroadcastReceiver mPairingRequestReceiver = new BroadcastReceiver() {
    public void onReceive(Context context, Intent intent) {
        String action = intent.getAction();
        if (action.equals(BluetoothDevice.ACTION_PAIRING_REQUEST)) {
            try {
                    BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
                    int pin=intent.getIntExtra("android.bluetooth.device.extra.PAIRING_KEY", 1234);
                    //the pin in case you need to accept for an specific pin
                    Log.d(TAG, "Start Auto Pairing. PIN = " + intent.getIntExtra("android.bluetooth.device.extra.PAIRING_KEY",1234));
                    byte[] pinBytes;
                    pinBytes = (""+pin).getBytes("UTF-8");
                    device.setPin(pinBytes);
                    //setPairing confirmation if neeeded
                    device.setPairingConfirmation(true);
            } catch (Exception e) {
                Log.e(TAG, "Error occurs when trying to auto pair");
                e.printStackTrace();
            }
        }
    }
};
 

次に、アクティビティまたはフラグメント(ペアリングを開始する場合はどこでも)で、次の定義されたpairDevice()メソッドを呼び出してペアリング試行を呼び出すことができます(ACTION_PAIRING_REQUESTを生成します)

 private void pairDevice(BluetoothDevice device) {
    try {
        Log.d(TAG, "Start Pairing... with: " + device.getName());
        device.createBond();
        Log.d(TAG, "Pairing finished.");
    } catch (Exception e) {
        Log.e(TAG, e.getMessage());
    }
}
 

  同じタグがついた質問を見る

androidbluetoothandroid-bluetoothpairing