Программный фильтр намерений для NFC - PullRequest
2 голосов
/ 26 мая 2011

РЕДАКТИРОВАТЬ: Я нашел решение, см. Ниже

Мой первый пост на StackOverFlow. Однако я некоторое время читал об этой проблеме без решения, которое работает.

Я хотел бы зарегистрировать следующее намерение: android.nfc.action.TAG_DISCOVERED

Я делаю в своем коде следующее:

    IntentFilter filter = new IntentFilter();
    filter.addAction("android.nfc.action.TAG_DISCOVERED");
    filter.addCategory("android.intent.category.DEFAULT");
    Log.d(TAG, "Created the new filter");
    reciever = new NFCBroadcastReciever(this);
    Log.d(TAG, "Created the new Broadcast Reciever");
    this.registerReceiver(reciever, filter);
    Log.d(TAG, "Registered new reciever");

BroadCastReciever определяется следующим образом:

открытый класс NFCBroadcastReciever расширяет BroadcastReceiver {

private Screen screen;
public static String TAG = "NFCBroadcastReciever";

NFCBroadcastReciever(Screen _screen){
    screen = _screen;
}

@Override
public void onReceive(Context context, Intent intent) {

    String action = intent.getAction();
    Log.d(TAG, "Action recieved: "+action);
    if(action != null && NfcAdapter.ACTION_TAG_DISCOVERED.equals(action)){
        paymentScreen.onNewIntent(intent);
    }
}

}

Однако я получаю исключение из-за того, что намерение, запускаемое из прочитанного тега, не имеет соответствующей Активности. Я хотел бы иметь возможность начать прослушивание событий NFC только в определенный момент в моем приложении.

Заранее спасибо за помощь.

На самом деле я нашел решение проблемы, ключ к тому, чтобы события NFC происходили только для определенного действия, когда оно активно, а не во время выполнения других действий. Пример в Android SDK объясняет это: http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/nfc/ForegroundDispatch.html

Ответы [ 2 ]

2 голосов
/ 22 июня 2011

На самом деле я нашел решение проблемы, ключ к тому, чтобы события NFC происходили только для определенного действия, когда оно активно, а не во время выполнения других действий.Пример в Android SDK объясняет это: http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/nfc/ForegroundDispatch.html

0 голосов
/ 26 мая 2011

Собираетесь ли вы начать деятельность после получения трансляции? Мне не кажется, что paymentScreen.onNewIntent(intent); достигнет этого. Вместо этого вам, вероятно, потребуется создать намерение, которое вы можете использовать с startActivity (), и вам, вероятно, захочется включить соответствующие данные из намерения вашего широковещательного приемника в свое намерение деятельности в виде дополнительных действий.

...