Мое приложение падает, когда onNewintent () выполняется - PullRequest
0 голосов
/ 24 февраля 2020

Я просто хочу создать приложение android, которое реализует как сканирование отпечатков пальцев, так и чтение NF C вместе. Хорошо работает в разное время. Но если я попытаюсь отсканировать карту NF C, когда сканер отпечатков пальцев включен, происходит сбой. Карта NF C читает, новое устройство будет генерировать намерение android. В это время будет вызываться метод onNewIntent (). После этого onNewIntent () элемент управления переходит к onResume (). Коды сканирования отпечатков пальцев добавляются в onResume (). При переходе сюда происходит сбой приложения.

 @Override
        public void onResume() {
            // TODO Auto-generated method stub
            super.onResume();
            initDevice();
            if (mFingerprint != null) {
                tvInfo.setText("");
                mFingerprint.startIdentification();
            }

            WriteModeOn();
        }

    public void initDevice() {
        new InitTask().execute();
    }
  public class InitTask extends AsyncTask<String, Integer, Boolean> {
        ProgressDialog mypDialog;

        @Override
        protected Boolean doInBackground(String... params) {
            // TODO Auto-generated method stub

            try {
                Thread.sleep(2000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            return mFingerprint.init();
        }

        @Override
        protected void onPostExecute(Boolean result) {
            super.onPostExecute(result);

            mypDialog.dismiss();
            if (!result) {
//                Toast.makeText(Read_RFIDActivity.this, "fail",
//                        Toast.LENGTH_SHORT).show();
            } else {
                Toast.makeText(Read_RFIDActivity.this, "initialization success", Toast.LENGTH_SHORT).show();
            }
            tvInfo.setText("");
            mFingerprint.startIdentification();
//            start();
            getEmpRealm();
        }

        @Override
        protected void onPreExecute() {
            // TODO Auto-generated method stub
            super.onPreExecute();


            mypDialog = new ProgressDialog(Read_RFIDActivity.this);
            mypDialog.setCanceledOnTouchOutside(false);
            mypDialog = ProgressDialog.show(Read_RFIDActivity.this, "Scanner Initializing...", "Please wait...", true, false);

        }

    }

Logcat

2020-02-24 15:46:36.523 19339-19339/com.oges.timefingerprint.attendance V/BoostFramework: BoostFramework() : mPerf = com.qualcomm.qti.Performance@54870d
    2020-02-24 15:46:36.523 19339-19339/com.oges.timefingerprint.attendance V/BoostFramework: BoostFramework() : mPerf = com.qualcomm.qti.Performance@631a6c2
    2020-02-24 15:46:36.526 19339-19339/com.oges.timefingerprint.attendance V/BoostFramework: BoostFramework() : mPerf = com.qualcomm.qti.Performance@74e3010
    2020-02-24 15:46:36.526 19339-19339/com.oges.timefingerprint.attendance V/BoostFramework: BoostFramework() : mPerf = com.qualcomm.qti.Performance@b4f8709
    2020-02-24 15:46:36.537 19339-19339/com.oges.timefingerprint.attendance I/DeviceAPI_Fingerprint: startIdentify =>runing=true
    2020-02-24 15:46:36.537 19339-19339/com.oges.timefingerprint.attendance I/DeviceAPI_Fingerprint: what==iENROLLL && enrollCallBack==null
    2020-02-24 15:46:36.604 19339-19435/com.oges.timefingerprint.attendance I/DeviceAPI_Fingerprint: morphoIdentify() end
    2020-02-24 15:46:36.605 19339-19435/com.oges.timefingerprint.attendance E/AndroidRuntime: FATAL EXCEPTION: Thread-50
        Process: com.oges.timefingerprint.attendance, PID: 19339
        java.lang.NullPointerException: Attempt to get length of null array
            at java.lang.StringFactory.newStringFromChars(StringFactory.java:211)
            at com.rscja.deviceapi.FingerprintWithMorpho.morphoIdentify(FingerprintWithMorpho.java:917)
            at com.rscja.deviceapi.FingerprintWithMorpho.access$19(FingerprintWithMorpho.java:897)
            at com.rscja.deviceapi.FingerprintWithMorpho$ThreadIdentification.getData(FingerprintWithMorpho.java:735)
            at com.rscja.deviceapi.FingerprintWithMorpho$ThreadIdentification.run(FingerprintWithMorpho.java:724)
    2020-02-24 15:46:36.610 19339-19339/com.oges.timefingerprint.attendance D/DeviceAPI: pre finger init
    2020-02-24 15:46:36.611 19339-19339/com.oges.timefingerprint.attendance E/DeviceAPI_Fingerprint: free() err:-1
    2020-02-24 15:46:36.611 19339-19339/com.oges.timefingerprint.attendance E/freeeeeeeeeee: ------In Free()........
    2020-02-24 15:46:36.731 19339-19339/com.oges.timefingerprint.attendance V/AsyncHttpRH: Progress 13 from 13 (100%)
    2020-02-24 15:46:36.732 19339-19339/com.oges.timefingerprint.attendance I/Server Request::    {"code":1}

1 Ответ

0 голосов
/ 24 февраля 2020

попробуйте этот мой рабочий код.

сначала добавьте строку ниже в onCreate ()

mNfcAdapter = NfcAdapter.getDefaultAdapter(this);

, затем добавьте строку ниже для вашего метода вызова onResume ()

PendingIntent pendingIntent = PendingIntent.getActivity(
            this, 0, new Intent(this, getClass()).addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP), 0);


    IntentFilter tagDetected = new IntentFilter(NfcAdapter.ACTION_TAG_DISCOVERED);
    IntentFilter ndefDetected = new IntentFilter(NfcAdapter.ACTION_NDEF_DISCOVERED);
    IntentFilter techDetected = new IntentFilter(NfcAdapter.ACTION_TECH_DISCOVERED);
    IntentFilter[] nfcIntentFilter = new IntentFilter[]{techDetected, tagDetected, ndefDetected};
    if (mNfcAdapter != null)
        mNfcAdapter.enableForegroundDispatch(this, pendingIntent, nfcIntentFilter, null);

затем добавьте строку кода ниже в onPause ()

 if (mNfcAdapter != null)
        mNfcAdapter.disableForegroundDispatch(this);

и в манифест добавьте разрешение ниже

<uses-permission android:name="android.permission.NFC" />
...