Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android NFC读取在全屏启动程序应用程序从后台启动后失败_Java_Android_Nfc - Fatal编程技术网

Java Android NFC读取在全屏启动程序应用程序从后台启动后失败

Java Android NFC读取在全屏启动程序应用程序从后台启动后失败,java,android,nfc,Java,Android,Nfc,我的应用程序是一个启动程序,我在安装后立即将其设置为默认启动程序,它在第一次启动时读取NFC标签不会出现问题,但如果我锁定手机并将其解锁(此时我的应用程序已在屏幕上,并且调用了onResume()),应用程序将停止读取标签(当手机读取标签时,会播放不同的声音,我猜是NFC失败声音)并且不会调用onNewIntent(Intent Intent) 我已经尝试将我的筛选器和意图设置为活动范围,而不是本地(从setupForegroundDispatch中删除),但仍然存在相同的问题。如果我重新打开应

我的应用程序是一个启动程序,我在安装后立即将其设置为默认启动程序,它在第一次启动时读取NFC标签不会出现问题,但如果我锁定手机并将其解锁(此时我的应用程序已在屏幕上,并且调用了
onResume()
),应用程序将停止读取标签(当手机读取标签时,会播放不同的声音,我猜是NFC失败声音)并且不会调用
onNewIntent(Intent Intent)

我已经尝试将我的筛选器和意图设置为活动范围,而不是本地(从
setupForegroundDispatch
中删除),但仍然存在相同的问题。如果我重新打开应用程序(杀死并重新启动),则NFC读卡器的读取正确

下面是我的逻辑:

NfcAdapter-NfcAdapter;
@凌驾
受保护的void onResume(){
super.onResume();
if(nfcAdapter==null){
nfcAdapter=nfcAdapter.getDefaultAdapter(此);
}
setupForegroundDispatch(本,nfcAdapter);
}
publicstaticvoidsetupforegrounddispatch(活动活动,NfcAdapter适配器){
最终意图=新意图(activity.getApplicationContext(),activity.getClass());
最终PendingEvent PendingEvent=PendingEvent.getActivity(
activity.getApplicationContext(),0,intent,0);
IntentFilter[]过滤器=新的IntentFilter[2];
字符串[][]技术列表=新字符串[][]{};
过滤器[0]=新的IntentFilter();
筛选器[0]。添加操作(发现NfcAdapter.ACTION\u标记);
过滤器[1]=新的IntentFilter();
过滤器[1].addAction(发现NfcAdapter.ACTION\u TECH\u);
adapter.enableForegroundDispatch(活动、挂起内容、过滤器、技术列表);
}
@覆盖
受保护的void onNewIntent(意图){
super.onNewIntent(意向);
String action=intent.getAction();
if(NfcAdapter.ACTION_TAG_DISCOVERED.equals)(ACTION)||
NfcAdapter.ACTION\u TECH\u DISCOVERED.equals(ACTION)){
Tag Tag=intent.getParcelableExtra(NfcAdapter.EXTRA_Tag);
如果(标记!=null){
//我的逻辑在这里
}
}
}
@覆盖
受保护的void onPause(){
super.onPause();
nfcAdapter.disableForegroundDispatch(本);
}
我的舱单


在logcat上没有例外,似乎NFC读取甚至没有发送到我的应用程序。(当它从后台返回并且手机读取NFC后,我的应用程序上甚至没有触发onPause(),onResume())


到目前为止,它似乎与我的应用程序是一个启动器有关,尽管我没有找到关于这个限制的任何信息。

因此我找到了我的问题的答案;这个应用程序是一个全屏(公司内部应用程序),所以在我的
onCreate()中
我有各种各样的标志来保持应用程序在屏幕上,并尽可能避免锁屏键盘(以避免用户转到其他应用程序),这就是问题所在,我的应用程序有

WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED
WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD
WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON
WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON
WindowManager.LayoutParams.FLAG_ALLOW_LOCK_WHILE_SCREEN_ON
WindowManager.LayoutParams.FLAG_FULLSCREEN
由于某些原因,阻止键盘护卫出现(在锁屏上运行应用程序)会禁用NFC向应用程序的传送(我想是出于安全原因)。因为这是一个内部应用程序(所有手机都是由I.T团队预先设置的)解决方案是通过手机设置从锁屏上手动移除键盘防护装置并移除标志

WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED
WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD

因此,每次用户锁定和解锁手机时,系统会再次启用NFC阅读器。

显示清单文件代码please@PJain在这里添加了声明,我可以在您的代码中看到,在onNewIntent中,您只使用了ACTION_TAG_发现和ACTION_TECH_发现,但根据nfc First dispatch system的文件,将尝试读取ACTI在发现时,请添加代码并重试again@PJain已添加,但错误仍然存在