我想在安卓系统中写一个基于USB_DEVICE_ATTACHED intent的服务。因此,基本上,我的服务应该在一个特定的FT232C设备( USB - VID:PID 0403:6010)连接时启动,并在该USB设备断开时停止。是否可以这样做,或者我是否应该始终有一个活动来启动此服务,以防它尚未启动?最后,该服务的目的是基于从该LocationProvider设备提供的位置,使用TEST_PROVIDER更新该位置。
我已经尝试在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意图的onStartCommand()
发布于 2013-03-11 07:41:13
根据我的经验,a无法接收USB意图。我通过创建一个隐藏的活动来接收意图并重新广播它,从而克服了这一点。当然,此活动还可以处理服务的启动/停止。
我已经在这里放了一些工作代码:
https://stackoverflow.com/a/15151075/588476
您只需更改它,使其自动启动和停止您的服务。
发布于 2013-06-20 01:02:49
我认为主要的问题是供应商和产品id的数字基数。设备筛选器xml中的格式应该是十进制的,所以供应商-id=“1025”和产品-id=“24592”。
除此之外,它绝对应该是USB_DEVICE_ATTACHED,而不是UMS_CONNECTED (后者根本不是USB主机模式)。
对于服务是否可以接收广播意图,或者是否必须使用活动,我没有权威的答案,但似乎Wayne Uroda在这个问题上有很好的经验。
发布于 2012-11-20 11:25:24
是的,这是很有可能的,很抱歉地说,你在AndroidManifest.xml的审阅者标签中使用了错误的意图过滤器。让我来指引你吧
AndroidManifest.xml
.
.
.
<receiver android:name=".DetactUSB">
<intent-filter>
<action android:name="android.intent.action.UMS_CONNECTED" />
<action android:name="android.intent.action.UMS_DISCONNECTED" />
</intent-filter>
</receiver>
BroadcastReceiver文件
public class DetactUSB extends BroadcastReceiver
{
private static final String TAG = "DetactUSB";
@Override
public void onReceive(Context context, Intent intent)
{
// TODO Auto-generated method stub
if (intent.getAction().equalsIgnoreCase( "android.intent.action.UMS_CONNECTED"))
{
// Fire your Intent to start Activity
Log.i(TAG,"USB connected..");
}
if (intent.getAction().equalsIgnoreCase( "android.intent.action.UMS_DISCONNECTED"))
{
}
}
}
https://stackoverflow.com/questions/13466103
复制相似问题