Каковы возможные причины смерти NFC Service через некоторое время?
Мы используем метки NFC в качестве парковочных билетов для входа и выхода. На каждой записи тег записан с некоторыми данными, а на выходе эти данные проверяют выход транспортного средства.
После въезда и выезда некоторых транспортных средств NfcService перестает работать, и смартфон не может обнаружить метки NFC. Устройство нуждается в перезагрузке, чтобы перезапустить NfcService, и устройство снова начинает нормально работать.
Эта ошибка встречается случайным образом, и мы не смогли воспроизвести эту ошибку в среде разработки, но мы наблюдали эту проблему несколько раз на устройствах, установленных на входных и выходных воротах парковочных зон.
Мы смогли каким-то образом управлять вышеуказанным журналом, когда решали эту проблему.
Мы пробовали разные изменения, такие как использование enableReaderMode
вместо enableForegroundDispatch
, но проблема сохраняется.
public void enableReaderMode() {
try {
Log.d("WTF", "Enabling reader mode");
NfcAdapter nfc = NfcAdapter.getDefaultAdapter(this);
if (nfc != null) {
int flags = NfcAdapter.FLAG_READER_NFC_A ;
nfc.enableReaderMode(this, new NfcAdapter.ReaderCallback() {
@Override
public void onTagDiscovered(Tag tag) {
runOnUiThread(new Runnable() {
@Override
public void run() {
Log.d("WTF", "Tag discovered");
String uid = ByteArrayToHexString(tag.getId());
Toast.makeText(MainActivity.this, getString(R.string.message_tag_detected), Toast.LENGTH_SHORT).show();
Ndef ndef = Ndef.get(tag);
if (isNFCDialogDisplayed) {
if (isWrite) {
mNfcWriteFragment = (NFCWriteFragment) getFragmentManager().findFragmentByTag(NFCWriteFragment.TAG);
mNfcWriteFragment.onNfcDetected(ndef, uid);
} else {
mNfcReadFragment = (NFCReadFragment) getFragmentManager().findFragmentByTag(NFCReadFragment.TAG);
mNfcReadFragment.onNfcDetected(ndef, uid);
}
}
}
});
}
}, flags, null);
}
}catch (Exception e){
Crashlytics.logException(e);
}
}
public void disableReaderMode() {
try {
Log.d("WTF", "Disabling reader mode");
NfcAdapter nfc = NfcAdapter.getDefaultAdapter(this);
if (nfc != null) {
nfc.disableReaderMode(this);
}
}catch (Exception e){
Crashlytics.logException(e);
}
}
NFCWriteFragment и NFCReadFragment внутренне считывают и записывают данные NDEF в теги.
Похожие вопросы по Stackru:
- Служба NFC не работает - попытка восстановления - Попытка переместить код из onResume, чтобы активность всегда была активной и отображалась, когда
enableReadeMode()
а такжеdisableReaderMode()
называется - Проблема Android NFC с командами APDU - это может быть актуально, но не дает удовлетворительного заключения
ОБНОВИТЬ
Перенес код из onResume, поэтому активность всегда активна и видна, когда enableReadeMode()
а также disableReaderMode()
называется
Вот новые логи
04-15 01:51:50.328 4987-4987/in.parksmart.operator D/WindowClient: Добавить в mViews: com.android.internal.policy.PhoneWindow$DecorView{55c53ae VE..... R..... Я. 0,0-0,0}, это = android.view.WindowManagerGlobal@ff3d558 04-15 01:51:50.329 4987-5037/in.parksmart.operator D/OpenGLRenderer: CanvasContext() 0x9cafb800 04-15 01:51:50.330 4987-4987/in.parksmart.operator D/ViewRootImpl: аппаратное ускорение включено, это = ViewRoot{7de1f47 in.parksmart.operator/in.parksmart.operator.MainActivity,ident = 133} 04-15 01:51:50.354 4987-4987/in.parksmart.operator D/Surface: Surface::allocateBuffers(this=0x9de38200) 04-15 01:51:50.360 4987-5037/in.parksmart.operator D/OpenGLRenderer: CanvasContext() 0x9cafb800 инициализировать окно =0x9de38208, title=in.parksmart.operator/in.parksmart.operator.MainActivity 04-15 01:51:50.360 4987-5037/in.parksmart.operator D/Surface: Surface::connect(this=0x9de38200,api=1) 04-15 01:51:50.361 4987-5037/in.parksmart.operator W/libEGL: формат [ANDROID_RECORDABLE]: 1 04-15 01:51:50.361 4987-5037/in.parksmart.operator D/ Поверхность: Поверхность::setBufferCount(this=0x9de38200,bufferCount=4) 04-15 01:51:50.366 4987-5037/in.parksmart.operator D/GraphicBuffer: регистр, дескриптор (0x9c9cd8e0) (w:656 h:497 s:656 f:0x1 u:0x000f02) 04-15 01:51:51.181 4987-4999/in.parksmart.operator D/WTF: отключение Режим считывания 04-15 01:51:51.182 4987-4999/in.parksmart.operator D/WTF: NFC: несовместимый тег 04-15 01:51:51.218 4987-5037/in.parksmart.operator D/ Поверхность: Поверхность:: отключить (this=0x9de38200,api=1) 04-15 01:51:51.218 4987-5037/in.parksmart.operator D/GraphicBuffer: отменить регистрацию, дескриптор (0x9c9cd8e0) (ш: 656 ч: 497 с:656 f:0x1 u:0x000f02) 04-15 01:51:51.220 4987-5037/in.parksmart.operator D/ Поверхность: Поверхность:: отключить (this=0x9de38200,api=1) 04-15 01:51:51.220 4987-5037/in.parksmart.operator D/Surface: Surface::connect(this=0x9de38200,api=1) 04-15 01:51:51.221 4987-5037/in.parksmart.operator W/libEGL: формат [ANDROID_RECORDABLE]: 1 04-15 01:51:51.221 4987-5037/in.parksmart.operator D/Surface: Surface::setBufferCount(this=0x9de38200,bufferCount=4) 04-15 01:51:51.224 4987-5037/in.parksmart. оператор D / GraphicBuffer: регистр, дескриптор (0x9c9cd8e0) (w:584 h:593 s:592 f:0x1 u:0x000f02) 04-15 01:51:51.432 4987-5077/in.parksmart.operator D/NativeCrypto: ssl=0xaa571900 sslWrite buf=0x9da11aa0 len=7 write_timeout_m =0 04-15 01:51:51.432 4987-5077/in.parksmart.operator D/NativeCrypto: sslNotify, appData=0xaf928a00 ret=1 04-15 01:51:51.459 4987-5052/in.parksmart.operator D/NativeCrypto: sslSelect, appData=0xaf928a00, разбуженный токеном 04-15 01: 51: 51.459 4987-5052 / in.parksmart.operator D / NativeCrypto: sslSelect, appData = 0xaf928a00, считывание ret = 1 04-15 01: 51: 51.459 4987-5052 / in.parksmart.operator D / NativeCrypto: sslSelect, appData = 0xaf928a00, разбуженный токеном 04-15 01: 51: 51.459 4987-5052 / in.parksmart.operator D / NativeCrypto: sslSelect, appData = 0xaf9a ret=1 04-15 01:51:54.335 4987-5037/in.parksmart.operator D/GraphicBuffer: регистр, дескриптор (0x9d9715a0) (w:584 ч: 593 с:592 f:0x1 u:0x000f02) 04-15 01:51:54.414 4987-4987/in.parksmart.operator D/SettingsInterface: из кэша настроек, name = sound_effects_enabled, значение = 0 04-15 01:51:54.414 4987-4987/in.parksmart.operator D/WTF: включение режима чтения 04-15 01:51:54.467 4987-5037/in.parksmart.operator D/ Поверхность: Surface::disconnect(this=0x9de38200,api=1) 04-15 01:51:54.467 4987-5037/in.parksmart.operator D/GraphicBuffer: отменить регистрацию, дескриптор (0x9c9cd8e0) (w: 584 ч: 593 с:592 f:0x1 u:0x000f02) 04-15 01:51:54.468 4987-5037/in.parksmart.operator D/GraphicBuffer: отмена регистрации, ручка (0x9d9715a0) (ш: 584 ч: 593 с:592 f:0x1 u:0x000f02) 04-15 01:51:54.471 4987-5037/in.parksmart.operator D/ Поверхность: Поверхность:: отключить (this=0x9de38200,api=1) 04-15 01:51:54.471 4987-5037/in.parksmart.operator D/ Поверхность: Поверхность::connect(this=0x9de38200,api=1) 04-15 01:51:54.472 4987-5037/in.parksmart.operator W/libEGL: [ANDROID_RECORDABLE] формат: 1 04-15 01:51:54.474 4987-5037/in.parksmart.operator D/Surface: Surface::setBufferCount(this=0x9de38200,bufferCount=4) 04-15 01:51:54.478 4987-5037/in.parksmart.operator D/GraphicBuffer: регистр, дескриптор (0x9d9715a0) (ш: 656 ч: 497 с: 656 ф: 0x1 u: 0x000f02) 04-15 01: 51: 54.485 4987-5037 / in.parksmart.operator D / GraphicBuffer: регистр, дескриптор (0x9c9cd8e0) (w: 656 ч: 497 с:656 f:0x1 u:0x000f02) 04-15 01:51:54.506 4987-5037 / in.parksmart.operator D / GraphicBuffer: регистр, дескриптор (0x9d971610) (ш: 656 ч: 497 с: 656 ф: 0x1 u: 0x000f02) 04-15 01: 51: 54.542 4987-5037 /in.parksmart.operator D / GraphicBuffer: регистр, дескриптор (0x9d971680) (ш: 656 ч: 497 с: 656 ф: 0x1 u: 0x000f02) 04-15 01: 51: 54,976 4987-5000/in.parksmart.operator D/WTF: отключение режима чтения 04-15 01:51:54.977 4987-5000/in.parksmart.operator D/WTF: NFC: несовместимый тег 04-15 01:51:55.003 4987-5037/in.parksmart.operator D/ Поверхность: Поверхность:: отключить (this=0x9de38200,api=1) 04-15 01:51:55.003 4987-5037/in.parksmart.operator D/GraphicBuffer: отменить регистрацию, ручка (0x9d9715a0) (ш: 656 ч: 497 s:656 f:0x1 u:0x000f02) 04-15 01:51:55.004 4987-5037 / in.parksmart.operator D / GraphicBuffer: отменить регистрацию, ручка (0x9c9cd8e0) (ш: 656 ч: 497 с:656 f:0x1 u:0x000f02) 04-15 01:51:55.005 4987-5037 / in.parksmart.operator D / Graph icBuffer: отменить регистрацию, дескриптор (0x9d971610) (w: 656 h: 497 с:656 f:0x1 u:0x000f02) 04-15 01:51:55.005 4987-5037 / in.parksmart.operator D / GraphicBuffer: отменить регистрацию, дескриптор (0x9d971680) (w:656 h:497 s:656 f:0x1 u:0x000f02) 04-15 01:51:55.007 4987-5037 / in.parksmart.operator D / Поверхность: Поверхность:: отключить (this=0x9de38200,api=1) 04-15 01:51:55.008 4987-5037/in.parksmart.operator D/Surface: Surface::connect(this=0x9de38200,api=1) 04-15 01:51:55.009 4987-5037/in.parksmart.operator W/libEGL: [ANDROID_RECORDABLE] формат: 1 04-15 01:51:55.010 4987-5037/in.parksmart.operator D/Surface: Surface::setBufferCount(this=0x9de38200,bufferCount=4) 04-15 01:51:55.012 4987-5037/in.parksmart.operator D/GraphicBuffer: регистр, дескриптор (0x9d971680) (w:584 ч: 593 с:592 f:0x1 u:0x000f02) 04-15 01:51:56.966 4987-5037/in.parksmart.operator D/GraphicBuffer: регистр, дескриптор (0x9d971610) (w:584 h:593 s:592 f:0x1 u:0x000f02) 04-15 01:51:57.023 4987-5037/in.parksmart.operator D/GraphicBuffer: регистр, дескриптор (0x9c9cd8e0) (ш: 58 4 ч: 593 с:592 f:0x1 u:0x000f02) 04-15 01:51:57.118 4987-4987/in.parksmart.operator D/SettingsInterface: из кэша настроек name = sound_effects_enabled, значение = 0 04-15 01:51:57.119 4987-4987/in.parksmart.operator D/WTF: включение режима считывателя 04-15 01:52:05.451 4987-4987/in.parksmart.operator E/NFC: служба NFC не работает - попытка восстановления Android.os.DeadObjectException в android.os.BinderProxy.transactNative(собственный метод) в android.os.BinderProxy.transact(Binder.java:511) в android.nfc.INfcAdapter$Stub$Proxy.setReaderMode(INfcAdapter.java:614) в android.nfc.NfcActivityManager.setReaderMode(NfcActivityManager.java:241) в android.nfc.NfcActivityManager.enableReaderMode(NfcActivityManager.java:217) в android.nfc.NfcAdapter.enableReaderMorg.jp.NFCReadFragment.enableReaderMode(NFCReadFragment.java:131) в in.parksmart.operator.NFCReadFragment$1.onClick(NFCReadFragment.java:100) в android.view.View.performClick(View.java:5265) в и d.view.View$PerformClick.run(View.java:21534) на android.os.Handler.handleCallback(Handler.java:815) на android.os.Handler.dispatchMessage(Handler.java:104) на android.os.Looper.loop(Looper.java:207) на android.app.ActivityThread.main(ActivityThread.java:5728) на java.lang.reflect.Method.invoke(собственный метод) на com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:789) на com.android.internal.os.ZygoteInit.main(ZygoteInit.java:679) 04-15 01:52:05.452 4987-4987/in.parksmart.operator E/NFC: не удалось получить службу NFC во время восстановления службы 04-15 01:52:05.454 4987-4987/in.parksmart.operator I/ Хореограф: пропущено 432 кадра! Приложение может выполнять слишком много работы в своем основном потоке. 04-15 01:52:05.473 4987-5037/in.parksmart.operator D/ Поверхность: Поверхность:: отключить (this=0x9de38200,api=1) 04-15 01:52:05.473 4987-5037/in.parksmart. оператор D / GraphicBuffer: отменить регистрацию, обработчик (0x9d971680) (ш: 584 ч: 593 с: 592 f: 0x1 u: 0x000f02) 04-15 01: 52: 05.474 4987-5037 / in.parksmart.operator D / GraphicBuffer: отменить регистрацию, ручка (0x9d971610) (ш: 584 ч: 593 с: 592 ф: 0x1 и: 0x000f02) 04-15 01: 52: 05.475 4987-5037 / in.parksmart.operator D / GraphicBuffer: отменить регистрацию, ручка (0x9c9cd8e0) (w:584 h:593 s:592 f:0x1 u:0x000f02) 04-15 01:52:05.477 4987-5037 / in.parksmart.operator D / Поверхность: Поверхность:: отключить (this = 0x9de38200, api = 1) 04-15 01: 52: 05.478 4987-5037 / in.parksmart.operator D / Surface: Surface:: connect(this=0x9de38200,api=1) 04-15 01:52:05.480 4987-5037 / in.parksmart. оператор W / libEGL: [ANDROID_RECORDABLE] формат: 1 04-15 01:52:05.481 4987-5037/in.parksmart.operator D/Surface: Surface::setBufferCount(this=0x9de38200,bufferCount=4) 04-15 01:52:05.485 4987-5037/in.parksmart.operator D/GraphicBuffer: register, handle(0x9c9cd8e0) (w:656 h:497 s:656 f:0x1 u:0x000f02) 04-15 01:52:05.509 4987-5037/in.parksmart.operator D/Surface: Surface:: отключить (это =0x9de38200,api=1) 04-15 01:52:05.509 4987-5037/in.parksmart.operator D/GraphicBuffer: отменить регистрацию, обработать (0x9c9cd8e0) (ш: 656 ч: 497 с: 656 ф: 0x1 у:0x000f02) 04-15 01:52:05.511 4987-5037/in.parksmart.operator D/ Поверхность: Поверхность:: отключить (this=0x9de38200,api=1) 04-15 01:52:05.516 4987-4987/in.parksmart.operator D/WindowClient: Удалить из mViews: com.android.internal.policy.PhoneWindow$DecorView{55c53ae VE..... R......D 0,0-528,369}, это = android.view.WindowManagerGlobal@ff3d558 04-15 01:52:05.516 4987-4987/in.parksmart.operator W/InputEventReceiver: попытка завершить событие ввода, но приемник события ввода уже удален. 04-15 01:52:05.517 4987-4987/in.parksmart.operator W/ViewRootImpl: Событие удаления из-за удаления корневого представления: MotionEvent { action=ACTION_MOVE, actionButton=0, id[0]=0, x[0]=-33,087376, y[0]=95,55115, toolType[0]=TOOL_TYPE_FINGER, buttonState=0, metaState=0, flags=0x0, edgeFlags=0x0, pointerCount=1, historySize=6, eventTime=1689826, downTime=1689716, deviceId=2, source=0x1002 } 04-15 01:52:05.517 4987-4987/in.parksmart.operator W/InputEventReceiver: Попытка завершить событие ввода, но приемник события ввода уже удален. 04-15 01:52:05.518 4987-4987/in.parksmart.operator W/ViewRootImpl: Событие удаления из-за удаления корневого представления: MotionEvent { action=ACTION_UP, actionButton=0, id[0]=0, x[0]=-33.087376, y[0]=95.55115, toolType[0]=TOOL_TYPE_FINGER, buttonState=0, metaState=0, flags=0x0, edgeFlags=0x0, pointerCount=1, historySize=0, eventTime=1689842, downTime=1689716, deviceId=2, source=0x1002 } 04-15 01:52:05.518 4987-4987/in.parksmart.operator W/InputEventReceiver: Попытка завершить событие ввода, но приемник события ввода уже удален. 04-15 01:52:05.519 4987-4987/in.parksmart.operator W/ViewRootImpl: Событие удаления из-за удаления корневого представления: MotionEvent { action=ACTION_DOWN, actionButton=0, id[0]=0, x[0]=353.3759, y[0]=527.21387, toolType[0]=TOOL_TYPE_FINGER, buttonState=0, metaState=0, flags=0x0, edgeFlags=0x0, pointerCount=1, historySize=0, eventTime=1692129, downTime=1692129, deviceId=2, source=0x1002 } 04-15 01:52:05.520 4987-4987/in.parksmart.operator W/InputEventReceiver: Попытка завершить событие ввода, но приемник события ввода уже удален. 04-15 01:52:05.520 4987-4987/in.parksmart.operator W/ViewRootImpl: Событие удаления из-за удаления корневого представления: MotionEvent { action=ACTION_MOVE, actionButton=0, id[0]=0, x[0]=353.3759, y[0]=527.21387, toolType[0]=TOOL_TYPE_FINGER, buttonState=0, metaState=0, flags=0x0, edgeFlags=0x0, pointerCount=1, historySize=6, eventTime=1692243, downTime=1692129, deviceId=2, source=0x1002 } 04-15 01:52:05.520 4987-4987/in.parksmart.operator W/InputEventReceiver: Попытка завершить событие ввода, но приемник события ввода уже удален. 04-15 01:52:05.521 4987-4987/in.parksmart.operator W/ViewRootImpl: Событие удаления из-за удаления корневого представления: MotionEvent { action=ACTION_UP, actionButton=0, id[0]=0, x[0]=353.3759, y[0]=527.21387, toolType[0]=TOOL_TYPE_FINGER, buttonState=0, metaState=0, flags=0x0, edgeFlags=0x0, pointerCount=1, historySize=0, eventTime=1692258, downTime=1692129, deviceId=2, source=0x1002 } 04-15 01:52:05.521 4987-4987/in.parksmart.operator W/InputEventReceiver: попытка завершить событие ввода, но приемник события ввода уже удален. 04-15 01:52:05.521 4987-4987/in.parksmart.operator W/ViewRootImpl: Событие удаления из-за удаления корневого представления: MotionEvent { action=ACTION_DOWN, actionButton=0, id[0]=0, x[0]=393.3204, y[0]=526.21466, toolType[0]=TOOL_TYPE_FINGER, buttonState=0, metaState=0, flags=0x0, edgeFlags=0x0, pointerCount=1, historySize=0, eventTime=1692338, downTime=1692338, deviceId=2, source=0x1002 } 04-15 01:52:05.521 4987-4987/in.parksmart.operator W/InputEventReceiver: попытка завершить событие ввода, но приемник события ввода уже удален. 04-15 01:52:05.522 4987-4987/in.parksmart.operator W/ViewRootImpl: Событие удаления из-за удаления корневого представления: MotionEvent { action=ACTION_MOVE, actionButton=0, id[0]=0, x[0]=393.3204, y[0]=526.21466, toolType[0]=TOOL_TYPE_FINGER, buttonState=0, metaState=0, flags=0x0, edgeFlags=0x0, pointerCount=1, historySize=4, eventTime=1692416, downTime=1692338, deviceId=2, source=0x1002 } 04-15 01:52:05.522 4987-4987/in.parksmart.operator W/InputEventReceiver: попытка завершить входное событие, но приемник входного события уже удален. 04-15 01:52:05.522 4987-4987/in.parksmart.operator W/ViewRootImpl: Событие удаления из-за удаления корневого представления: MotionEvent { action=ACTION_UP, actionButton=0, id[0]=0, x[0]=393.3204, y[0]=526.21466, toolType[0]=TOOL_TYPE_FINGER, buttonState=0, metaState=0, flags=0x0, edgeFlags=0x0, pointerCount=1, historySize=0, eventTime=1692432, downTime=1692338, deviceId=2, source=0x1002 } 04-15 01:52:05.522 4987-4987/in.parksmart.operator W/InputEventReceiver: попытка завершить входное событие, но приемник входного события уже удален. 04-15 01:52:06.898 4987-4987/in.parksmart.operator D/SettingsInterface: из кэша настроек, name = sound_effects_enabled, значение = 0 04-15 01:52:06.899 4987-4987/in.parksmart.operator E/NFC: служба NFC не работает - попытка восстановить android.os.DeadObjectException в android.os.BinderProxy.transactNative(собственный метод) в android.os.BinderProxy.transact(Binder.java:511) в android.nfc.INfcAdapter$Stub$Proxy.getState(INfcAdapter.java:365) в android.nfc.NfcAdapter.isEnabled(NfcAdapter.java:642) в in.parksmart.operator.MainActivity$PlaceholderFragment.lambda$onCreateView$4(MainActivity.java:25): 29.parksmart.operator.-$$ Лямбда $MainActivity$PlaceholderFragment$rsZBvNO0FFN0PjGCm8QiSvrhIqw.onClick(lambda) в android.view.View.performClick(View.java:5265) в android.view.View$PerformCjjr: 21534) на android.os.Handler.handleCallback(Handler.java:815) на android.os.Handler.dispatchMessage(Handler.java:104) на android.os.Looper.loop(Looper.java:207) на android. app.ActivityThr ead.main (ActivityThread.java:5728) в java.lang.reflect.Method.invoke(собственный метод) в com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:789) в com.android.internal.os.ZygoteInit.main(ZygoteInit.java:679) 04-15 01:52:06.941 4987-4987/in.parksmart.operator D/WindowClient: Добавить в mViews: com.android.internal.policy.PhoneWindow$DecorView{dcd6d0c VE..... R.....I. 0,0-0,0}, это = android.view.WindowManagerGlobal@ff3d558 04-15 01:52:06.942 4987-5037/in.parksmart.operator D/OpenGLRenderer: CanvasContext() 0x9f734800 04-15 01:52:06.943 4987-4987/in.parksmart.operator D/ViewRootImpl: аппаратное ускорение включено, это = ViewRoot{5eeb4b3 in.parksmart.operator/in.parksmart.operator.MainActivity,ident = 134} 04-15 01:52:06.972 4987-5037/in.parksmart.operator D/OpenGLRenderer: CanvasContext() 0x9f734800 инициализировать окно =0x9de38208, title=in.parksmart.operator/in.parksmart.operator.MainActivity 04-15 01:52:06.972 4987-4987/in.parksmart.operator D/Surface: Surface::allocateBuffers(this=0x9de38200) 04-15 01:52:06.972 4987-5037/in.parksmart.operator D/Surface: Surface::connect(this=0x9de38200,api=1) 04-15 01:52:06.975 4987-5037/in.parksmart.operator W/libEGL: [ANDROID_RECORDABLE] формат: 1 04-15 01:52:06.976 4987-5037/in.parksmart.operator D/ Поверхность: Поверхность::setBufferCount(this=0x9de38200,bufferCount=4) 04-15 01:52:06.980 4987-5037/in.parksmart.operator D/GraphicBuffer: регистр, дескриптор (0x9c9cd8e0) (w:812 h:400 s:816 f:0x1 u:0x000f02) 04-15 01:52:07.008 4987-5037/in.parksmart.operator D/OpenGLRenderer: CacheTexture 4 загрузка: x, y, ширина по высоте = 0, 0, 1024, 512 04-15 01:52:07.025 4987-5037/in.parksmart.operator D/GraphicBuffer: регистр, дескриптор (0x9d974780) (ш: 812 ч: 400 с:816 f:0x1 u:0x000f02) 04-15 01:52:13.710 4987-5052/in.parksmart.operator D/NativeCrypto: ssl=0xaa571900 sslRead buf=0xaf907641 len=1,timeo=0 04-15 01:52:13.710 4987-5052/in.parksmart.operator D/NativeCrypto: ssl=0xaa571900 sslRead buf=0xaf917800 len=91,timeo=0 04-15 01:52:13.711 4987-5052/in.parksmart.operator D/NativeCrypto: ssl=0xaa571900 sslRead buf=0xaf907640 len=1,timeo=0 04-15 01:52:13.722 4987-4987/in.parksmart.operator D/FBDB: ребенок удален 04-15 01:52:13.729 4987-4987/in.parksmart.operator D/FBDB: удален ребенок 04-15 01: 52: 13.729 4987-4987 / in.parksmart.operator D / FBDB: удален ребенок
Кажется, сейчас нет места для активного отдыха. Каждый раз, когда мы ожидаем подключения тега NFC, мы вызываем enableReaderMode
и мы называем disableReaderMode
как только наша работа с тегом закончится.
Устройство, используемое на стороне клиента, является Telpo 900B.
2 ответа
Ошибка E/NFC: служба NFC устарела - попытка восстановления обычно происходит, когда существует плохая связь между тегом и устройством Android (т. Е. Когда связь прервана и служба NFC не может восстановиться после ошибки). В этих (редких?) Случаях происходит сбой службы NFC и попытка перезапуска.
В некоторых случаях вы можете восстановить эту ошибку из приложения, повторно зарегистрировавшись в режиме диспетчеризации / чтения переднего плана, например, используя
NfcAdapter nfc = NfcAdapter.getDefaultAdapter(this);
if (nfc != null) {
try { nfc.isEnabled(); } catch (Exception ignore) {}
if (nfc.isEnabled()) { // be sure to check isEnabled() twice to recover binder
nfc.enableReaderMode(this, ... );
}
}
К сожалению, на некоторых устройствах единственный способ исправить ошибку такого типа - принудительно остановить приложение службы системы NFC или даже перезагрузить устройство.
У меня нет решения для сбоя, но у меня есть несколько советов, как его воспроизвести.
Как происходит авария
Этот сбой происходит из среды тестирования автоматизации, вызванной
android.app.Instrumentation.callActivityOnResume(Instrumentation.java:1150)
И, скорее всего, что-то не сохраняется / обрабатывается правильно между воссозданиями активности.
Воспроизведение с тестом инстументации.
Вы можете получить документацию, чтобы узнать, как писать тесты для инстанции для ее воспроизведения: https://developer.android.com/reference/android/app/Instrumentation
В этом посте приводятся некоторые дополнительные сведения о том, как управлять жизненным циклом активности с помощью инструментальных тестов. Как остановить и перезапустить действие в тесте Android-инструментов?
Воспроизведение в качестве пользователя.
Это может произойти на реальном устройстве, когда вы отправляете приложение в фоновый режим, и система уничтожает его, чтобы получить ресурсы, поэтому, когда оно снова появляется на переднем плане, что-то распределяется неправильно.
Сложность в том, что система не может заставить систему убить вашу активность во время тестирования, поскольку это может произойти, если для другой интенсивной задачи требуются ресурсы, для такого теста необходимо низкое устройство.
Воспроизведение в качестве разработчика.
В соответствии с документацией, простой обходной путь - использовать " Не сохранять действия", предоставленные в опциях разработчика, которые убьют действие, как только оно будет отправлено в фоновый режим.