Ich habe eine Xamarin-App, die NFC-Tags liest. Es funktioniert einwandfrei, wenn die App geöffnet ist. Wenn die App jedoch im Hintergrund oder geschlossen ist, können die Daten nicht vom Tag gelesen werden.Das Lesen von NFC-Tags von außerhalb der App gibt keine Daten zurück
Meine Absicht Filter:
[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")]
Und in meinem OnNewIntent, mein intent.Data immer wieder als null kommt, wenn von außerhalb des App gescannt. Gibt es irgendwelche Gedanken darüber, wo mein Problem liegen könnte?
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...
}
So ist die interessante Sache, wenn sie außerhalb der App gescannt, kommt AndroidNFCHelper.isNfcIntent wieder als falsch. Wenn das gleiche NFC-Tag in der App gescannt wird, wird es als wahr zurückgegeben. Wenn Sie fortfahren, endet tag als null und trifft nur die return-Anweisung. Wenn das Tag in der App gescannt wird, ist das Tag nicht null und wird fortgesetzt.
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);
}
Welche Daten (NDEF-Nachricht) haben Sie auf dem Tag gespeichert? Schlägt das Tippen auf das Tag bei geschlossener App (oder im Hintergrund) dazu bei, dass Ihre Aktivität geöffnet wird? Welchen Code haben Sie in OnCreate(), OnStart(), OnResume()? Welche Absicht.Aktion siehst du in OnNewIntent()? –
Es ist nur eine URL .. etwas wie http://app.myDomain.com/p/9. Tippen mit geschlossener App öffnet die App, aber da das Tag-Objekt letztendlich null zurückkommt, passiert nichts.Ich werde den Beitrag mit dem anderen Code aktualisieren – Arthurdent510
Rufen Sie OnNewIntent() von überall in Ihrem Code? Sind Sie sicher, dass Ihr Tag nur einen einzigen NDEF-Datensatz mit der URL enthält und keinen Android-Anwendungsdatensatz mit dem Namen Ihres App-Pakets enthält? –