Android和PC之间的USB通信

时间:2018-07-20 07:50:25

标签: android usb serial-communication

背景:我已经尝试在stackoverflow,android开发人员以及网络上的其他各种资源中寻求帮助。这是我最后的希望。 我是通信新手,从USB实施开始。以下是我的问题:

1)当我将手机连接到Windows PC时,哪个是主机? 假设我想创建一个可以发送数据的应用程序,我是在做手机主机吗?

2)对于这种情况(Windows PC和Android手机),另一个是外围设备还是设备?他们是一样的吗?

3)从android开发人员网站和关于USB的Windows论坛上,我了解到需要遵循某些步骤,就像 -创建USBManager的实例。 -创建设备的获取列表 -选择要与之建立连接的设备 -创建一个界面 -从该接口获取端点。 -创建DeviceConnections的实例,并调用bulkTransfer方法并发送数据。

但是当我尝试上述步骤时,我得到了设备== null。 我什至不知道我对上述交流方法的理解是否正确。

有人可以帮助我理解并建立PC和android手机之间的基本通信,并至少发送“ hello world”。

非常感谢您阅读这么长的问题。

这是我所做的代码示例。这里的设备列表返回空值。

 public class MainActivity extends AppCompatActivity {

    android.widget.Button usbButton;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        final CustomUSBManager cmanager = new CustomUSBManager();

//1)        //Create instance of USB Manager using getSystemService
        final UsbManager manager = (UsbManager) getSystemService(Context.USB_SERVICE);

//2)        //Create a list of devices
        HashMap<String,UsbDevice> deviceList = manager.getDeviceList();

        Log.d("Devicelist = ", String.valueOf(deviceList.get(0)));

//3)        //Get a specific device from the list



//-----------------------------------------------------------------

Here is my manifest file.

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.neeraj.usbcommunication1">
    <uses-feature android:name="android.hardware.usb.host"></uses-feature>

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>

        </activity>
    </application>

</manifest> 
        final UsbDevice device = deviceList.get(0); //getting first device

1 个答案:

答案 0 :(得分:0)

这将无法按您想要的方式工作。 UsbManager.getDeviceList()用于具有USB端口的Android设备(例如平板电脑)。但是,您将Android设备充当设备连接到PC 充当主机

如果要在Android USB设备和某些USB主机之间进行通信,则需要使用附件模式https://developer.android.com/guide/topics/connectivity/usb/)。但是,此模式需要USB主机(您的PC)上的特殊驱动程序支持。

还要注意,getDeviceList()在附件模式下没有意义。这是因为连接的附件是USB主机,而不是USB设备。

在此信息中了解有关此内容的更多信息:Android to PC USB Read/Write

请注意,我的答案基于以下答案:https://stackoverflow.com/a/14099963/5457878