問題タブ [rfcomm]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
android - Android:複数のUIアクティビティ(マルチスレッド/ハンドラー)を備えたBluetoothSPPアプリの一般的な方向性
私はAndroidに比較的慣れていませんが、Javaの経験があります。これは、Bluetoothとは対照的に、マルチスレッド/ハンドラーの問題である可能性があります。
ボタン付きの複数のレイアウトを持つアプリケーションを作成しています。ボタンのonClickListnersを設定しました。一部のボタンはアクティビティを変更し、新しいボタンで新しいレイアウトを表示します。その他のボタンは、Bluetooth経由で送信SPP文字列を送信します。文字列はXMLファイルで定義され、変更されません(シリアルコマンド)。BluetoothサーバーのMACアドレスをハードコーディングでき、データを送信するだけで、受信する必要はありません。
Bluetooth接続と発信送信のセットアップに至るまでの方向性に関する一般的なガイダンスを探しています。BluetoothChatの例を詳しく見てきましたが、複数のアクティビティの場合に適切なリソースがありません。
-個別のアクティビティを使用して、すべてのBluetooth送信と接続を管理し、Bluetoothメッセージを送信するすべてのケースのハンドラーを作成しますか?-すべてのアクティビティにBluetooth接続+送信スレッドを追加する必要がありますか(アクティビティを変更すると接続が失われる問題が発生するようです)?-BluetoothServiceアクティビティがアクティブ/現在のアクティビティによって促されたものを送信できるクラス固有ではないハンドラーを使用できますか?-BluetoothServiceアクティビティで送信されるすべての文字列をハードコーディングするだけで、UIアクティビティは、ボタンのクリックに基づいて要求された文字列を送信するようにBluetoothServiceアクティビティに促すことができますか?
どんな情報でも大歓迎です。一般的な方向性、小さなサンプル、またはクラスの提案だけで、正しい方向に進むことができます。
ありがとう、
ジョナサン
android - 一度に複数の RFCOMM チャネルを作成できますか?
質問:
一度に複数の RFCOMM チャネルを作成できますか?
試験方法:
携帯電話 (Samsung GALAXY S) から PC の 2 つの端末への接続を作成します。PC には 2 つの異なる Bluetooth デバイス (内蔵および USB ドングル) があり、COM1 と COM2 などの異なる COM ポートを使用しています。
手順:
SPP を使用して、携帯電話から PC の異なる Bluetooth デバイスへの各接続を個別にテストします。----> OK、携帯電話は、各 Bluetooth デバイスを使用して、PC が端末に送信したものを読み取ることができました。これは、PC、Bluetooth デバイス 1(BD1)、Bluetooth デバイス 2(BD2) が SPP 経由で正常に動作していることを意味します。ここで、2 つの接続を同時にテストします。
1 つの接続を確立します。たとえば、携帯電話 -> BD1 とします。--->わかりました。携帯電話は、この接続を使用して PC の端末 1 からデータを読み取ることができました。
2.1 別の接続を確立します (携帯電話 -> BD2)。--->わかりました。例外はスローされず、リンクは正常に確立されました。
問題:
2 番目の接続が確立されると、端末 1 で入力した内容が転送され、2 番目の接続で受信されます。一方、端末 2 で入力された接続 2 ではデータは受信されません。
ディスカッション バグ レポートをここに貼り付けます。私が正しければ、青いフォントの部分は最初の接続を確立するプロセスであり、青いフォントの下の黒いフォントは2番目の接続を確立するプロセスです。
「複数の RFCOMM を確立できる」と疑う理由は、バグ レポートにあるので、太字で示しています。どちらも「rc chan 1」を使用していることがわかります。これは、同じ RFCOMM を使用していることを意味しますか??
推奨事項や提案は大歓迎です!
android - ユーザーからの入力なしで Android RFCOMM ソケットを作成する方法は?
シナリオは次のとおりです。
Bluetooth ドングルを備えた PC への RFCOMM ソケットを作成する Android 用のアプリケーションを作成する必要があります (サーバーも作成します)。
私の要件は、ユーザーがデバイスを手動でペアリングする必要がないことです。
実際、大きなハックで、私はcreateInsecureRfcommSocketを使用しています。
ちょっとしたシナリオ: RFCOMM ソケットを開いた状態で Linux ボックスと情報を交換する Android アプリケーションがあります。デバイスに PIN を手動で設定できます (ハードコーディングはオプションです)
私はさまざまな道を探しています:
JNI ラッパーを作成する
ここで Max Kellermannが行ったように、JNI レイヤーを記述してすべてのペアリング フェーズを作成できます。これは良いオプションですが、問題があります:
NDK 4b は libbluetooth ライブラリを提供しないため、NDK v.3 と同様に -lbluetooth が失敗します。
オプション:
- NDK 1.5 (lib bluetooth を含む) を見つけます。何日もウェブを検索した後、私は見つけることができませんでした。誰かが私がそれを見つけることができる場所を持っているか知っていますか?
- 自分で Android 用の libbluetooth をコンパイルし、-lbluetooth に使用します。幸運なことに、私はそれらを構築することができません。ヒントはありますか?
API によって公開されたものを使用する
createRfcommSocketToServiceRecordを使用して、ユーザーがデバイスを手動でペアリングしないようにする方法を知っている人はいますか? 出来ますか?サーバーはどのように記述すればよいですか?
私が知らない何か
たぶん(確かに!) 私が知らない何かがあります。多分私は何か他のものを使うことができますか?RFCOMMではありませんか?社民党?
Android API と手動でペアリングできますか?
質問するだけでなくても、十分に明確であることを願っています。繰り返しますが、初めてではないので、私はあなたの手にあります:)
すべてのサポートに感謝します!
java - AndroidBluetoothソケットフリーズアプリケーション
Bluetoothソケットに奇妙な問題があります。ソケットを作成して後でアプリケーションを閉じると、Androidデバイスが非常に高いCPU負荷でフリーズします。
ここに私のサンプルコードがあります:
メソッドを使用してソケットを閉じますがclose()
、アプリを閉じた後にAndroidデバイスがフリーズする理由がわかりません。ソケットが作成されただけで、接続されていないことに注意してください...
編集:
OK、サンプルコードがあります:
およびログ:
ログからわかるように、ソケットは正常に閉じられました。ここで、アプリを終了し(バックグラウンドで実行されます)、タスクマネージャーで実行し、アプリを強制終了します。その瞬間、Androidデバイスは非常に高いCPU負荷でフリーズします。
編集2:
その問題はSamsungGALAXYTabデバイスでのみ再現されることがわかりました。たとえば、HTCDesireでは再現できません。
android - アンドロイド 2.2。シリアルポート(com,rfcomm)ポートの設定方法は?
Android バージョン 2.2.1 の Nexus One を PC に接続し、Windows ターミナルやハイパー ターミナルなどのターミナル プログラムを使用して通信しようとしています。これを行うには、発信シリアル COM ポートをセットアップする必要があると思います。デバイスをペアリングしました。PC で Bluetooth -> 設定 -> 「COM ポートの追加」に移動すると、Android デバイスが表示されません。
私は何が欠けていますか?
Android 2.2.1 は spp をサポートしていますか? ドキュメントには、そうであると書かれています。
spp を追加するには、Android をルート化する必要がありますか?
誰かがこれに成功しましたか?
私の最終的な目標は、COM ポートを必要とする古い学校の Bluetooth デバイスと通信する Android アプリを作成することですか? Android が PC と通信できるようにすることは、暫定的なステップです。
PC と Android デバイスに接続するために、Android アプリで考えられるすべてのことを試しましたが、成功しませんでした。私の Android アプリは、本質的にxCaffeniated によって送信された Serial over Bluetoothと同じですが、コメントが少なくなっています。助言がありますか?
android - Androidの複数のSPP/RFCOMM接続が大幅な速度低下を引き起こす
Bluetooth SPP(RFCOMM)を使用してハードウェアと通信するアプリがあります。アプリとBluetooth接続はうまく機能します。問題は、SPPを使用する別のアプリが起動された後、アプリの1つが停止した場合です。アプリを終了するか、タスクキラーを使用していずれかのアプリが停止すると、電話の速度が低下してほぼ停止します。ほとんどの場合、私はバッテリーを抜かなければなりません。
私はこれを、おそらくFord Syncサポートの一部としてSPPを使用するPandoraと、私のアプリで見ました。SPPのサンプルアプリでもこれを見てきました。どのアプリを使用するかは関係ありません。SPPを使用する2つのアプリがこれを引き起こします。
私はこれをAndroid2.1、ATTのHTCデバイスで見ました。これは、2.2.1ストックを実行しているMotorola Droidでは表示されませんでしたが、カスタムカーネルで2.2およびLFY1.95ROMを実行しているときに同じ電話で表示されました。
誰かがそれらを見る必要がある場合、私はデバッガーからのログを持っていますが、そこには問題を指摘するものは何もありません。いずれかのSPPアプリが停止すると、すぐにスローダウンが開始されます。まだログが表示されますが、問題を示すものは何もありません。電話機が再起動されるまで、スローダウンは停止しません。
android - Bluetooth spp プロファイルを実装する実際の Android 携帯電話はありますか
Bluetooth SPP プロファイルを実際にサポートしている現在の Android 携帯電話を知っている人はいますか? 私はオンラインで何日もかけて探しましたが、SPP プロファイルをサポートしているという携帯電話はどこにもありません。さらに、使用している電話が SPP プロファイルをサポートしていないか、電話で無効になっているためにアプリケーションを正しく動作させることができないというあらゆる種類の投稿に気付きました. ここで何か不足していますか?Android 用の Bluetooth アプリケーションの開発に取り組む前に、それが実際に実行できることを確認したいと思います。
その答えが、Bluetooth API を介して SPP プロファイルを実装することであり、したがって、RFCOMM をサポートする任意の Android OS レベル (つまり 2.0 以上) で RFCOMM を使用できることを願っています。これは正しいです?
android - RFCOMM APIを使用して、Bluetoothヘッドセットを使用するためのカスタマイズATコマンドを作成することは可能ですか?
ATコマンドによる無線チャネルの切り替えのように
linux - Linux で常に同じ rfcomm ポートに接続するにはどうすればよいですか?
Linuxで接続しようとしているBluetoothデバイスがいくつかあります。1つを除いて、どのデバイスにも問題はありません。違いは、他のすべてのデバイスが Bluetooth 接続を標準的な方法 (私が想定する方法) で処理することです。つまり、ホスト デバイス (PC) が接続を開始するのを待ちます。一方、もう一方のデバイスは、数秒ごとに接続自体を開始しようとし、その間に 1 秒程度のスリープが入ります。
他のデバイスについては、次のように接続しています。
(X は未使用の rfcomm ポート番号)
このコマンドを発行する前に、必要なペアリング キーを使用して bluetooth-agent を実行します。ここではすべて正常に動作します。
問題のデバイスの場合、デバイスがペアリングされる前に、これは初めてうまく機能します。ただし、ペアリング後、rfcomm connect コマンドは失敗する可能性が非常に高くなります。これは、デバイス自体が接続を開始しようとしているためです。デバイスがスリープ状態の場合、接続は失敗します (「ホスト ダウン」)。
代わりに、このデバイスでは、次のコマンドが魅力的に機能することがわかりました。
(最初にsdptool add SPを介してシリアルポートを追加する必要がありました)
PC はそこに座ってデバイスからの着信接続を待機するため、これは毎回機能します。
ただし、複数のデバイスがある場合に問題が発生します。rfcomm listen コマンドは見事に機能しますが、どのデバイス (Mac アドレスで識別される) がどの rfcomm ポートに接続するかを制御する方法はないようです。複数のデバイスの電源が入っている場合は、最初に接続しようとしたデバイスが接続されます。ただし、このアプリケーションでは、ユーザーが接続しているデバイスをユーザーに知らせたいと考えています。
誰かが以前にこのようなことを扱ったことがありますか? bluez bluetooth パッケージのカスタム バージョンを作成することを考えているところまで来ています。
android - Bluetooth RFCOMM を一貫して動作させる方法は?
Bluetooth Serial Port Profile (SPP) を介して外部 GPS 受信機と接続する Android アプリケーションを構築しようとしています。2.3.3 を実行している Nexus One を使用しています。アプリケーションが GPS からデータを受信するようにできましたが、2 つの問題があります。1) デバイスに接続すると、時々しか機能しません。接続がタイムアウトすることもあれば、デバイスがビジーまたは使用中であると表示されることもあります。2) データをデバイスに送り返す方法を理解できませんでした。これは、着信ストリームがブロッキング コールであるため、ストリームの使用方法の問題である可能性があります。
関連するコードだけを、テスト用の新しい Android アプリケーションに移動しました。これは次のとおりです。
/res/layout/main.xml (2 つのボタンとテキストビュー)
/src/com.example.bluetoothspp/MainActivity.java
通常の「bsocket = device.createRfcommSocketToServiceRecord(MY_UUID);」を使用していることがわかりました。メソッドは通常、「サービスの検出に失敗しました」というメッセージが表示されるため、「bsocket = (BluetoothSocket) m.invoke(device, Integer.valueOf(1));」も試しました。方法。それはより頻繁に機能しますが、接続しようとするとタイムアウトするのが好きです.
ここで何が間違っていますか?