Pracowałem przez the description and samples for USB host at developer.android.com, aby wykryć podłączone i odłączone urządzenia USB.Android 3.1 Host USB - BroadcastReceiver nie otrzymuje USB_DEVICE_ATTACHED
Jeśli używam filtru intencyjnego w pliku manifestu, aby uruchomić aplikację po podłączeniu urządzenia, działa to doskonale: podłącz, urządzenie zostaje wykryte, Android prosi o pozwolenie na uruchomienie aplikacji, wyświetlane są informacje o urządzeniu w tabeli.
Aplikacja, którą rozwijam, nie powinna być uruchamiana/kończona tylko wtedy, gdy urządzenie jest podłączone/odłączone (np. W celach zarządzania danymi). Nie chcę również, aby okno dialogowe było otwarte, jeśli aplikacja jest już uruchomiona. Dlatego postanowiłem nie uruchamiać działania bezpośrednio, jeśli urządzenie jest podłączone, ale zarejestrować BroadcastReceiver, który (później) powinien powiadomić o aktywności, jeśli urządzenie jest włączone/odłączone. Ten odbiornik rozpoznaje działanie odrywania w porządku, ale nie przywiązanie.
Czy brakuje mi uprawnienia lub atrybutu danych lub czegoś w tym stylu? Samouczek i próbki nie mówią nic o dodatkowych niezbędnych atrybutach.
Oto manifest file:
<?xml version="1.0" encoding="utf-8"?>
<manifest
xmlns:android="http://schemas.android.com/apk/res/android"
package="de.visira.smartfdr"
android:versionCode="1"
android:versionName="1.0">
<uses-sdk android:minSdkVersion="12" />
<uses-feature android:name="android.hardware.usb.host" />
<application android:icon="@drawable/icon" android:label="@string/app_name">
<receiver android:name=".usb.Detector">
<intent-filter>
<action android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED" />
<action android:name="android.hardware.usb.action.USB_DEVICE_DETACHED" />
</intent-filter>
<meta-data android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED"
android:resource="@xml/device_filter" />
<meta-data android:name="android.hardware.usb.action.USB_DEVICE_DETACHED"
android:resource="@xml/device_filter" />
</receiver>
</application>
i odbiornik:
public class FDRDetector extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
Toast.makeText(context, "Action: " + action, 3).show();
// pops up only if action == DETACHED
}
Nie rozumiem, dlaczego te same prace intent-filter, jeśli mogę użyć je na działanie, ale nie, jeśli są one stosowane do odbiornika? Nawet jeśli ustawię odbiornik i filtruję w kodzie, załączniki nie zostaną rozpoznane.
Moje środowisko pracy: IDE: Eclipse 3.7 z Android Plugin
Device: Acer Iconia Tab A500
Androida: 3.1
góry dzięki
Spróbuj przesłonić OnNewIntent() - jest wywoływana, gdy używasz Androida: launchMode = "singleTop" i prawdopodobnie rozwiązuje twoją sytuację całkiem ładnie. onResume() jest zawsze wywoływana później. – Gusdor
Czy możesz wyjaśnić swój pierwszy akapit "Istota tego jest"? Wydaje mi się to bardzo zdezorientowane. –
Dzięki, zastanawiałem się nad tym samym. Dobrze wiedzieć, że to coś, co po prostu nie działa. Pachnie mnie jak błąd Androida. – Brian