【问题标题】:Android cannot finish activityAndroid 无法完成活动
【发布时间】:2015-01-10 13:46:04
【问题描述】:

我正在使用 OpenCV android 库编写应用程序。我创建了一个我想调用的 CameraActivity,并返回一个图像。

public class CameraActivity extends Activity implements CvCameraViewListener2 {

private BaseLoaderCallback mLoaderCallback = new BaseLoaderCallback(this) {
    @Override
    public void onManagerConnected(int status) {
        switch (status) {
        case LoaderCallbackInterface.SUCCESS: {
            Log.i(TAG, "OpenCV loaded successfully");
            mOpenCvCameraView.enableView();
        }
            break;
        default: {
            super.onManagerConnected(status);
        }
            break;
        }
    }
};

@Override
public void onCreate(Bundle savedInstanceState) {
    ...

    Button snap = (Button) findViewById(R.id.snap);
    snap.setOnClickListener(new OnClickListener() {
        public void onClick(View v) {
            processVideo();
        }
    });
    snap.setOnLongClickListener(new OnLongClickListener() {
        @Override
        public boolean onLongClick(View v) {
            processPicture();
            return true;
        }
    });
}

@Override
public void onPause() {
    ... 
}

@Override
public void onResume() {
    ...
}

public void onDestroy() {
    ...
}

public void onCameraViewStarted(int width, int height) {
    ...
}

@Override
public void onCameraViewStopped() {
    ...
}


public Mat onCameraFrame(CvCameraViewFrame cvf) {
    // Grab frame
    cvf.rgba().copyTo(frame);

    // Filter frame
    filterLaser();

    // Retrieve contour center point
    contourLaser();

    // Draw 
    draw();

    // Display the result.
    return cvf.rgba();
}

private void draw(){
    ...
}

private void filterLaser(){
    ...
}

void processVideo(){
    ...
}

void processPicture(){
    Intent result = new Intent();    

    if(frame != null)
    {
        // Convert the processed Mat to Bitmap
        Bitmap resultBitmap = Bitmap.createBitmap(frame.cols(),  frame.rows(),Bitmap.Config.ARGB_8888);;
        Utils.matToBitmap(frame, resultBitmap);

        setResult(Activity.RESULT_OK, result);
        result.putExtra("BITMAP", resultBitmap);
    } else {
        setResult(Activity.RESULT_CANCELED); // No frame found
    }

    Log.d("LastPoint", "FINISHED");
    finish();
}
};

使用 MainActivity 中的以下代码调用此 Activity。

  Button reply = (Button) findViewById(R.id.buttonReply);
    reply.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent i = new Intent(getApplicationContext(), CameraActivity.class);
            startActivityForResult(i, CAMERAREQUEST);
        }
    });

并将结果提取到 MainActivity 中。

@覆盖 public void onActivityResult(int requestCode, int resultCode, Intent data) { Log.d("LastPoint", "WRITING");

    switch(requestCode) {
        case (CAMERAREQUEST) : 
            if (resultCode == Activity.RESULT_OK) {
                Bitmap bmp = (Bitmap) data.getParcelableExtra("Bitmap");

                writeBitmap(bmp);
            }
            break;
    }
}

“FINISHED”被打印到 logcat。 “写作”不是。 为什么我无法退出 CameraActivity?视图本身也没有关闭。

【问题讨论】:

  • 你应该在setResult(Activity.RESULT_OK, result);之前使用result.putExtra("BITMAP", resultBitmap);,而不是之后。
  • 谢谢!但这并不能解决我的问题。
  • 您是否尝试将 Log 放入 if(frame != null) {} 块中,以确保它通过那里?
  • 我做了,并再次验证。它正在过去。

标签: java android opencv


【解决方案1】:

问题出在这条线:

    result.putExtra("BITMAP", resultBitmap);

通过将图片保存到我的 CameraActivity 中的 sdcard 并通过结果意图传递 Uri 来解决它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-13
    • 2012-03-22
    • 1970-01-01
    相关资源
    最近更新 更多