我正在开发一个读取NDEF格式的NFC标签的应用程序。我的目标是,该应用程序要么在运行时读取标签,要么自行启动,然后在当前停止或未运行时读取标签。 我使用前台调度程序,因此该应用程序拦截在前台运行时发生的所有NFC / NDEF意图。 因此,在调试时,当我将标签附加到设备上且应用程序位于前台时,我可以看到该应用程序收到了Intent。 (调用“ onNewIntent”,表示Intent已正确处理。)
但是,当应用程序启动时,而不是在前台或尚未启动时,将调用“ onCreate”,并且在(新)创建应用程序后,设备的默认NFC程序会以白屏启动,可以在屏幕截图上看到。
我已经对该主题进行了很多研究,阅读了许多有关SO的相关问题,并尝试多次调整Manifest,但到目前为止,它从未奏效。有谁知道为什么会发生这种情况,以及如何在每次附加特定标签后启动应用程序?我可能是因为与Xamarin结合存在错误或故障吗?
我的设备是三星Galaxy S7 Edge,我使用Xamarin.Forms开发该应用程序。 另一个(也许)相关的问题:“常规” AndroidManifest.xml和使用MainActivity中的Xamarin属性创建的AndroidManifest.xml之间的主要区别是什么?
下面是我的AndroidManifest.xml和MainActivity的ActivityAttribute。
AndroidManifest.xml:
org.w3c.dom.Element
我的MainActivity的ActivityAttribute:
from pystray import MenuItem as item
import pystray
from PIL import Image
import tkinter as tk
class Program:
def __init__(self):
self.window = tk.Tk()
self.window.title("Welcome")
self.window.protocol('WM_DELETE_WINDOW', self.withdraw_window)
self.window.mainloop()
def quit_window(self):
self.icon.stop()
self.window.destroy()
def show_window(self):
self.icon.stop()
self.window.after(0, self.window.deiconify)
def withdraw_window(self):
self.window.withdraw()
image = Image.open("microphone.ico")
menu = (item('Quit', lambda: self.quit_window()), item('Show', lambda: self.show_window()))
self.icon = pystray.Icon("name", image, "title", menu)
self.icon.run()
run=Program()
MainActivity:
<?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>
Screenshot of the default NFC application with the white screen