Camera app会停止启动它的活动,因此MediaStore.EXTRA_OUTPUT为空?

时间:2015-07-01 10:00:51

标签: android android-activity

我正在从我的活动中启动相机应用程序

<script type="text/javascript" src="assets/app.js"></script>:

在onActivityResult中,回调将像这样处理

public void startCamera(View view) {
    Log.i(TAG, "starting Camera action");
    Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    mImageCaptureUri = getOutputMediaFileUri(MEDIA_TYPE_IMAGE);
    Log.d(TAG, "created media file uri is " + mImageCaptureUri);
    takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, mImageCaptureUri);
    startActivityForResult(takePictureIntent, TAKE_PICTURE);

}

也许第一次它起作用但之后变量mImageCaptureUri总是为空。我可以在日志文件中看到在相机应用程序处于前台期间已停止激活,这就解释了为什么mImageCaptureUri为空。但是我该如何防止这种情况呢?是否应该停止启动应用程序的活动的程序?在我的测试设备上我使用的是Android 5.0

这是日志输出

        case TAKE_PICTURE:
            if (resultCode == ActionActivity.RESULT_OK) {
                Log.d(TAG, "received ok from camera intent, working on picture now. Saved image path is :" + mImageCaptureUri);
                b = new Bundle();

                if (mImageCaptureUri != null){
                    Intent i = new Intent();
                    b.putSerializable("picUri", mImageCaptureUri.getPath());
                    i.putExtras(b);
                    i.setClass(this, AttachCommentActivity.class);
                    startActivity(i);
                }
                else{
                    Log.e(TAG, "error while processing camera result, there is no picture uri, going back to previous view");
                    startActivity(new Intent().setClass(this, ActionActivity.class));
                }
            }

1 个答案:

答案 0 :(得分:1)

  

我可以在日志文件中看到在相机应用程序处于前台期间已停止激活,这就解释了为什么mImageCaptureUri为空。

由于内存不足,您的进程正在终止。这在调用第三方相机应用程序时经常发生。

  

但我怎么能阻止这个?

您无法阻止您的流程被终止。但是,您可以将Uri放入传递到Bundle的{​​{1}}并恢复onSaveInstanceState()中的Uri。无论如何,您应该这样做,以处理屏幕旋转或其他配置更改。