为什么选择usbManager.getAcccessoryList();总是返回null?

时间:2012-01-23 20:08:15

标签: android usb mode accessory

我正在使用Android 2.3.4在三星Galaxy S2中测试我的应用程序

我正在关注

  

http://developer.android.com/guide/topics/usb/accessory.html

的指令。

当我尝试运行它时,usbManager.getAcccessoryList();给予空。

即使我尝试将OTG电缆和pendrive连接到它上面。

我的清单。

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.test"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-feature android:name="android.hardware.usb.accessory" />

    <uses-sdk android:minSdkVersion="10" />

    <application
        android:icon="@drawable/icon"
        android:label="@string/app_name" >
        <uses-library android:name="com.android.future.usb.accessory" />

        <activity
            android:name=".SplashScreen"
            android:clearTaskOnLaunch="true"
            android:label="@string/app_name"
            android:screenOrientation="portrait" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity
            android:name=".Advanced"
            android:label="@string/app_name"
            android:screenOrientation="portrait" >
        </activity>
        <activity
            android:name=".Edit"
            android:label="@string/app_name"
            android:screenOrientation="portrait" >
        </activity>
        <activity
            android:name=".Add"
            android:label="@string/app_name"
            android:screenOrientation="portrait" >
        </activity>
        <activity
            android:name="Main"
            android:screenOrientation="portrait" >
            <intent-filter>
                <action android:name="android.hardware.usb.action.USB_ACCESSORY_ATTACHED" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>

            <meta-data
                android:name="android.hardware.usb.action.USB_ACCESSORY_ATTACHED"
                android:resource="@xml/accessory_filter" />
        </activity>
    </application>

</manifest>

2 个答案:

答案 0 :(得分:2)

我有同样的问题,但我的平板电脑有ICS。如果尝试我所做的,可能会奏效。我一直在寻找这个,但找不到它,但感谢所有花了一些时间回答我们的问题的人,以及网上的wiki资源,我想通了。

在某些Android版本中有一些丢失的文件,比如AINOL NOVO 7 PALADIN。我认为这适用于任何具有相同问题的ICS平板电脑。我知道Galaxy Tab有同样的问题,但由于我没有,我无法证实这一点。如果你这样做,请告诉我它是否适合你。

因此,让我们推送文件,看看它是怎么回事。

将一些丢失的文件复制到系统驱动器中:

$ adb remount

$ adb push AINOL_FIX/system/etc/permissions/android.hardware.usb.host.xml /system/etc/permissions

$ adb push AINOL_FIX/system/etc/permissions/android.hardware.usb.accessory.xml /system/etc/permissions

注意:如果出现显示内存不足的错误,则表示正确,您必须从系统驱动器中删除一些文件。我推荐一些来自system / app的动态壁纸。

我明白,对于编写系统驱动器,你应该具有root权限,当我这样做时我已经拥有它,所以如果它不起作用,请将其root。

您可以从Android源代码构建中获取文件,也可以从USB-HOST API实际工作的平板电脑中获取文件。我从linaro的ICS构建中获得了它们用于pandaboard。

现在,您应该尝试找到这些文件,但对于Gingerbread而言,您还需要推送 如果future.usb.accesory.jar已经存在,请system/framework {/ 1}}。

$ adb push AINOL_FIX/system/framework/com.android.future.usb.accessory.jar /system/framework

答案 1 :(得分:0)

来自http://developer.android.com/guide/topics/usb/accessory.html的引用:“如果您使用附加组件库,则将应用程序的最低SDK设置为API级别10;如果您使用的是android.hardware.usb软件包,则将其设置为12。” 您正在使用android.hardware.usb包。所以,你必须将版本设置为12。

发现错误: - )

不要忘记真正将SDK版本更改为12,不仅要声明它!

根据文档,使用com.android.future.usb包。