java - Android(附件模式)和 Windows PC(主机)之间的 USB 通信

标签 java android windows usb communication

我尝试在笔记本电脑 (win7) 和安卓手机 (Android 4.2) 之间建立 USB 连接。 笔记本应该作为主机为安卓手机供电。目标是笔记本和手机可以收发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 计算机(例如,我将手机插入另一台计算机)。

  • 2: 我现在在 window 方面什么也没做。我只是按照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:是否有任何库/项目可用于识别 Windows 端的 USB 连接?

  • 4:还有什么我应该考虑的吗?哪里出错了?
  • 5:感谢您的帮助:)

最佳答案

您应该在主机端(在您的情况下是 Windows)有一个应用程序,它会要求 Android 进入配件模式。当它询问时,您将看到是否授予许可的选项。你有 null accessory 因为没有连接任何 accessory,它遵循 AOAP 来启动通信。 因此,可以使用未运行 Android 的附件设备并使用 AOAP 与其通信。

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

关于java - Android(附件模式)和 Windows PC(主机)之间的 USB 通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15945334/

相关文章:

java - 如何让 Jackson 序列化器更加 DRY?

java - 无法访问数组的 "length"属性

android - 如何检查视频是否播放完毕?

android - GSON 忽略 JSON 字符串中的缺失值

c++ - 如何在 Windows 2008 R2 中使用 CreateVirtualDisk 创建差异 VHD

java - 堆空间内存不足

java - 在 OpenAPI 中启用异步服务器 API 为 Jersey 按需生成代码

android - 无法找到头文件 - Android NDK

c - QueryPerformanceFrequency 与 CPU 速度不匹配?

python - Shebang/选择脚本要运行的 Python 版本