У меня есть приложение xamarin, которое читает теги NFC. Он отлично работает, когда приложение открыто, но если приложение находится в фоновом режиме или закрыто, оно не может прочитать данные из тега.
Мой фильтр намерений:
[IntentFilter(
new[] {"android.nfc.action.NDEF_DISCOVERED", "android.intent.action.VIEW", "android.intent.action.MAIN"},
Categories =
new[]
{
"android.intent.category.DEFAULT", "android.intent.category.BROWSABLE",
"android.intent.category.LAUNCHER"
},
DataScheme = "http", DataHost = "app.myDomain.com")]
И в моем OnNewIntent мое намерение. Данные всегда возвращаются как нулевые при сканировании извне приложения. Есть какие-нибудь мысли о том, где может быть моя проблема?
OnResume:
nfcAdapter.EnableForegroundDispatch(this, nfcPendingIntent, nfcIntentFiltersArray, null);
Онневинтент:
protected override void OnNewIntent(Intent intent)
{
if (AndroidNFCHelper.isNfcIntent(intent))
{
DisplayMessage("And it is an NFC intent");
}
var tag = intent.GetParcelableExtra(NfcAdapter.ExtraTag) as Tag;
if (tag == null)
{
Debug.WriteLine("tag is null");
return;
}
//rest of OnNewIntent code...
}
Итак, что интересно, при сканировании вне приложения AndroidNFCHelper.isNfcIntent возвращается как ложное. Когда та же метка NFC сканируется в приложении, она возвращается как истинная. Продолжая, тег заканчивается как null и просто попадает в оператор return. При сканировании в приложении тег не является нулевым и продолжается.
PrepareForegroundNFCHandling - вызывается в OnCreate():
private void PrepareForegroundNFCHandling()
{
var tagDetected = new IntentFilter(NfcAdapter.ActionTagDiscovered);
var ndefDetected = new IntentFilter(NfcAdapter.ActionNdefDiscovered);
nfcIntentFiltersArray = new[] { ndefDetected, tagDetected};
var intent = new Intent(this, GetType()).AddFlags(ActivityFlags.SingleTop | ActivityFlags.BroughtToFront);
nfcPendingIntent = PendingIntent.GetActivity(this, 0, intent, 0);
nfcAdapter = NfcAdapter.GetDefaultAdapter(Application.ApplicationContext);
}