Android 3.1 Activity, как получить ACTION_USB_DEVICE_ATTACHED? - PullRequest
3 голосов
/ 22 июня 2011

Я пытаюсь создать приложение с помощью USB-хоста, предоставляемого Android Honeycomb. Я хочу знать, когда мое USB-устройство (флэш-накопитель USB) подключено к основному устройству. На данный момент я могу знать, когда USB-устройство отсоединено, но не когда оно подключено.

Похоже, что эти 2 намерения отправляются не одинаково.

Не могли бы вы мне помочь? Большое спасибо.

1 Ответ

1 голос
/ 11 июля 2011

Насколько я могу судить, вам нужно создать прокси-активность, которая перехватывает намерение USB_DEVICE_ATTACHED, затем запускает реальное действие, передает ему некоторое намерение и, наконец, вызывается метод finish ().Пример XML, извлеченный из GalleryNew3DGoogle.apk

<activity android:label="@string/app_name" 
android:name="com.android.gallery3d.app.UsbDeviceActivity" android:taskAffinity="" 
android:launchMode="singleInstance"><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"/></activity>

А вот и .smali из UsbDeviceActivity (единственный метод - onCreate)

.method protected onCreate(Landroid/os/Bundle;)V
.locals 3
.parameter

.prologue
.line 35
invoke-super {p0, p1}, Landroid/app/Activity;->onCreate(Landroid/os/Bundle;)V

.line 38
new-instance v0, Landroid/content/Intent;

const-class v1, Lcom/android/gallery3d/app/Gallery;

invoke-direct {v0, p0, v1}, Landroid/content/Intent;-><init>(Landroid/content/Context;Ljava/lang/Class;)V

.line 39
const/high16 v1, 0x1400

invoke-virtual {v0, v1}, Landroid/content/Intent;->addFlags(I)Landroid/content/Intent;

.line 41
:try_start_0
invoke-virtual {p0, v0}, Lcom/android/gallery3d/app/UsbDeviceActivity;->startActivity(Landroid/content/Intent;)V
:try_end_0
.catch Landroid/content/ActivityNotFoundException; {:try_start_0 .. :try_end_0} :catch_0

.line 45
:goto_0
invoke-virtual {p0}, Lcom/android/gallery3d/app/UsbDeviceActivity;->finish()V

.line 46
return-void

.line 42
:catch_0
move-exception v0

.line 43
const-string v1, "UsbDeviceActivity"

const-string v2, "unable to start Gallery activity"

invoke-static {v1, v2, v0}, Landroid/util/Log;->e(Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;)I

goto :goto_0
.end method
...