У меня есть приложение xamarin, которое читает теги NFC. Он отлично работает, когда приложение открыто, но если приложение находится в фоновом режиме или закрыто, он не может прочитать данные из тега.Чтение тегов 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, мой intent.Data всегда возвращается в нуль при сканировании со стороны приложения. Есть ли мысли о том, где моя проблема?
OnResume:
nfcAdapter.EnableForegroundDispatch(this, nfcPendingIntent, nfcIntentFiltersArray, null);
OnNewIntent:
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. При сканировании в приложении тег не равен null и продолжается.
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);
}
Какие данные (сообщение NDEF) вы сохранили на ярлыке? Нажимает ли тег, когда ваше приложение закрыто (или в фоновом режиме), вызывает открытие вашей активности? Какой у вас код в OnCreate(), OnStart(), OnResume()? Какое намерение вы видите в OnNewIntent()? –
Это всего лишь URL-адрес .. что-то вроде http://app.myDomain.com/p/9. Нажатие с закрытым приложением открывает приложение, но поскольку объект тега в конечном счете возвращается к нулю, ничего не происходит.Я обновляю сообщение другим кодом – Arthurdent510
Вы вызываете OnNewIntent() из любого места в своем коде? Вы уверены, что ваш тег содержит только одну запись NDEF с URL-адресом и что она не содержит запись приложения Android с именем вашего приложения? –