我的相机应用程序在三星 Galaxy S 中给出空值
Posted
技术标签:
【中文标题】我的相机应用程序在三星 Galaxy S 中给出空值【英文标题】:My camera application giving null value in Samsung Galaxy S 【发布时间】:2011-12-08 15:03:31 【问题描述】:我开发了一个带有默认摄像头的摄像头应用程序。此应用程序适用于所有其他 android 手机,但三星 Galaxy S 存在一些问题
Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(cameraIntent, CAMERA_PIC_REQUEST);
这段代码给出了一个结果,我得到了一个位图图像。但我无法从中检索图像路径。
当我给EXTRA_OUTPUT
时,Galaxy S 返回一个空值。这样我就无法在调用相机意图之前定义文件路径和名称。当我们使用这个应用程序拍照时,Galaxy S 将这张照片保存在默认位置,而不是保存到预定义的位置。
如果有人对此有解决方案,请帮助我。
【问题讨论】:
【参考方案1】:为此我所做的是将 EXTRA_OUTPUT 的位置定义为 Uri,将其缓存在静态或成员变量中,然后在 onActivity 结果中使用缓存的位置来检索图像。我遇到了你描述的同样的问题,这似乎工作正常。唯一的缺点是图像有 2 个副本,一个在您在 EXTRA_OUTPUT 中定义的位置,一个在默认位置。
【讨论】:
是的。但我必须避免重复副本。像foursquare这样的应用程序提供相同的功能而没有图像重复。 有一种方法概述了here,它试图做你描述的事情。基本上,您将收听新的图库图像,将其复制到您想要的位置,然后从媒体存储中删除记录。这样你最终只会得到一张图片。 他还有一个 Github 帐户,示例代码为 here。【参考方案2】:找到答案这是最好的例子,它是设备的自我困扰!
AndroidCameraUtils - 下载项目并从库项目中包含它是您可以使用的代码sn-p!
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"
注意:- 我尝试了许多有关相机实用程序的示例,当然还有其他方法可以处理它,但对于初学者和不太熟悉核心概念的人来说会更舒服项目。谢谢!
【讨论】:
以上是关于我的相机应用程序在三星 Galaxy S 中给出空值的主要内容,如果未能解决你的问题,请参考以下文章
三星 Galaxy S3 4.1.1 版中的相机强制关闭问题
过滤以防止三星 Galaxy 相机从 Play 商店访问应用程序