本人在做关于安卓拍照的过程中,通过serResult返回一个字符串然后finish(),当程序第一次
调用的时候,可以正常返回,但是当再次启动拍照之后,返回的时候finish没有执行onpause()
方法。是通过CameraSurfaceView 的方式进行预览,但是没有回调SurfaceHolder.Callback 中的
surfaceDestroyed()方法。两次执行前日志一样,但是两次调用到setResult()之后就不一样了。日志是:
------------------------------------------------首次启动activity-
04-04 13:01:25.447 9239-9239/com.gas.gasmeter I/cameraTag: onDraw...
04-04 13:01:25.582 9239-9239/com.gas.gasmeter I/cameraTag: click...
04-04 13:01:25.582 9239-9239/com.gas.gasmeter I/cameraTag: 保存完成...
04-04 13:01:25.583 9239-9239/com.gas.gasmeter I/cameraTag: Screen---Width = 1080 Height = 1920 densityDpi = 420
04-04 13:01:25.583 9239-9239/com.gas.gasmeter I/cameraTag: Screen---Width = 1080 Height = 1920 densityDpi = 420
04-04 13:01:25.597 9239-9239/com.gas.gasmeter I/cameraTag: 矩形拍照尺寸:width = 793 h = 263
04-04 13:01:26.336 9239-9239/com.gas.gasmeter I/cameraTag: myJpegCallback:onPictureTaken...
04-04 13:01:26.639 9239-9239/com.gas.gasmeter I/cameraTag: rotaBitmap.getWidth() = 1088 rotaBitmap.getHeight() = 1920
04-04 13:01:26.640 9239-9239/com.gas.gasmeter I/cameraTag: 停止预览,释放Camera
04-04 13:01:26.702 9239-9239/com.gas.gasmeter I/cameraTag: context------------------com.gas.gasmeter.activity.main.CameraActivity@a84fd11---------------camera:android.hardware.Camera@be11e76
04-04 13:01:26.703 9239-9239/com.gas.gasmeter D/cameraTag: 初始化TessBaseApi
04-04 13:01:28.431 9239-9239/com.gas.gasmeter D/cameraTag: 语言包文件夹地址为: /data/user/0/com.gas.gasmeter/files/tesseract
04-04 13:01:28.878 9239-9239/com.gas.gasmeter D/cameraTag: 初始化TessEngine结束
04-04 13:01:28.878 9239-9239/com.gas.gasmeter D/cameraTag: Running inspection on bitmap
04-04 13:01:28.904 9239-9239/com.gas.gasmeter D/cameraTag: Confidence values: 95
04-04 13:01:28.914 9239-9239/com.gas.gasmeter I/cameraTag: 识别输出为:
04-04 13:01:28.915 9239-9239/com.gas.gasmeter I/cameraTag: 本次识别输出为:
04-04 13:01:28.915 9239-9239/com.gas.gasmeter I/cameraTag: ---------------------------------setResult为Intent { FromType=0xffffffff (has extras) }
04-04 13:01:29.260 9239-9239/com.gas.gasmeter I/cameraTag: ---------------------------------onPause
04-04 13:01:29.260 9239-9239/com.gas.gasmeter I/cameraTag: 是否已经结束?true
04-04 13:01:29.261 9239-9239/com.gas.gasmeter I/cameraTag: ---------------------------------onPause
04-04 13:01:29.274 9239-9239/com.gas.gasmeter I/cameraTag: 识别的结果是:
04-04 13:01:29.318 9239-9239/com.gas.gasmeter E/cameraTag: 识别结果为空,识别失败!
04-04 13:01:29.318 9239-9239/com.gas.gasmeter I/cameraTag: 裁剪之后保存的路径/storage/emulated/0/DCIM
04-04 13:01:29.319 9239-9239/com.gas.gasmeter I/cameraTag: autoReportActivity  onResume().............
04-04 13:01:30.526 9239-9239/com.gas.gasmeter I/cameraTag: surfaceDestroyed...
04-04 13:01:30.560 9239-9239/com.gas.gasmeter I/cameraTag: onStop......................
04-04 13:01:30.560 9239-9239/com.gas.gasmeter I/cameraTag: onDestroy......................-------------------------------------------------第二次以及之后启动activity
04-04 13:02:14.742 9239-9239/com.gas.gasmeter I/cameraTag: onDraw...
04-04 13:02:14.860 9239-9239/com.gas.gasmeter I/cameraTag: click...
04-04 13:02:14.860 9239-9239/com.gas.gasmeter I/cameraTag: 保存完成...
04-04 13:02:14.860 9239-9239/com.gas.gasmeter I/cameraTag: Screen---Width = 1080 Height = 1920 densityDpi = 420
04-04 13:02:14.861 9239-9239/com.gas.gasmeter I/cameraTag: Screen---Width = 1080 Height = 1920 densityDpi = 420
04-04 13:02:14.874 9239-9239/com.gas.gasmeter I/cameraTag: 矩形拍照尺寸:width = 793 h = 263
04-04 13:02:15.549 9239-9239/com.gas.gasmeter I/cameraTag: myJpegCallback:onPictureTaken...
04-04 13:02:15.736 9239-9239/com.gas.gasmeter I/cameraTag: rotaBitmap.getWidth() = 1088 rotaBitmap.getHeight() = 1920
04-04 13:02:15.737 9239-9239/com.gas.gasmeter I/cameraTag: 停止预览,释放Camera
04-04 13:02:15.817 9239-9239/com.gas.gasmeter I/cameraTag: context------------------null---------------camera:android.hardware.Camera@2dc7c94
04-04 13:02:15.817 9239-9239/com.gas.gasmeter D/cameraTag: 初始化TessBaseApi
04-04 13:02:15.817 9239-9239/com.gas.gasmeter D/cameraTag: 语言包文件夹地址为: /data/user/0/com.gas.gasmeter/files/tesseract
04-04 13:02:16.215 9239-9239/com.gas.gasmeter D/cameraTag: 初始化TessEngine结束
04-04 13:02:16.215 9239-9239/com.gas.gasmeter D/cameraTag: Running inspection on bitmap
04-04 13:02:16.280 9239-9239/com.gas.gasmeter D/cameraTag: Confidence values: 95
04-04 13:02:16.290 9239-9239/com.gas.gasmeter I/cameraTag: 识别输出为:
04-04 13:02:16.291 9239-9239/com.gas.gasmeter I/cameraTag: 本次识别输出为:
04-04 13:02:16.291 9239-9239/com.gas.gasmeter I/cameraTag: ---------------------------------setResult为Intent { FromType=0xffffffff (has extras) }
04-04 13:02:16.603 9239-9239/com.gas.gasmeter I/cameraTag: ---------------------------------onPause
04-04 13:02:16.603 9239-9239/com.gas.gasmeter I/cameraTag: 是否已经结束?true```还请大神能给出解答

解决方案 »

  1.   

    @Override
        public void endActivity(Bitmap bitmap) {
            TessEngine tessEngine = new TessEngine(this);
            String text = tessEngine.detectText(bitmap);
            Intent intent = new Intent();
            intent.putExtra("recognize_back", text);
            Log.i(AppStaticData.TAG, "本次识别输出为:" + text);
            setResult(Activity.RESULT_OK, intent);
            Log.i(AppStaticData.TAG, "---------------------------------setResult为" + intent);        
            finish();
            
            Log.i(AppStaticData.TAG, this + "是否已经结束?" + isFinishing());    }
      

  2.   

    @Override
        public void endActivity(Bitmap bitmap) {
            TessEngine tessEngine = new TessEngine(this);
            String text = tessEngine.detectText(bitmap);
            Intent intent = new Intent();
            intent.putExtra("recognize_back", text);
            Log.i(AppStaticData.TAG, "本次识别输出为:" + text);
            setResult(Activity.RESULT_OK, intent);
            Log.i(AppStaticData.TAG, "---------------------------------setResult为" + intent);        
            finish();
            
            Log.i(AppStaticData.TAG, this + "是否已经结束?" + isFinishing());    }
      

  3.   

    第二次的log贴完了吗?个人感觉应该是生命周期的问题,把生命周期的log都打出来分析一下应该不难明白
      

  4.   

    第二次log已经全部贴出来了,onPause()方法都没有执行到
      

  5.   

    把onActivityResult的代码贴上来看看
      

  6.   


    @Override
        protected void onActivityResult(int requestCode, int resultCode, Intent data) {
            super.onActivityResult(requestCode, resultCode, data);
            if (resultCode == RESULT_OK) {
                switch (requestCode) {
                    case AppStaticData.CAMERA_RESULT_CODE:
                        if (data != null) {
                            String recognizeBack = data.getStringExtra("recognize_back");
                            Log.i(AppStaticData.TAG,"识别的结果是:"+recognizeBack);
                            recognizePicCallback(recognizeBack);
                        }
                        break;
                    default:                    break;
                }
            }
        }