Android USB Host模式服务——基于USB_DEVICE_ATTACHED启动

标签 android usb host

我想在 Android 中编写一个基于 USB_DEVICE_ATTACHED Intent 启动的服务。所以,基本上我的服务应该在连接特定 USB 设备 (FT232C - VID:PID 0403:6010) 时启动,并在断开该 USB 设备时停止。是否可以这样做,或者我是否应该始终有一个启动此服务的 Activity,以防它尚未启动?该服务的最终目的是根据此 USB 设备提供的位置,使用 TEST_PROVIDER 更新 LocationProvider 上的位置。

我已经尝试在 AndroidManifest.xml 中使用此配置创建服务

    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        package="com.testlocservice"
        android:versionCode="1"
        android:versionName="1.0">

        <uses-sdk android:minSdkVersion="12" android:targetSdkVersion="15" />
        <uses-feature android:name="android.hardware.usb.host"/>
        <supports-screens android:resizeable="true" android:smallScreens="true" android:anyDensity="true" android:largeScreens="true" android:xlargeScreens="true" android:normalScreens="true"/>
        <uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION"/>
        <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
        <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
        <uses-permission android:name="android.permission.READ_PHONE_STATE"/>

        <application android:label="@string/app_name"
            android:icon="@drawable/ic_launcher"
            android:theme="@style/AppTheme">
                <service android:name="com.testlocservice.LocationService"         android:process=":LocService" android:enabled="true" android:exported="true">
                    <intent-filter>
                        <action         android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED" />
                    </intent-filter>
                    <meta-data android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED"
                android:resource="@xml/device_filter" />                
                </service>
        </application>
    </manifest>

xml/device_filter.xml 包含这个

    <?xml version="1.0" encoding="utf-8"?>
    <resources>
            <usb-device vendor-id="0403" product-id="6010"/>
    </resources>

我的 LocationService 类已经覆盖了处理 USB_DEVICE_ATTACHED Intent 的 onStartCommand()

最佳答案

根据我的经验, 无法接收 USB Intent 。我通过创建一个隐藏的 Activity 来接收 Intent 并重新广播它来克服这个问题。当然,此 Activity 也可以处理启动/停止您的服务。

我已经在这里放了一些工作代码:
https://stackoverflow.com/a/15151075/588476
您只需更改它,以便它自动启动和停止您的服务。

关于Android USB Host模式服务——基于USB_DEVICE_ATTACHED启动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13466103/

相关文章:

android - 定义和实现 HIDL 接口(interface)

c# - 如何从 ASP.NET 应用程序连接到服务器端 USB (HID) 设备?

css - .less 文件扩展名未编译

java - 在 Content Provider 的帮助下打开 Assets 文件时出现问题

java - Android 仪器测试、模拟 final类

c# - 如何使用 MTP 从 USB 设备上传和下载数据(设备不是相机)

usb - 如何识别Linux主机上运行的Virtualbox中的USB设备?

Android 平板电脑无法通过 USB 端口找到 USB 设备,但可以通过 OTG 线找到 USB 设备

http - Web 请求中 'Host' header 的使用

android - PropertyInfo.getName() ...等很多方法无法解析