Я разрабатываю приложение, которое читает теги NFC в формате NDEF. Моя цель заключается в том, чтобы приложение либо считывало тег, когда оно запущено, либо запускалось само, а затем читало тег, когда оно в данный момент остановлено или не запущено.
Я использую диспетчер переднего плана, поэтому приложение перехватывает все намерения NFC / NDEF, возникающие во время работы на переднем плане.
Таким образом, при отладке я вижу, что приложение получает Intent, когда я прикрепляю тег к устройству, и приложение находится на переднем плане. (вызывается onNewIntent, намерение обрабатывается правильно).
Но когда приложение запущено, а не на переднем плане или еще не запущено, вызывается onCreate, и после того, как приложение (вновь) создано, программа NFC устройства по умолчанию запускается с белым экраном, как может. быть замеченным на скриншоте.
Я провел много исследований по этой теме, прочитал много связанных вопросов по SO и несколько раз пытался настроить Манифест, но до сих пор он не работал. Кто-нибудь знает, почему это происходит и как заставить приложение запускаться каждый раз, когда прикрепляется определенный тег? Могу ли я быть, потому что есть ошибка или сбой в сочетании с Xamarin?
Мое устройство - Samsung Galaxy S7 Edge, я использую Xamarin.Forms для разработки приложения.
Другой (возможно) связанный с этим вопрос: в чем главное отличие «обычного» AndroidManifest.xml от того, который создается с использованием атрибутов Xamarin в MainActivity?
Ниже приведен мой AndroidManifest.xml и атрибут «Активность моей основной деятельности».
AndroidManifest.xml:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:versionCode="100" android:versionName="1.00" package="com.aaa.bbb" android:installLocation="auto">
<uses-sdk android:minSdkVersion="17" />
<uses-permission android:name="android.permission.nfc" />
<uses-permission android:name="android.permission.NFC" />
<uses-feature android:name="android.hardware.nfc" android:required="true" />
<application android:label="xxx.Android" android:icon="@drawable/Icon">
<activity
android:name=".MainActivity"
android:label="xxx"
android:launchMode="singleTop">
<intent-filter>
<action android:name="android.nfc.action.NDEF_DISCOVERED"/>
<category android:name="android.intent.category.DEFAULT"/>
<data android:mimeType="application/vnd.yyy.zzz"/>
</intent-filter>
</activity>
</application>
</manifest>
ActivityAtribute моей MainActivity:
[Activity(Label = "xxx", Icon = "@mipmap/icon", Theme = "@style/MainTheme", MainLauncher = true, ConfigurationChanges = ConfigChanges.ScreenSize | ConfigChanges.Orientation, LaunchMode =LaunchMode.SingleTop),
IntentFilter(new[] { "android.nfc.action.NDEF_DISCOVERED" }, DataMimeType = application/vnd.yyy.zzz, Categories = new[] { "android.intent.category.DEFAULT"})]
MainActivity:
protected override void OnNewIntent(Intent intent)
{
try
{
base.OnNewIntent(intent);
HandleIntent(intent);
}
[...]
}
protected override void OnCreate(Bundle savedInstanceState)
{
try
{
if (!m_Created)
{
base.OnCreate(savedInstanceState);
m_Created = true;
[...]
}
HandleIntent(this.Intent);
[...]
}
[...]
}
Снимок экрана стандартного приложения NFC с белым экраном