如何在Android中使用相机保存临时图片?

时间:2013-09-17 12:14:14

标签: android camera

在尝试从相机拍摄照片并将其保存在应用程序的缓存文件夹中时,我得不到可见的结果。 应用程序没有崩溃,但在LogCat上,一旦我尝试将ImageView src字段设置为刚刚执行的文件的URI,我收到了此消息:

09-17 14:03:32.200: I/System.out(5104): Not a DRM File, opening notmally
09-17 14:03:32.200: I/System.out(5104): buffer returned 
09-17 14:03:32.205: D/skia(5104): --- SkImageDecoder::Factory returned null
09-17 14:03:32.205: I/System.out(5104): resolveUri failed on bad bitmap uri: /data/data/com.example.me/cache/prefix1708798995.jpg

代码很简单,实际上是:

File tempFile;

try {
    tempFile = File.createTempFile("prefix", ".jpg");
} catch (IOException e) {
    e.printStackTrace();
    AppUtil.showErrorToUser(getApplicationContext(), getResources().getString(R.string.ERROR_upload));
    return;
}

mCameraImage = tempFile.getAbsolutePath();
Uri uri = Uri.fromFile(tempFile);
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
intent.putExtra(MediaStore.EXTRA_OUTPUT, uri);
startActivityForResult(intent, CAMERA_REQUEST_CODE);

而且,在onActivityResult()

mIvAttach.setImageURI(Uri.parse(mBodyLocalUri));

我也非常失望我无法验证照片是否实际拍摄,因为我无法访问/data/data/myapp文件夹(我的GS3是没有扎根,我仍然关心我的保修),因此我无法确定问题的根源所在。

1 个答案:

答案 0 :(得分:4)

第三方相机应用无权写入您的内部存储空间,包括getCacheDir()createTempFile()正在使用adb run-as,但我并不清楚具体如何。< / p>

  

我也非常失望,因为我无法访问/ data / data / myapp文件夹,因此我无法验证照片是否已被拍摄(我的GS3未植根,我仍然关心我的保修),因此我无法确定问题的根源所在。

首先,您可以使用getExternalCacheDir()。其次,这是同一问题的另一种表现:正如DDMS无法访问内部存储,第三方应用也不能。

使用{{1}}来获取外部存储上的缓存位置,第三方相机应用可以尝试写入该位置。但请注意,由于这些应用中的错误/限制,并非所有第三方相机应用都必须写入您要求的位置。