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

Posted

技术标签:

【中文标题】按下“确定”按钮后,Android 相机活动不会返回到我的应用程序【英文标题】:Android camera activity doesn't return to my app when the OK button is pressed 【发布时间】:2012-09-30 12:00:49 【问题描述】:

我有一个完全可以运行的应用。我的相机意图或权限只有 1 个问题。

应用应该在用户按下按钮时启动相机活动。这很好,但是当用户通过单击相机上的 OK 按钮接受图片时,它不会返回到我的应用程序。如果他们按下相机上的取消按钮,它会按预期返回到我的应用程序。

我已经阅读了我可以在这里找到的所有类似问题,但没有一个能解决我的问题。我需要告诉相机确切地保存图像的位置,因为我想在我的应用程序中交替使用 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(它是一个字符串)尝试了多个值,但是相机的“确定”按钮没有与它们中的任何一个一起使用。这些是我尝试过的路径:

/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() 中说明了意图,但我认为你们不需要查看该代码,因为它不应该影响问题。

【问题讨论】:

在真机上签到一次。并检查this 是否调用了onActivityResult()?你能在日志中看到什么吗? 有人使用context.getCacheDir()检查了应用程序的版本imagePath,他们有完全相同的体验;相机应用程序中的确定按钮对他们不起作用。此外,当我按下 OK 按钮时,不会调用 onActivityResult() 【参考方案1】:

我能够找出问题所在。添加额外内容时,您似乎必须使用Uri.fromFile(new File(imagePath)),而不是使用Uri.parse(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/&lt;appPkg&gt;/cache/&lt;appName&gt;/cameraImages/image1.jpg

【讨论】:

我正在使用 Uri.fromFile(new File(imagePath)) 但仍然遇到同样的问题...你能告诉我这个问题吗..非常感谢您的帮助。 @NilayOnAndroid 确保imagePath 变量是您的应用程序可以访问的有效路径。 @cmasupra-事实证明,我首先需要 mkdirs() 来创建该路径!!!!但是感谢您的帮助!【参考方案2】:

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

【讨论】:

以上是关于按下“确定”按钮后,Android 相机活动不会返回到我的应用程序的主要内容,如果未能解决你的问题,请参考以下文章

Android:从相机返回后创建新活动,而不是返回到以前的活动

Android:通过片段进行相机预览。从活动中确定

onRequestPermissionsResult 未在 android 活动中回调

在android中单击相机后,无需按确定按钮即可从相机获取图像

Android - 如何防止按下音量或相机键时手机屏幕打开?

在Android中,当我播放音频并转到其他活动时,音频回来后不会停止