1

私は ICS を使用しており、USB デバイスやアクセサリがタブレットに差し込まれたり差し込まれたりしたときに呼び出される受信機を接続しようとしています。

ドキュメントとその他のスタックの質問に基づいて、*必要なのは下のコードだけのようですが、このコードを実行しても何も起こりません...デバイスにUSBアクセサリが差し込まれているため、わかりにくいですそのため、私のデバッグは、実際のデバッグではなく、ファイルに何かを書き込むだけですが、*何もしていないようです.

  IntentFilter attachFilter = new IntentFilter();
  attachFilter.addAction(ACTION_USB_PERMISSION);
  attachFilter.addAction(UsbManager.ACTION_USB_ACCESSORY_ATTACHED);     
  registerReceiver(mAttachReceiver, attachFilter);

  IntentFilter detachFilter = new IntentFilter();
  detachFilter.addAction(ACTION_USB_PERMISSION);
  detachFilter.addAction(UsbManager.ACTION_USB_ACCESSORY_ATTACHED);
  registerReceiver(mDetachedReceiver, detachFilter);

レシーバーは次のようになります(簡潔にするために省略しましたが、有効なレシーバーです)...

private final BroadcastReceiver mAttachReceiver = new BroadcastReceiver() {
    public void onReceive(Context context, Intent intent) {
        String action = intent.getAction();
        logMsg("ACTION = " + action);
        ... }

}

そして、私のマニフェストには次のエントリが含まれています:

<uses-feature android:name="android.hardware.usb.host" />

足りないものはありますか?ACCESSORY の代わりに ACTION_USB_DEVICE_ATTACHED を試しましたが、異なる結果が得られるようには見えません。また、接続するとアプリ内のデバイスと通信できるため、認識され、接続されたデバイス (NFC カードリーダー) からメッセージを送受信する後続のコードが期待どおりに機能します。継続的に失敗する唯一のものは、最初のケーブル接続の通知です。

ティア

4

1 に答える 1

8

ACTION_USB_DEVICE_ATTACHEDアクティビティのインテント フィルターのみにすることができ、BroadCastReciever にすることはできません。

UsbManager はアクティビティのみを解決し (BroadcastReciever 以外のサービスもありません)、それらを起動します。

したがって、ブロードキャストを受信して​​いません。

編集: Android 開発者サイトはブロードキャストと言っていますが、Android ソースはアクティビティを解決するだけです。ACTION_USB_ACCESSORY_DETACHEDレシーバーのデタッチ更新に使用できますが

Edit2 : Receiver に関する限り、コードに問題はありません。USB_ACCESSORY_ATTACHED がブロードキャストされる方法が原因で、コードが機能していません。USB_ACCESSORY_ATTACHED は真の意味でのブロードキャストではありません。Android フレームワークはアクティビティのインテントのみを起動するため、ブロードキャスト レシーバーでインテントを受信して​​いません。

Activity は ATTACHED Intent にのみ使用でき、レシーバーには使用できません

<activity android:name=".YourActivity" android:label="@string/app_name">
    <intent-filter>
        <action android:name="android.hardware.usb.action.USB_ACCESSORY_ATTACHED" />
    </intent-filter>

    <meta-data android:name="android.hardware.usb.action.USB_ACCESSORY_ATTACHED"
               android:resource="@xml/accessory_filter" />
</activity>
于 2012-12-06T07:58:16.793 に答える