Android 无法完成活动

Posted

技术标签:

【中文标题】Android 无法完成活动【英文标题】:Android cannot finish activity 【发布时间】: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) 块中,以确保它通过那里? 我做了,并再次验证。它正在过去。 检查***.com/questions/5302085/… 【参考方案1】:

问题出在这条线:

    result.putExtra("BITMAP", resultBitmap);

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

【讨论】:

以上是关于Android 无法完成活动的主要内容,如果未能解决你的问题,请参考以下文章

Android Kotlin 无法从另一个活动中获取结果

Android Studio:无法切换到新活动

Android,完成所有活动

Android主要活动销毁(完成)自动

Android:Html 5 视频在活动完成时不会停止

android - 从活动调用完成会破坏托管片段吗?