AndroidでUSB OTGデバイスとインターフェース接続しようとしています。USB OTGデバイスが抜き差ししても機能しない
- は(私が興味を持ってデバイスIDのためのフィルタ処理)
USB_DEVICE_ATTACHED
ためのインテントフィルタを持つアクティビティありますマニフェストで宣言された:コードは少し長いですので、私は基本を概説します。 - アクティビティが特定のインテントで起動されると、サービスが開始され、USBデバイスが引数として渡されます。
- servieが起動すると、
USB_DEVICE_DETACHED
のブロードキャストレシーバが登録され、デバイスに接続され、デバイスとの対話が開始されます(現在はログ出力が生成されています)。 - USB切断ブロードキャストが受信されると、とが現在使用されているデバイスであり、USBデバイス接続で
close()
が呼び出され、サービスが停止します。
デバイスは、Si4701 USB FMチューナーで、USB HIDデバイスとして表示されます。
初めてデバイスを接続すると、サービスが接続されていることがわかります。チャンネルを変更してRDSデータを受信できます。
しかし、プラグを抜いてプラグを差し込むと、サービスが再び接続されていることが確認できます(デバイスレジスタの読み込みに成功しました)が、周波数の変更に失敗し、RDSデータが表示されません。
私は、デバイスのプラグを抜くとrepluggingの間で停止するようにアプリを強制した場合、デバイスは再び取り付けgeing後に正常に動作します。
これは、いくつかのクリーンアップは場所を取るために失敗した提案する、またはいくつかのリソースが正しく解放されていません。ただし:
- 私は接続間のデバイスに関連するデータ構造を保持しません。 USB接続に関連するすべてのものは、デバイスが検出されたときに作成されるクラスインスタンスにあり、これらのクラスのすべての静的メンバーは最終的です。
- デバイスの種類やファームウェアのバージョン(USB HID機能レポートを取得することによって機能する)のためのレジスタの読み込みなど、デバイスを再構成した後に機能するものがあります。初期化では、エラーを返さないレジスタもいくつか設定されますが(USB機能レポートの送信による)、周波数の変更(レジスタの設定も含まれます)は機能しません。
- アンプラグと再挿入の間隔は〜15分で効果はありません(デバイスが動作しません)。一方、デバイスのプラグを抜いてサービスを終了してプラグインし直すと、即座に動作するため、デバイス側ではなく、Android側で問題が発生しています。
電源を切る/再接続した後にUSBデバイスを動作させるには、何が必要ですか?