問題タブ [android-bluetooth]

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.

0 投票する
2 に答える
7130 参照

android - すでにペアリングされているBluetoothデバイスが範囲内にある場合、それらを自動的に見つけます

私は Bluetooth の専門家ではありませんが、既にペアリングされている Bluetooth デバイスが互いに範囲内にある場合に、それらを自動的に検出するためにどのような可能性があるのか​​疑問に思っています。

背景: この場合、Android アプリケーションは Bluetooth (Rfcomm) 経由で専用のアクセサリに接続する必要があります。両方のデバイスが互いに認識されています (ペアリングされています)。Android アプリケーションは、ブロードキャスト レシーバーを登録します。アプリケーションの起動時に、アプリは検出を開始して専用アクセサリを見つけます。アクセサリが範囲内にある場合、すべてがうまく機能します。

問題: ユーザーが専用アクセサリの範囲外でアプリケーションを起動します。Android アプリケーションはアクセサリを検出しようとしますが、成功しません。次に、ユーザーは Bluetooth アクセサリの範囲に入ります。放送受信機は、現在範囲内にあるアクセサリについて通知されません。

同様のスレッド / 考えられる解決策 同様の質問が、stackoverflow で既に尋ねられています (例:範囲内にある場合に bluetooth デバイスに自動接続)。しかし、範囲内の Bluetooth デバイスを継続的に検出しようとすることは、Android デバイスのバッテリーの消耗が大きくなるため、私が探しているものではありません。

別の解決策は、アクティビティの onResume メソッドでペアリングされたデバイスへの接続を試みることです。これは機能しますが、アプリケーションをバックグラウンドで実行できないという欠点があります。そのため、ユーザーは、接続を開始するために、アプリケーションを少なくとも 1 回フォアグラウンドに移動する必要がありました。

私が考えた 3 番目のアイデアは、Android アプリケーションにもサーバー ソケットを実装することです。Android アプリケーションが開始され、検出が成功せずに終了した場合、Android アプリケーションはサーバー ソケットを作成し、アクセサリの着信通知をリッスンすることができます。これは、いくつかのシナリオで役立ちます (たとえば、ユーザーがアプリケーションを起動し、アクセサリに近づき、アクセサリをアクティブにし、アクセサリが起動時にアプリケーションに範囲内にあることを通知するなど)。ただし、両方のデバイスが互いの範囲外で起動する可能性があるため、これはまだ 100% の解決策ではありません。また、追加機能の実装も必須です (Android デバイスの Bluetooth サーバー ソケットなど)。

したがって、より良い解決策が存在するかどうか疑問に思っています。追加の ServerSockets が不要なソリューションを探しており、すでにペアリングされている 2 つのデバイスが互いに範囲内にあるという通知を常に受け​​取ります :-)

助けてくれてありがとう!

0 投票する
3 に答える
30656 参照

android - AndroidでBluetoothヘッドセットからキーイベントをキャプチャする方法

私のアプリは、通常のヘッドセットで制御できます。「onKeyDown」をオーバーライドするだけです。しかし、Bluetooth ヘッドセットからの重要なイベントがキャプチャされません。なぜですか? または、Bluetoothキーイベントをキャプチャする方法は?

ヘッドセットのボタンを押すと、「log cat」に次のように表示されます。

メディア ボタン アクションも処理しようとしましたが、これは機能しません。私のアイデアは、自由に構成可能なキー マッピングです。ユーザーは、アプリがすべてのキー (ハードウェア、メディア ボタン、Bluetooth ヘッドセット) で聞く「セット キー」を選択し、ユーザーがキーを押すと、イベント/キー コードが構成に保存されます。

要約が機能しない 回答: ボリューム ボタンは、"VOLUME_CHANGED_ACTION" でキャプチャする必要があります。問題は、このインテントが他のアプリにブロードキャストされ、abortBroadcast() が機能しないことです (「順序付けされた」ブロードキャストでのみ機能します)。もう 1 つの問題は、ケーブル ヘッドセットと電話のキーが onReceive() を 2 回トリガーすることです (なぜですか?) Bluetooth ヘッドセットが 1 回トリガーします。次の問題は、Bluetooth ヘッドセットの 3 番目のキーです。音声コマンドをトリガーします (s-voice は s3 で始まります)。これに関するさまざまな意図をキャプチャしようとしましたが、このボタンを押しても「受信」できず、理由がわかりません。最後に、すべての種類のボタンをキャプチャし、他のアプリでそれらを処理したくない (onKeyDown を使用して true を返すなど)。

0 投票する
1 に答える
2813 参照

android - Android JB 4.1.1のコマンドラインからのBluetoothペアリング

私のリファレンス ボードでは、Android Jelly Bean 4.1.1 を使用しています。コマンドラインからBluetoothを使用したい。Bluetooth の有効化/無効化、デバイスのスキャンなどのコマンドは知っていますが、コマンド ラインからスキャンしたデバイスとペアリングする方法がわかりません。Android Jelly Bean 4.1.1 は Bluetooth に Bluez スタックを使用しています。コマンドラインからボードを他のBluetoothデバイスとペアリングできるように、誰か助けてください。ありがとう。

0 投票する
0 に答える
379 参照

android - LG nexus 4 (E960) で Bluetooth ペアリング ダイアログをバイパスする方法は?

次のコードを使用して、組み込みの Bluetooth デバイスをアプリケーションで LG nexus 4 に接続しています。

Samsung Galaxy Grand などの他のデバイスでは正常に動作しますが、LG nexus 4 で試しているときに、2 つのオプションのペアまたはキャンセルを含むダイアログが表示され、デバイスに直接接続する必要はありません。私を助けてください。

0 投票する
5 に答える
100476 参照

android - Android 4.3 Bluetooth Low Energy が不安定

現在、Bluetooth Low Energy を使用するアプリケーションを開発しています (Nexus 4 でテスト中)。Android 4.3 で公式の BLE API を使い始めた後、デバイスを初めて接続した後、そのデバイスまたは他のデバイスに再び正常に接続/通信できることはめったにないことに気付きました。

こちらのガイドに従って、問題なくデバイスに接続し、サービスと特性をスキャンし、通知の読み取り/書き込み/受信を行うことができます。ただし、切断して再接続した後、サービス/特性をスキャンできないか、読み取り/書き込みを完了できないことがよくあります。ログに、これが起こっている理由を示すものは何も見つかりません。

これが発生したら、アプリケーションをアンインストールし、Bluetooth を無効にし、電話機を再起動してから、再び動作を開始する必要があります。

デバイスが切断されるたびに、必ず BluetoothGatt オブジェクトで close() を呼び出して null に設定します。洞察はありますか?


編集:
ログ ダンプ: これらのログについては、電話をルート化し、/etc/bluetooth/bt_stack.conf 内の関連項目のトレース レベルを上げました。

接続成功- 電話を再起動してアプリをインストールした後の最初の試行。接続、すべてのサービス/特性の検出、および読み取り/書き込みができます。

失敗した試行 1 - これは、上記の成功した接続から切断した後の次の試行です。特性を発見できたようですが、最初の読み取りで null 値が返され、その後すぐに切断されました。

試行の失敗 2 - サービス/特性を発見することさえできない例。


編集 2:
接続しようとしているデバイスは、TI の CC2541 チップに基づいています。私はTI SensorTag (これも CC2541 ベース) を入手して遊んでみましたが、昨日 TIが SensorTag 用のAndroid アプリをリリースしたことを発見しました。ただし、このアプリにも同じ問題があります。他の 2 台の Nexus 4 でこれをテストしたところ、同じ結果が得られました。SensorTag への接続は 1 回目または 2 回目は成功しましたが、(ログによると) その後サービスを検出できず、あらゆる種類のクラッシュが発生しました。この特定のチップの問題なのだろうか?

0 投票する
1 に答える
5764 参照

android - 整数を送信し、Bluetooth 経由で文字列を受信する

変数を転送したいBluetoothデバイスアドレスがあります(デバイスを検出するためにBluetoothAdapterを使用しました...)

ここで、ソケットを使用して変数を送受信するための簡単なサンプルが必要です... ( BluetoothSocket を使用する必要がありますよね?)

Bluetooth チャットのサンプルを見たことがありますが、そのコードの多くは私には珍しいと思うので、誰かに整数を送信して文字列を簡単に受信するための簡単なサンプル コードを教えてもらいたいと思います。

Bluetooth のサポートを確認したところ、以前にデバイスの Bluetooth アドレスが見つかりました。

私が持っているこのようなもの:

誰か助けてくれませんか?


解決済み: この簡単なチュートリアルを使用しました: http://manojprasaddevelopers.blogspot.com/2012/02/bluetooth-data-transfer-example.html

評判が低いため、数時間後まで質問に答えることができないため、投稿を編集しました。とにかく、申し訳ありませんが、それが良い質問でなかったら、お願いします。:)


編集2:結局のところ、BluetoothChatサンプルも使用しました... :)

0 投票する
1 に答える
1428 参照

android - Bluetooth Low Energy GATT 特性から大きな 32 ビット符号なし整数を取得する

インスタンスのメソッドを2^32 - 1使用して、Bluetooth 4.0 特性から非常に大きな (潜在的に) 符号なし 32 ビット整数を取得しようとしています。getIntValueBluetoothGattCharacteristic

に渡しFORMAT_UINT32getIntValueいますが、 を返すため、Integerより大きい数値を返すことはできません2^31 - 1。より大きい値を取得しようとすると2^31 - 1、負の整数が誤って返されます。

符号なしの 32 ビット整数を返せない可能性がある場合、getIntValue受け入れるポイントは何ですか? FORMAT_UINT32足りないものはありますか?

getValue()使用して手動でに変換する唯一のオプションlongですか?