按下确定按钮后,Android相机活动不会返回到我的应用程序

时间:2012-10-10 04:54:03

标签: java android android-camera

我有一个完全正常工作的应用。我的Camera Intent或权限只有1个问题。

应用程序应该在用户按下按钮时启动“相机活动”。这工作正常,但当用户通过单击相机上的确定按钮接受图片时,它不会回到我的应用程序。如果按下相机上的取消按钮,它会按预期返回到我的应用程序。

我已经阅读了我在这里可以找到的所有类似问题,但没有一个能解决我的问题。我需要告诉相机确切的保存图像的位置,因为我想在我的应用程序中交替2。这是创建Camera Intent并启动它的代码:

Intent intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
intent.putExtra(android.provider.MediaStore.EXTRA_OUTPUT, Uri.parse(imagePath));
startActivityForResult(intent, 11);

我已经为imagePath(这是一个字符串)尝试了多个值,但是相机的OK按钮无法使用任何值。这些是我尝试过的路径:

/mnt/sdcard/<appName>/cameraImages/image1.jpg
from Environment.getExternalStorageDirectory()

/mnt/sdcard/Android/data/<appPkg>/cache/<appName>/cameraImages/image1.jpg
from context.getExternalCacheDir()

/mnt/sdcard/Android/data/<appPkg>/cache/<appName>/cameraImages/image1.jpg
from context.getCacheDir()

我的清单文件中有以下权限:

<uses-permission android:name="android.permission.CAMERA" />
<uses-feature android:name="android.hardware.camera" android:required="false" />
<uses-feature android:name="android.hardware.camera.autofocus" android:required="false" />
<uses-feature android:name="android.hardware.camera.flash" android:required="false" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

你们可以帮我弄清楚我的代码有什么问题,或者告诉我一条有效的路径是什么?我更喜欢图像存储在缓存位置,因为在用户离开应用程序后图像继续存在并不重要,但我并不关心谁有权访问图像。

我正在4.1模拟器上进行所有测试,使用4.1 SDK进行编译,我的最低版本是API 8(2.2)。

我已经在onActivityResult()中提出了一个案例,但我不认为你们需要查看该代码,因为它不应该影响问题。

2 个答案:

答案 0 :(得分:2)

我能够找出问题所在。似乎不是使用Uri.parse(imagePath),而是在添加额外内容时使用Uri.fromFile(new File(imagePath))。我已经在下面添加了新的Intent代码,以防它可以帮助任何有同样问题的人。

Intent intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
intent.putExtra(android.provider.MediaStore.EXTRA_OUTPUT, Uri.fromFile(new File(imagePath)));
startActivityForResult(intent, 11);

我现在已成功使用context.getExternalCacheDir()创建完整路径imagePath。我创建的结果路径是/mnt/sdcard/Android/data/<appPkg>/cache/<appName>/cameraImages/image1.jpg

答案 1 :(得分:1)

问题是你需要将本地(应用程序的内部)文件分享给摄像机活动。为此创建内容提供程序是唯一有用的东西。请参阅此处的第二个选项: http://dharmendra4android.blogspot.com/2012/04/save-captured-image-to-applications.html