android - Android:当启动带有相机照片意图的相机应用程序时,用户需要制作两次照片
问题描述
当我试图以编程方式启动相机应用程序时,我在两部手机上看到了一种奇怪的行为。
它可以在其他手机(三星,摩托罗拉......)上正常工作,但在我的两部测试手机 - Nexus 5x(Android 8)和Pixel(1) - Android(10)上,当相机应用程序启动时,用户需要在使用 onActivityResult 返回我的应用程序之前制作两次照片
启动调用很简单,只是为了测试:
val intent = Intent(MediaStore.ACTION_IMAGE_CAPTURE)
startActivityForResult(intent, IntentConstants.REQ_LAUNCH_CAMERA)
相机应用程序启动,它显示带有“拍摄者”按钮的相机屏幕,按下按钮,它显示捕获的图像,并带有一个用于确认的检查按钮,当它被按下时,确认,它不会退出。相反,它会再次使用拍摄按钮显示相机屏幕,等待用户再拍一张照片并确认,然后相机应用程序才会结束并回调 onActivityResult
意图只发送一次。其他手机(三星、摩托罗拉等)不会发生这种情况
我的猜测是,这可能与特定手机上的相机应用程序设置有关(但我没有看到任何特别之处)或者我需要在意图中添加一些东西(但我没有看到任何东西)
我也尝试添加
intent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, false)
它不会改变 Pixel 上的任何内容,但会导致 Nexus 5X 内部崩溃:
Process: com.google.android.GoogleCamera
java.lang.NullPointerException at
com.google.android.apps.camera.shutterbutton.ShutterButton.performClick
com.google.android.GoogleCamera java.lang.NullPointerException at
com.google.android.apps.camera.shutterbutton.ShutterButton.performClick(PG:160)
我不会为 Nexus 5X 担心太多,但问题是 Pixel 1 也发生了这种情况,这意味着它可能在 Pixel 2、3、4 上存在问题(尚未测试这些)。
任何有类似问题(和潜在解决方案)的人,请告诉我。
解决方案
马克(CommonsWare)是正确的,这似乎是谷歌手机上的一个缺陷。
我找到了一个解决方法,而不是
startActivityForResult(intent, IntentConstants.REQ_LAUNCH_CAMERA)
使用选择器:
val chooser = Intent.createChooser(intent, getString(R.string.camera_action_selection_title))
startActivityForResult(chooser, IntentConstants.REQ_LAUNCH_CAMERA)
这样就解决了问题。
推荐阅读
- javascript - vue.js 中 v-for 中的模板格式
- python - Pyopengl 读取 obj 文件
- flutter - 如何检查表是否为空?
- angular - 未定义标识符“更新”。'Changelog[]' 不包含这样的成员
- microsoft-graph-api - 如何使用 Microsoft delta 查询处理已删除的重复主事件
- c# - 引擎盖下的 OpenCover
- c# - appsetting.development.json 是由 .net core 3.1 中的代码提取的注释
- terminal - 如何自定义 iTerm 终端以显示我(主)?
- docker - 如何使用 redis-rs 从 Docker 容器内部连接到 Redis?
- c - 为什么我得到这个单一的输出错误?