2013-04-11 149 views
9

我嘗試在筆記本電腦(win7)和我的android手機(Android 4.2)之間建立USB連接。 筆記本電腦應充當主機來爲android手機供電。目標是筆記本和手機可以發送和接收xml字符串Android(配件模式)和Windows PC(主機)之間的USB通信

我試圖按照說明配件模式的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電腦(例如,我將手機插入另一臺電腦)。

  • 2: 我做窗戶上側沒有現在。我只是按照android頁面,插入usb電纜並觀看日誌。應用程序開始請求許可,但附件爲空。任何暗示爲什麼它是空的? 代碼:

    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對您有所幫助:)
+0

所以我猜#1現在更清晰了。 Intentfilter僅用於自動檢測 – B770 2013-04-11 11:52:52

回答

-3

好吧,我想我找到了自己的答案。 Android USB配件模式只能在Android手機和運行Android的其他設備(如Arduino)之間進行。 所以這是不可能的這個設置。

+0

此答案不正確 - Arduino不運行Android,並且USB主機不需要這樣做。但是,它需要能夠以支持USB配件模式所需的特定方式進行交談。 – 2014-04-17 18:13:03

4

您應該對主機端(WINDOWS你的情況)的應用程序,它會問了Android進入輔助模式。當它詢問時,你會看到允許或不允許的選項。您沒有零配件,因爲沒有配件連接,它已跟隨AOAP發起通信。 所以有可能擁有配件設備,即不運行Android並使用AOAP與其通信。

你可以找到樣品在Android側面從Android SDK的例子,在USB文件夾中。

+0

以及如何實現任何源應用程序? – 2014-10-01 11:14:33

+2

你有沒有發現任何樣品電腦端從android接收數據? – badoualy 2015-04-20 13:39:02

+0

@seed其實我沒有用過它。一旦可以開始使用它,我就熟悉它了,但是它被推遲了,從那時起我還沒有處理它。不過,我認爲,一旦你知道了協議,找出它應該不是什麼大不了的事情。 – helleye 2015-04-22 10:02:01