Каковы возможные причины смерти NFC Service через некоторое время? - PullRequest
2 голосов
/ 11 апреля 2019

Мы используем метки 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 в теги.

Похожие вопросы по StackOverflow:

UPDATE

Переместил код из onResume, поэтому активность всегда активна и видима, когда enableReadeMode() и disableReaderMode() называются

Вот новые логи

04-15 01:51:50.328 4987-4987/in.parksmart.operator D/WindowClient: Add to mViews: com.android.internal.policy.PhoneWindow$DecorView{55c53ae V.E...... R.....I. 0,0-0,0}, this = 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: hardware acceleration is enabled, this = 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 initialize window=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] format: 1
04-15 01:51:50.361 4987-5037/in.parksmart.operator D/Surface: Surface::setBufferCount(this=0x9de38200,bufferCount=4)
04-15 01:51:50.366 4987-5037/in.parksmart.operator D/GraphicBuffer: register, handle(0x9c9cd8e0) (w:656 h:497 s:656 f:0x1 u:0x000f02)
04-15 01:51:51.181 4987-4999/in.parksmart.operator D/WTF: Disabling reader mode
04-15 01:51:51.182 4987-4999/in.parksmart.operator D/WTF : NFC: Incompatible Tag
04-15 01:51:51.218 4987-5037/in.parksmart.operator D/Surface: Surface::disconnect(this=0x9de38200,api=1)
04-15 01:51:51.218 4987-5037/in.parksmart.operator D/GraphicBuffer: unregister, handle(0x9c9cd8e0) (w:656 h:497 s:656 f:0x1 u:0x000f02)
04-15 01:51:51.220 4987-5037/in.parksmart.operator D/Surface: Surface::disconnect(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] format: 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.operator D/GraphicBuffer: register, handle(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_millis=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 woken up by a token
04-15 01:51:51.459 4987-5052/in.parksmart.operator D/NativeCrypto:  sslSelect, appData=0xaf928a00 read ret=1 
04-15 01:51:51.459 4987-5052/in.parksmart.operator D/NativeCrypto:  sslSelect, appData=0xaf928a00 woken up by a token
04-15 01:51:51.459 4987-5052/in.parksmart.operator D/NativeCrypto:  sslSelect, appData=0xaf928a00 read ret=1 
04-15 01:51:54.335 4987-5037/in.parksmart.operator D/GraphicBuffer: register, handle(0x9d9715a0) (w:584 h:593 s:592 f:0x1 u:0x000f02)
04-15 01:51:54.414 4987-4987/in.parksmart.operator D/SettingsInterface:  from settings cache , name = sound_effects_enabled , value = 0
04-15 01:51:54.414 4987-4987/in.parksmart.operator D/WTF: Enabling reader mode
04-15 01:51:54.467 4987-5037/in.parksmart.operator D/Surface: Surface::disconnect(this=0x9de38200,api=1)
04-15 01:51:54.467 4987-5037/in.parksmart.operator D/GraphicBuffer: unregister, handle(0x9c9cd8e0) (w:584 h:593 s:592 f:0x1 u:0x000f02)
04-15 01:51:54.468 4987-5037/in.parksmart.operator D/GraphicBuffer: unregister, handle(0x9d9715a0) (w:584 h:593 s:592 f:0x1 u:0x000f02)
04-15 01:51:54.471 4987-5037/in.parksmart.operator D/Surface: Surface::disconnect(this=0x9de38200,api=1)
04-15 01:51:54.471 4987-5037/in.parksmart.operator D/Surface: Surface::connect(this=0x9de38200,api=1)
04-15 01:51:54.472 4987-5037/in.parksmart.operator W/libEGL: [ANDROID_RECORDABLE] format: 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: register, handle(0x9d9715a0) (w:656 h:497 s:656 f:0x1 u:0x000f02)
04-15 01:51:54.485 4987-5037/in.parksmart.operator D/GraphicBuffer: register, handle(0x9c9cd8e0) (w:656 h:497 s:656 f:0x1 u:0x000f02)
04-15 01:51:54.506 4987-5037/in.parksmart.operator D/GraphicBuffer: register, handle(0x9d971610) (w:656 h:497 s:656 f:0x1 u:0x000f02)
04-15 01:51:54.542 4987-5037/in.parksmart.operator D/GraphicBuffer: register, handle(0x9d971680) (w:656 h:497 s:656 f:0x1 u:0x000f02)
04-15 01:51:54.976 4987-5000/in.parksmart.operator D/WTF: Disabling reader mode
04-15 01:51:54.977 4987-5000/in.parksmart.operator D/WTF : NFC: Incompatible Tag
04-15 01:51:55.003 4987-5037/in.parksmart.operator D/Surface: Surface::disconnect(this=0x9de38200,api=1)
04-15 01:51:55.003 4987-5037/in.parksmart.operator D/GraphicBuffer: unregister, handle(0x9d9715a0) (w:656 h:497 s:656 f:0x1 u:0x000f02)
04-15 01:51:55.004 4987-5037/in.parksmart.operator D/GraphicBuffer: unregister, handle(0x9c9cd8e0) (w:656 h:497 s:656 f:0x1 u:0x000f02)
04-15 01:51:55.005 4987-5037/in.parksmart.operator D/GraphicBuffer: unregister, handle(0x9d971610) (w:656 h:497 s:656 f:0x1 u:0x000f02)
04-15 01:51:55.005 4987-5037/in.parksmart.operator D/GraphicBuffer: unregister, handle(0x9d971680) (w:656 h:497 s:656 f:0x1 u:0x000f02)
04-15 01:51:55.007 4987-5037/in.parksmart.operator D/Surface: Surface::disconnect(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] format: 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: register, handle(0x9d971680) (w:584 h:593 s:592 f:0x1 u:0x000f02)
04-15 01:51:56.966 4987-5037/in.parksmart.operator D/GraphicBuffer: register, handle(0x9d971610) (w:584 h:593 s:592 f:0x1 u:0x000f02)
04-15 01:51:57.023 4987-5037/in.parksmart.operator D/GraphicBuffer: register, handle(0x9c9cd8e0) (w:584 h:593 s:592 f:0x1 u:0x000f02)
04-15 01:51:57.118 4987-4987/in.parksmart.operator D/SettingsInterface:  from settings cache , name = sound_effects_enabled , value = 0
04-15 01:51:57.119 4987-4987/in.parksmart.operator D/WTF: Enabling reader mode
04-15 01:52:05.451 4987-4987/in.parksmart.operator E/NFC: NFC service dead - attempting to recover
    android.os.DeadObjectException
        at android.os.BinderProxy.transactNative(Native Method)
        at android.os.BinderProxy.transact(Binder.java:511)
        at android.nfc.INfcAdapter$Stub$Proxy.setReaderMode(INfcAdapter.java:614)
        at android.nfc.NfcActivityManager.setReaderMode(NfcActivityManager.java:241)
        at android.nfc.NfcActivityManager.enableReaderMode(NfcActivityManager.java:217)
        at android.nfc.NfcAdapter.enableReaderMode(NfcAdapter.java:1299)
        at in.parksmart.operator.NFCReadFragment.enableReaderMode(NFCReadFragment.java:131)
        at in.parksmart.operator.NFCReadFragment$1.onClick(NFCReadFragment.java:100)
        at android.view.View.performClick(View.java:5265)
        at android.view.View$PerformClick.run(View.java:21534)
        at android.os.Handler.handleCallback(Handler.java:815)
        at android.os.Handler.dispatchMessage(Handler.java:104)
        at android.os.Looper.loop(Looper.java:207)
        at android.app.ActivityThread.main(ActivityThread.java:5728)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:789)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:679)
04-15 01:52:05.452 4987-4987/in.parksmart.operator E/NFC: could not retrieve NFC service during service recovery
04-15 01:52:05.454 4987-4987/in.parksmart.operator I/Choreographer: Skipped 432 frames!  The application may be doing too much work on its main thread.
04-15 01:52:05.473 4987-5037/in.parksmart.operator D/Surface: Surface::disconnect(this=0x9de38200,api=1)
04-15 01:52:05.473 4987-5037/in.parksmart.operator D/GraphicBuffer: unregister, handle(0x9d971680) (w:584 h:593 s:592 f:0x1 u:0x000f02)
04-15 01:52:05.474 4987-5037/in.parksmart.operator D/GraphicBuffer: unregister, handle(0x9d971610) (w:584 h:593 s:592 f:0x1 u:0x000f02)
04-15 01:52:05.475 4987-5037/in.parksmart.operator D/GraphicBuffer: unregister, handle(0x9c9cd8e0) (w:584 h:593 s:592 f:0x1 u:0x000f02)
04-15 01:52:05.477 4987-5037/in.parksmart.operator D/Surface: Surface::disconnect(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.operator W/libEGL: [ANDROID_RECORDABLE] format: 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::disconnect(this=0x9de38200,api=1)
04-15 01:52:05.509 4987-5037/in.parksmart.operator D/GraphicBuffer: unregister, handle(0x9c9cd8e0) (w:656 h:497 s:656 f:0x1 u:0x000f02)
04-15 01:52:05.511 4987-5037/in.parksmart.operator D/Surface: Surface::disconnect(this=0x9de38200,api=1)
04-15 01:52:05.516 4987-4987/in.parksmart.operator D/WindowClient: Remove from mViews: com.android.internal.policy.PhoneWindow$DecorView{55c53ae V.E...... R......D 0,0-528,369}, this = android.view.WindowManagerGlobal@ff3d558
04-15 01:52:05.516 4987-4987/in.parksmart.operator W/InputEventReceiver: Attempted to finish an input event but the input event receiver has already been disposed.
04-15 01:52:05.517 4987-4987/in.parksmart.operator W/ViewRootImpl: Dropping event due to root view being removed: 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: Attempted to finish an input event but the input event receiver has already been disposed.
04-15 01:52:05.518 4987-4987/in.parksmart.operator W/ViewRootImpl: Dropping event due to root view being removed: 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: Attempted to finish an input event but the input event receiver has already been disposed.
04-15 01:52:05.519 4987-4987/in.parksmart.operator W/ViewRootImpl: Dropping event due to root view being removed: 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: Attempted to finish an input event but the input event receiver has already been disposed.
04-15 01:52:05.520 4987-4987/in.parksmart.operator W/ViewRootImpl: Dropping event due to root view being removed: 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: Attempted to finish an input event but the input event receiver has already been disposed.
04-15 01:52:05.521 4987-4987/in.parksmart.operator W/ViewRootImpl: Dropping event due to root view being removed: 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: Attempted to finish an input event but the input event receiver has already been disposed.
04-15 01:52:05.521 4987-4987/in.parksmart.operator W/ViewRootImpl: Dropping event due to root view being removed: 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: Attempted to finish an input event but the input event receiver has already been disposed.
04-15 01:52:05.522 4987-4987/in.parksmart.operator W/ViewRootImpl: Dropping event due to root view being removed: 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: Attempted to finish an input event but the input event receiver has already been disposed.
04-15 01:52:05.522 4987-4987/in.parksmart.operator W/ViewRootImpl: Dropping event due to root view being removed: 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: Attempted to finish an input event but the input event receiver has already been disposed.
04-15 01:52:06.898 4987-4987/in.parksmart.operator D/SettingsInterface:  from settings cache , name = sound_effects_enabled , value = 0
04-15 01:52:06.899 4987-4987/in.parksmart.operator E/NFC: NFC service dead - attempting to recover
    android.os.DeadObjectException
        at android.os.BinderProxy.transactNative(Native Method)
        at android.os.BinderProxy.transact(Binder.java:511)
        at android.nfc.INfcAdapter$Stub$Proxy.getState(INfcAdapter.java:365)
        at android.nfc.NfcAdapter.isEnabled(NfcAdapter.java:642)
        at in.parksmart.operator.MainActivity$PlaceholderFragment.lambda$onCreateView$4(MainActivity.java:2925)
        at in.parksmart.operator.-$$Lambda$MainActivity$PlaceholderFragment$rsZBvNO0FFN0PjGCm8QiSvrhIqw.onClick(lambda)
        at android.view.View.performClick(View.java:5265)
        at android.view.View$PerformClick.run(View.java:21534)
        at android.os.Handler.handleCallback(Handler.java:815)
        at android.os.Handler.dispatchMessage(Handler.java:104)
        at android.os.Looper.loop(Looper.java:207)
        at android.app.ActivityThread.main(ActivityThread.java:5728)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:789)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:679)
04-15 01:52:06.941 4987-4987/in.parksmart.operator D/WindowClient: Add to mViews: com.android.internal.policy.PhoneWindow$DecorView{dcd6d0c V.E...... R.....I. 0,0-0,0}, this = 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: hardware acceleration is enabled, this = 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 initialize window=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] format: 1
04-15 01:52:06.976 4987-5037/in.parksmart.operator D/Surface: Surface::setBufferCount(this=0x9de38200,bufferCount=4)
04-15 01:52:06.980 4987-5037/in.parksmart.operator D/GraphicBuffer: register, handle(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 upload: x, y, width height = 0, 0, 1024, 512
04-15 01:52:07.025 4987-5037/in.parksmart.operator D/GraphicBuffer: register, handle(0x9d974780) (w:812 h:400 s: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: Child Removed
04-15 01:52:13.729 4987-4987/in.parksmart.operator D/FBDB: Child Removed
04-15 01:52:13.729 4987-4987/in.parksmart.operator D/FBDB: Child removed

Кажется, сейчас нет места для активного отдыха. Каждый раз, когда мы ожидаем, что NFC-тег будет подключен, мы вызываем enableReaderMode, и мы вызываем disableReaderMode, как только наша работа с тегом заканчивается.

Устройство, используемое на стороне клиента, - Telpo 900B.

Ответы [ 2 ]

1 голос
/ 15 апреля 2019

Ошибка 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 или даже перезагрузить устройство.

0 голосов
/ 11 апреля 2019

У меня нет решения для сбоя, но у меня есть несколько советов, как его воспроизвести.

Как происходит сбой

Это сбой изсреда автоматического тестирования, запускаемая с помощью

android.app.Instrumentation.callActivityOnResume(Instrumentation.java:1150)

И, скорее всего, что-то не сохраняется / обрабатывается корректно между воссозданиями действий.

Воспроизведение с проверкой инстанции.

Вы можете получить документацию, чтобы узнать, как писать тесты инстанции для ее воспроизведения: https://developer.android.com/reference/android/app/Instrumentation

В этом посте есть некоторые дополнительные подробности о том, как обрабатывать жизненный цикл активности с помощью инструментальных тестов Как остановить и перезапустить активность в тесте инструментов Android?

Воспроизведение в качестве пользователя.

Это может произойти на реальном устройстве, когда выотправить приложение в фоновый режим, и система уничтожит его, чтобы получить ресурсы, поэтому, когда оно снова появилось на переднем плане, что-то распределяется неправильно.

Трудная вещь здесьне так-то просто заставить систему убить вашу активность во время тестирования, поскольку это может произойти, если для другой интенсивной задачи требуются ресурсы, для такого теста необходимо низкое устройство.

Воспроизведение в качестве разработчика.

В соответствии с документацией, простой обходной путь - использовать " Не сохранять действия ", предоставленные в опциях разработчика, которые убьют действие, как только оно будет отправлено в фоновый режим.

...