if you have more than 1 nfc tag reader app on your device, the system will show you a dialog with a list of apps to chose from in the event of a tag discovery.
if you have more than 1 nfc tag reader app on your device, but your app is registered to read a certain tag type that the other apps cannot recognize, then your app will launch automatically. (but since professional nfc apps register for all types of nfc tags, this is not going to happen. i mention it because it explains why your app will not be chosen automatically even though you have registered to receive the intent.)
if the system shows a list of apps, you can select the one you always want to use. (this should avoid the selection dialog).
including "nfc.EnableForegroundDispatch" is not enough; your app has to be running in the foreground. nfc tags can only be handled in the foreground.
there are only 2 ways to avoid the app selection dialog:
1) remove the other nfc apps from your device (or use a second device for testing that only has your app).
2) start your app before trying to read any tags.
note: in some android models, there is a system setting which allows the system to scan nfc tags. this is not the same as the system's handling the discovery. in other words, in the absence of any nfc reader app, android has a "hidden" system app which can scan common NDEF tags. you can turn this off if it gets in the way of your app. the only way to turn off tag discovery is to turn nfc off in system settings. (this is similar to the device's ability to read qr codes without any barcode reading app. you can turn this off, too, in camera settings. more and more, android tries to supplant separate apps to perform certain actions. translate is another example.)
there are ways to work with and around crashes. the app's (or library's author) will have to address the particularities. that said, reading nfc tags is not a simple proposition. for many reasons. failure to read a given tag is to be expected, a crash implies something else.