15

ノートブック (win7) と Android フォン (Android 4.2) を USB 接続しようとしています。ノートブックは、Android フォンに電力を供給するホストとして機能する必要があります。目標は、ノートブックと電話が xml 文字列を送受信できるようにすることです

アクセサリ モードを説明する Android ページ ( http://developer.android.com/guide/topics/connectivity/usb/accessory.html ) に従ってみました。

  • 1: ここで行ったように、アクセサリ フィルターを定義する必要があります。

    <?xml version="1.0" encoding="utf-8"?>
    <resources>
    <usb-accessory model="DemoKit" manufacturer="Google" version="1.0"/>
    </resources>
    

    特別なハードウェアを認識させたくないからです。すべての種類の Windows コンピュータを認識させたい (たとえば、電話を別の PC に接続する)。

  • 2: 今のところ Windows 側では何もしていません。Androidページをたどり、USBケーブルを接続してログを見ました。アプリの startet は許可を求めますが、アクセサリは null です。なぜそれがnullなのかヒントはありますか? コード:

    public class MainActivity extends Activity {
    private static final String ACTION_USB_PERMISSION = "com.android.example.USB_PERMISSION";
    private static final String TAG = "USB_PERMISSION";
    UsbAccessory accessory;
    
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    
    UsbManager manager = (UsbManager) getSystemService(Context.USB_SERVICE);
    
    PendingIntent mPermissionIntent = PendingIntent.getBroadcast(this, 0,
            new Intent(ACTION_USB_PERMISSION), 0);
    IntentFilter filter = new IntentFilter(ACTION_USB_PERMISSION);
    registerReceiver(mUsbReceiver, filter);
    accessory = (UsbAccessory) getIntent().getParcelableExtra(
            UsbManager.EXTRA_ACCESSORY);
    manager.requestPermission(accessory, mPermissionIntent);
     }
    
    private final BroadcastReceiver mUsbReceiver = new BroadcastReceiver() {
    
    public void onReceive(Context context, Intent intent) {
        String action = intent.getAction();
        if (ACTION_USB_PERMISSION.equals(action)) {
            synchronized (this) {
                if (intent.getBooleanExtra(UsbManager.EXTRA_PERMISSION_GRANTED, false)) {
                    String manufacturer;
                    Log.d(TAG, "permission accepted for accessory " + accessory);
                    if (accessory != null) {
                        manufacturer = accessory.getManufacturer();
                        Log.d(TAG, "Manufacturer: " + manufacturer);                        }
                } else {
                    Log.d(TAG, "permission denied for accessory "+ accessory);
                }
            }
        }
    }
    };
    }
    
  • 3: Windows 側で USB 接続を識別するために使用できるライブラリ/プロジェクトはありますか?

  • 4: 他に考えるべきことはありますか? 間違っていることはありますか?
  • 5: ご協力ありがとうございます :)
4

4 に答える 4

5

ホスト側 (この場合は Windows) に、Android にアクセサリ モードに入るように要求するアプリケーションが必要です。尋ねられたら、許可を与えるかどうかのオプションが表示されます。通信を開始するために AOAP に従っているアクセサリが接続されていないため、null アクセサリがあります。そのため、Android を実行していないアクセサリ デバイスを使用して、AOAP を使用して通信することができます。

USB フォルダーにある Android SDK のサンプルで、Android 側の例を見つけることができます。

于 2014-02-10T12:51:57.537 に答える
0

アクセサリ デバイスが Android USB ポートに接続されていないため、アクセサリが 0 になった理由は、Windows PC をホストとして使用し (カスタマイズされた WinUSB ドライバーを作成してみてください)、Android デバイスが純粋な USB デバイスであるためです。 AOA とは関係ありませんが、ホスト コンピューター (Windows または macOS) からモード切り替え要求を送信すると、Android デバイスがアクセサリ モードになり、それ自体がアクセサリである場合、getAccessoryList を使用して 1 つのアクセサリを検索します。ところで、libusb を介して Windows と macOS の両方を Android で動作させることができました。

于 2019-02-26T16:39:22.137 に答える
-5

わかりました、私は自分で答えを見つけたと思います。Android USB アクセサリ モードは、Android フォンと Android を実行している別のデバイス (Arduino など) の間でのみ可能です。したがって、これはこの設定では不可能です。

于 2013-04-12T06:39:59.950 に答える