NFC 在主动 KIOSK 模式下无法正常工作

MDe*_*v25 5 android kiosk nfc kiosk-mode

我刚开始使用 NFC 创建 KIOSK 应用程序,但遇到了问题。该应用程序在 KIOSK 模式下工作并扫描 NFC 卡。但有时 NFC 会停止工作,我会重新启动设备以保持 NFC 工作,但有时即使重新启动后 NFC 也无法工作。设备操作系统是Android 7。这是Manifest文件:

<activity
        android:screenOrientation="portrait"
        android:name=".MainActivity"
        android:launchMode="singleTask"
        android:finishOnTaskLaunch="true"
        android:clearTaskOnLaunch="true"
        android:stateNotNeeded="true"
        android:excludeFromRecents="true"
        android:autoRemoveFromRecents="true">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
            <category android:name="android.intent.category.HOME" />
            <category android:name="android.intent.category.DEFAULT" />
        </intent-filter>

        <intent-filter>
            <action android:name="android.nfc.action.NDEF_DISCOVERED"/>
            <category android:name="android.intent.category.DEFAULT"/>
        </intent-filter>
    </activity>
Run Code Online (Sandbox Code Playgroud)

这是活动类的代码:

class MainActivity : BaseActivity() {

 private val kioskManager by lazy {
    KioskManager(
        activity = this,
        activityName = MainActivity::class.java.name,
        componentName = AppDeviceAdminReceiver.getComponentName(this)
    )
 }

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    isAdmin = devicePolicyManager.isDeviceOwnerApp(packageName)
    if (intent.getStringExtra(KioskManager.LOCK_ACTIVITY_KEY) == KioskManager.UNLOCK) {
        kioskManager.stopLock()
    } else {
        kioskManager.startLock()
    }
    setContentView(R.layout.activity_main)
}

override fun onNewIntent(intent: Intent?) {
    super.onNewIntent(intent)
    val tagFromIntent: Tag? = intent?.getParcelableExtra(NfcAdapter.EXTRA_TAG)
    // handle NFC data     
}

override fun onResume() {
    super.onResume()
    enableNfcForegroundDispatch()
}

override fun onPause() {
    disableNfcForegroundDispatch()
    super.onPause()
}


private fun enableNfcForegroundDispatch() {
    try {
        val intent = Intent(this, javaClass).addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP)
        val nfcPendingIntent = PendingIntent.getActivity(this, 0, intent, 0)
        nfcAdapter.enableForegroundDispatch(this, nfcPendingIntent, null, null)
    } catch (ex: IllegalStateException) {
        ex.printStackTraceDebug()
    }
}

private fun disableNfcForegroundDispatch() {
    try {
        nfcAdapter.disableForegroundDispatch(this)
    } catch (ex: IllegalStateException) {
        ex.printStackTraceDebug()
    }
}
}
Run Code Online (Sandbox Code Playgroud)

我花了一个月的时间来修复这个错误,但找不到答案?如何解决这个问题?谢谢!