Программный фильтр намерений для NFC

#android #intentfilter #nfc

#Android #intentfilter #nfc

Вопрос:

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

Мой первый пост о 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 amp;amp; 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

Комментарии:

1. Было бы лучше ответить на ваш вопрос отдельным сообщением и пометить его как ответ.

2. спасибо за комментарий, новичок в stackoverflow, добавил ответ в виде отдельного поста

Ответ №1:

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

Комментарии:

1. Этот ответ помог мне, но эта ссылка на образец больше не существует. Документация по отправке на передний план находится здесь в разделе Advanced NFC.

Ответ №2:

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