Android USB主机模式



我很抱歉,由于不准确描述了我的问题,我最近提出了一个问题。我已经编辑了我的问题。

我是试图开发使用USB主机的应用程序的初学者。我已经阅读了USB主机| Android开发人员教程,但是对于最初设置的方式仍然失去了。

我的目的是让应用程序使用枚举过程来找到设备,因为我不知道我所连接的设备的供应商-ID或product-id是什么。我会收到致命例外:Main 尝试运行自己拥有的东西时出错。

以下是我的代码。任何帮助将不胜感激。

主要活动类

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.hardware.usb.UsbManager;
import android.hardware.usb.UsbDevice;
import android.content.Context;
import java.util.HashMap;
import java.lang.Object;
import android.content.Intent;
import android.util.Log;
import java.util.Iterator;
import java.util.Collection;
import android.view.View;
import android.widget.EditText;

public class MainActivity extends AppCompatActivity {


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
    UsbManager manager = (UsbManager) getSystemService(Context.USB_SERVICE);
    HashMap <String, UsbDevice> deviceList = manager.getDeviceList();
    UsbDevice device = deviceList.get("deviceName");
}

清单文件

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.trapperdavis.ircontprototype2">
    <uses-sdk android:minSdkVersion="12" />
    <uses-feature android:name="android.hardware.usb.host" />

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <action android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
            <meta-data
                android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED"
                android:resource="@xml/device_filter" />
        </activity>
    </application>
</manifest>

在https://developer.android.com/guide/guide/topics/connectivitivitive/usb/host.html基本上说,有两种可能性可以获取有关附加到附加USB设备的信息Android

  • 连接设备后,OS(操作系统)发送事件,该事件可以由IntentFilter(基于事件的编程)捕获

  • 该应用程序可以查询已经连接的设备

我想您想查询已经连接的USB设备并获取有关设备的信息。使用您的代码,您可以列出所有随附的USB设备,但无法获取信息。以下代码将打印有关附件设备的更多信息,我从http://android-er.blogspot.de/2013/10/list-attached-usb-devices-in-usb-host.html

 private void checkInfo() {
  UsbManager manager = (UsbManager) getSystemService(Context.USB_SERVICE);
  HashMap<String, UsbDevice> deviceList = manager.getDeviceList();
  Iterator<UsbDevice> deviceIterator = deviceList.values().iterator();
  String i = "";
  while (deviceIterator.hasNext()) {
   UsbDevice device = deviceIterator.next();
   i += "n" +
    "DeviceID: " + device.getDeviceId() + "n" +
    "DeviceName: " + device.getDeviceName() + "n" +
    "DeviceClass: " + device.getDeviceClass() + " - " 
     + translateDeviceClass(device.getDeviceClass()) + "n" +
    "DeviceSubClass: " + device.getDeviceSubclass() + "n" +
    "VendorID: " + device.getVendorId() + "n" +
    "ProductID: " + device.getProductId() + "n";
  }
  textInfo.setText(i);
 }

完整源代码在http://android-er.blogspot.de/2013/10/list-attached-usb-devices-in-usb-host.html

代码使用和Iterator类,可访问由USB管理器生成的deviceList中的所有USB设备。然后,通过访问其字段来从device类中提取信息(vendorid,...)(device类的字段由OS内部由本机C函数(JNI)内部构建)

相关内容

最新更新