- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
尝试从相机拍摄照片并将其保存在应用程序的缓存文件夹中时,我没有看到任何结果。应用程序没有崩溃,但是在我尝试将 ImageView src 字段设置为刚刚获取的文件的 URI 后,我在 LogCat 上收到了这条消息:
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 未 root,我仍然关心我的保修),因此我无法判断问题的根源在哪里。
最佳答案
第三方相机应用无权写入您的内部存储,包括 getCacheDir()
(createTempFile()
正在使用它,但不清楚我到底是怎么做到的)。
I'm also very disappointed that I can't verify if pictures are actually taken, since I can't access /data/data/myapp folder (my GS3 is not rooted, and I still care about my warranty), therefore I'm not able to tell where the problem's very origin is.
首先,您可以使用 adb run-as
。其次,这是同一个问题的另一种表现:DDMS不能访问内部存储,第三方应用也不能。
改用 getExternalCacheDir()
获取外部存储上的缓存位置,第三方相机应用程序可以尝试写入该位置。但请注意,由于这些应用程序中的错误/限制,并非所有第三方相机应用程序都一定会写入您请求的位置。
关于android - 如何在 Android 中使用相机保存临时图片?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18849570/
我是一名优秀的程序员,十分优秀!