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

8
我有一个完全可用的应用程序。但是我的相机意图或权限存在一个问题。
该应用程序应在用户按下按钮时启动相机活动。这个功能正常工作,但是当用户通过单击相机上的“确定”按钮接受图片时,它不会回到我的应用程序。如果他们按下相机上的取消按钮,它会像预期那样返回我的应用程序。
我已经阅读了所有我能在这里找到的类似问题,但没有一个解决了我的问题。我需要告诉相机确切地保存图像的位置,因为我想在我的应用程序中交替使用两个。这是创建相机意图并启动它的代码:
Intent intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
intent.putExtra(android.provider.MediaStore.EXTRA_OUTPUT, Uri.parse(imagePath));
startActivityForResult(intent, 11);

我尝试了多个值来代替imagePath(一个字符串),但相机的“确认”按钮都没有生效。以下是我尝试过的路径:

/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()中设置了intent的情况,但我认为您不需要看到该代码,因为它不应影响问题。

请在真实设备上检查一次。并且也要检查此链接:http://stackoverflow.com/a/7224771/646806 - RobinHood
onActivityResult() 被调用了吗?你在日志中看到了什么吗? - Tobias Ritzau
有人使用 context.getCacheDir() 检查了应用程序的版本,对于 imagePath 他们有完全相同的体验;相机应用程序中的“确定”按钮也无法正常工作。此外,当我按下“确定”按钮时,onActivityResult() 没有被调用。 - cmasupra
2个回答

2

我已经找出了问题。似乎在添加额外内容时,你需要使用Uri.fromFile(new File(imagePath))而不是Uri.parse(imagePath)。如果有人遇到同样的问题,我在下面放置了新的意图代码。

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


我正在使用Uri.fromFile(new File(imagePath)),但仍然遇到相同的问题...您能为我解决这个问题吗?非常感谢您的帮助。 - Name is Nilay
@NilayOnAndroid 请确保 imagePath 变量是您的应用程序可以访问的有效路径。 - cmasupra
1
原来我需要先使用mkdirs()创建那个路径!!!! 但还是谢谢你的帮助!! - Name is Nilay

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接