我们正在开发NFC标签android应用,并且它可以正常运行50%的时间,其余时间我们在以下try块中获得NFC服务死异常:

场景是我们第一次连接到nfc Tag并发送数据,它总是可以正常工作。
然后,我们不会将手机移开,在1-2秒后,我们再次尝试连接到nfc标签(如果未连接)以发送数据,并且30%的时间我们收到NFC服务失效异常,并且直到禁用该功能才启动并启用手机的NFC。

Process.setThreadPriority(Process.THREAD_PRIORITY_DISPLAY
                          + Process.THREAD_PRIORITY_MORE_FAVORABLE);                 //first line of doInBackground()
        if(((ArrayList<Byte>) params[0]).size()<=0){
            return "No image selected!";
        }
        NfcA nfcaTag = (NfcA) params[2];
        try{
                    nfcaTag = NfcA.get(tag);
                    if (!nfcaTag.isConnected()){
                        nfcaTag.connect();        //this is line 175 MainActivity
                    }

        try {
                    nfcaTag.close();
                }


例外:

NFC service dead
                                                              android.os.DeadObjectException
                                                                  at android.os.BinderProxy.transactNative(Native Method)
                                                                  at android.os.BinderProxy.transact(Binder.java:622)
                                                                  at android.nfc.INfcTag$Stub$Proxy.connect(INfcTag.java:285)
                                                                  at android.nfc.tech.BasicTagTechnology.connect(BasicTagTechnology.java:73)
                                                                  at android.nfc.tech.NfcA.connect(NfcA.java)
                                                                  at de.silab.nfc.vistagnfcappv1.MainActivity$2.onClick(MainActivity.java:175)
                                                                  at android.view.View.performClick(View.java:5723)
                                                                  at android.view.View$PerformClick.run(View.java:22689)
                                                                  at android.os.Handler.handleCallback(Handler.java:836)
                                                                  at android.os.Handler.dispatchMessage(Handler.java:103)
                                                                  at android.os.Looper.loop(Looper.java:203)
                                                                  at android.app.ActivityThread.main(ActivityThread.java:6361)
                                                                  at java.lang.reflect.Method.invoke(Native Method)
                                                                  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1063)
                                                                  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:924)


有什么办法可以解决这个问题。我们长期以来一直被困在这里。
以及通过捕获此异常来重启NFCAdapter / nfc服务的任何方法?

最佳答案

您的nfcaTag的托管过程已终止。已经被close()了。第一步应该是通过将有关变量的信息记录到控制台来进行调试,以查看是否存在异常。

我发现在close()使用后立即nfcaTag您的connect()感到奇怪。也许这两个陈述有冲突?

另外,考虑一下为什么仅在下一个try语句中立即更改了nfcaTag的原因。

您的NfcA.get(tag)偶尔会返回空的NfcA对象吗? tag偶尔为空吗?您需要测试每个变量,尤其是您在问题中尚未完全共享的变量。

10-04 12:01