Android / NFC,在应用暂停或停止时调用onNewIntent而不是onCreate

时间:2019-03-18 15:36:33

标签: android xamarin.forms xamarin.android nfc ndef

我正在开发一个读取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

0 个答案:

没有答案