首页 > 解决方案 > 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 上存在问题(尚未测试这些)。

任何有类似问题(和潜在解决方案)的人,请告诉我。

标签: androidandroid-camerapixelandroid-camera-intentimage-capture

解决方案


马克(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)

这样就解决了问题。


推荐阅读