Я работал через описание и образцы для хоста USB на сайте developer.android.com для обнаружения подключенных и отсоединенных USB-устройств.
Если я использую фильтр-замысел в файле манифеста для запуска приложения при подключении устройства, он отлично работает: подключается, устройство обнаружено, андроид запрашивает разрешение на запуск приложения, информация об устройстве отображается в стол.
Приложение, которое я разрабатываю, не должно запускаться/завершаться, только если устройство подключено/отсоединено (например, в целях управления данными). Кроме того, я не хочу, чтобы открытое диалоговое окно появлялось, если приложение уже запущено. Поэтому я решил не запускать деятельность напрямую, если устройство подключено, но зарегистрировать BroadcastReceiver, который (позже) должен уведомить об этом, если устройство находится в состоянии/отсоединено. Этот приемник распознает действие отсоединения просто отлично, но не прилагается.
Мне не хватает атрибута разрешения или данных или что-то в этом роде? Учебник и примеры ничего не говорят о дополнительных необходимых атрибутах.
Вот файл манифеста:
<?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>
И приемник:
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
}
Я не понимаю, почему работает тот же фильтр намерений, если я использую их для активности, но не если они применяются к получателю? Даже если я настрою приемник и фильтр в коде, прикрепления не распознаются.
Моя рабочая среда: IDE: Eclipse 3.7 с Android Plugin
Устройство: Acer Iconia Tab A500
Android: 3.1
Заранее спасибо