2013-04-11 346 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