Я столкнулся со стеной, используя usb api. Я пытаюсь использовать широковещательный приемник для получения намерения ACTION_USB_DEVICE_ATTACHED, но это не так.
Чтобы уточнить, у меня это отлично работало через манифест, но это создало новую активность (и добавило в задний стек). Я нашел это нежелательным, особенно с учетом характера моего приложения (терминала).
Я предполагаю, что метаданные xml фильтра устройства необходимо добавить в фильтр намерений, но я понятия не имею, как это сделать.
Любая обратная связь приветствуется!
РЕДАКТИРОВАТЬ - некоторый код. Вот сочная часть из манифеста. Обратите внимание, что фильтр намерений закомментирован, чтобы динамически зарегистрированный BroadcastReceiver улавливал намерение (я полагаю, вы должны это сделать).
//<intent-filter>
// <action android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED" />
// <category android:name="android.intent.category.DEFAULT" />
//</intent-filter>
<meta-data android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED"
android:resource="@xml/device_filter"/>
Вот код, который подключает мой приемник
//register for attachment
IntentFilter attachedFilter = new IntentFilter(UsbManager.ACTION_USB_DEVICE_ATTACHED);
registerReceiver(mUsbAttachedReceiver, attachedFilter);
Это объявление BroadcastReceiver
private final BroadcastReceiver mUsbAttachedReceiver = new BroadcastReceiver()
{
@Override
public void onReceive(Context context, Intent intent)
{
//BREAKPOINT HERE IS NEVER HIT
String action = intent.getAction();
showDebugToast(action);
if (UsbManager.ACTION_USB_DEVICE_ATTACHED.equals(action)) {
synchronized(this)
{
UsbDevice device = (UsbDevice)intent.getParcelableExtra(UsbManager.EXTRA_DEVICE);
if (device != null){
getDevicePermission(device);
}
}
}
}
};
Я избегал объявления приемника в манифесте, так как не совсем уверен в практике его использования (приемник существует отдельно от любого действия). Правильно ли я думаю, что приемник будет работать до тех пор, пока работает приложение, или он будет работать только на переднем плане, даже если он объявлен в манифесте? Приветствуется любая литература по этому поводу.
С тех пор я обошел эту проблему, предоставив активности режим запуска «singleTop» и реализовав onNewIntent(). Это дает мне желаемое поведение, а также позволяет запускать без выполнения действия (с использованием манифеста). Это было моей конечной целью. Однако я действительно хочу понять это поведение и по-прежнему очень заинтересован в решении!
ДОПОЛНИТЕЛЬНОЕ РЕДАКТИРОВАНИЕ: мое отладочное устройство — Samsung Galaxy S3. Я не менял ПЗУ.