簡體   English   中英

Android(附件模式)和Windows PC(主機)之間的USB通信

[英]USB communication between Android (accessory mode) and Windows PC (host)

我嘗試在我的筆記本(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:我現在在窗戶方面什么也沒做。 我只是按照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:我是否可以使用任何libarys /項目來識別Windows端的USB連接?

  • 4:我還應該考慮進一步的事情嗎? 出了什么問題?
  • 5:thx為你的幫助:)

您應該在主機端(在您的情況下是Windows)上有一個應用程序,它將要求Android進入附件模式。 當它詢問時,您將獲得是否給予許可的選項。 您有零配件,因為沒有連接配件,已跟隨AOAP啟動通信。 因此,可以使用未運行Android的附件設備並使用AOAP與其進行通信。

您可以在Android SDK的USB文件夾中找到Android端的示例。

你沒有附件設備掛鈎到你的Android USB端口你有0配件的原因,你的情況是使用Windows PC作為主機(你可以嘗試編寫自定義的WinUSB驅動程序),Android設備是一個純USB設備,它與AOA無關,當您從主機(Windows或macOS)發送模式切換請求時,Android設備變為附件模式並且本身是附件,您將通過使用getAccessoryList找到一個附件。 順便說一句,我通過libusb使用Windows和macOS與Android合作。

是的,您需要在Windows端使用WinUSB / libusb API來執行主機工作,將Android轉換為附件模式,然后互相交談

好吧,我想我自己找到了答案。 Android USB配件模式只能在Android手機和運行Android的其他設備(如Arduino)之間使用。 因此,此設置無法實現。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM