我的相机应用程序在三星Galaxy S中给出了空值

时间:2011-10-16 06:36:24

标签: android android-camera android-camera-intent

我开发了一款带默认相机的相机应用程序。此应用程序适用于所有其他Android手机,但三星Galaxy S的一些问题

Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); 
startActivityForResult(cameraIntent, CAMERA_PIC_REQUEST);

这段代码给出了一个结果,我得到一个位图图像。但我无法从中检索图像路径。

当我给EXTRA_OUTPUT时,Galaxy S返回一个空值。因此,在调用相机意图之前,我无法定义文件路径和名称。当我们使用此应用程序拍照时,Galaxy S将此图片保存在默认位置,而不是保存到预定义的位置。

如果有人为此提供解决方案,请帮助我。

2 个答案:

答案 0 :(得分:0)

我为此做的是将EXTRA_OUTPUT的位置定义为Uri,在静态或成员变量中定义缓存,然后在onActivity结果中使用缓存的位置来检索图像。我遇到了你描述的同样的问题,这似乎工作正常。唯一的缺点是有2个图像副本,一个在EXTRA_OUTPUT中定义的位置,另一个在默认位置。

答案 1 :(得分:0)

找到答案这里有一个最好的例子,就是自己烦恼于设备!

AndroidCameraUtils - 下载项目,并从库项目中包含以下内容,您可以使用的代码片段!

 private void setupCameraIntentHelper() {
    mCameraIntentHelper = new CameraIntentHelper(this, new CameraIntentHelperCallback() {
        @Override
        public void onPhotoUriFound(Date dateCameraIntentStarted, Uri photoUri, int rotateXDegrees) {
            messageView.setText(getString(R.string.activity_camera_intent_photo_uri_found) + photoUri.toString());

            Bitmap photo = BitmapHelper.readBitmap(CameraIntentActivity.this, photoUri);
            if (photo != null) {
                photo = BitmapHelper.shrinkBitmap(photo, 300, rotateXDegrees);
                ImageView imageView = (ImageView) findViewById(de.ecotastic.android.camerautil.sample.R.id.activity_camera_intent_image_view);
                imageView.setImageBitmap(photo);
            }
        }

        @Override
        public void deletePhotoWithUri(Uri photoUri) {
            BitmapHelper.deleteImageWithUriIfExists(photoUri, CameraIntentActivity.this);
        }

        @Override
        public void onSdCardNotMounted() {
            Toast.makeText(getApplicationContext(), getString(R.string.error_sd_card_not_mounted), Toast.LENGTH_LONG).show();
        }

        @Override
        public void onCanceled() {
            Toast.makeText(getApplicationContext(), getString(R.string.warning_camera_intent_canceled), Toast.LENGTH_LONG).show();
        }

        @Override
        public void onCouldNotTakePhoto() {
            Toast.makeText(getApplicationContext(), getString(R.string.error_could_not_take_photo), Toast.LENGTH_LONG).show();
        }

        @Override
        public void onPhotoUriNotFound() {
            messageView.setText(getString(R.string.activity_camera_intent_photo_uri_not_found));
        }

        @Override
        public void logException(Exception e) {
            Toast.makeText(getApplicationContext(), getString(R.string.error_sth_went_wrong), Toast.LENGTH_LONG).show();
            Log.d(getClass().getName(), e.getMessage());
        }
    });
}

@Override
protected void onSaveInstanceState(Bundle savedInstanceState) {
    super.onSaveInstanceState(savedInstanceState);
    mCameraIntentHelper.onSaveInstanceState(savedInstanceState);
}

@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
    super.onRestoreInstanceState(savedInstanceState);
    mCameraIntentHelper.onRestoreInstanceState(savedInstanceState);
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent intent) {
    super.onActivityResult(requestCode, resultCode, intent);
    mCameraIntentHelper.onActivityResult(requestCode, resultCode, intent);
}
}
  • 在下面添加您的活动的清单文件android:configChanges="keyboardHidden|orientation|screenSize"

注意: - 我尝试了许多相机实用程序的例子,当然还有另外一种方法可以处理它但是对于初学者和那些对核心概念不太熟悉的人来说会更舒适项目。谢谢!