Получение намерения ACTION_USB_DEVICE_ATTACHED через код

Я столкнулся со стеной, используя 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. Я не менял ПЗУ.


person Gusdor    schedule 25.06.2012    source источник
comment
Вы объявили приоритет для своего BroadcastReciever? пожалуйста, опубликуйте часть получателя из вашего манифеста, а также   -  person Rafael T    schedule 25.06.2012
comment
Я знаю, что это очень поздно, но похоже, что это дубликат stackoverflow.com/questions/6981736/   -  person svachalek    schedule 19.04.2013


Ответы (1)


да, вам нужно добавить метаданные с Activity как:

<meta-data android:name="android.hardware.usb.action.USB_ACCESSORY_ATTACHED"
               android:resource="@xml/accessory_filter" />

аксессуар_фильтр:

<resources>
    <usb-accessory manufacturer="Acme, Inc" model="Whiz Banger" version="7.0" />
</resources>

см. этот блог разработчиков Android Яркая идея: Android Open Аксессуары

person ρяσѕρєя K    schedule 25.06.2012
comment
Я должен был быть более ясным. У меня уже есть раздел метаданных, но я не уверен, что, кроме того, мне нужно добавить его в фильтр программно. - person Gusdor; 25.06.2012
comment
@Gusdor проверить это source-android.frandroid.com/frameworks/base/media/tests/ может быть полезно - person ρяσѕρєя K; 25.06.2012
comment
Привет Имран. Спасибо за ссылку. Регистрация и получение очень похожи на мои примеры кода, размещенные выше. Кажется, что это пешеходные вещи, но я явно что-то упускаю. - person Gusdor; 25.06.2012