Android intent.resolveActivity()在带摄像头的设备上为空(4.2.2)

Android intent.resolveActivity()在带摄像头的设备上为空(4.2.2),android,android-camera,android-camera-intent,Android,Android Camera,Android Camera Intent,使用此命令,它会声明 请注意,startActivityForResult()方法受 调用resolveActivity()的条件,该条件返回第一个 可以处理意图的活动组件执行此检查 很重要,因为如果使用 如果您的应用程序无法处理,那么您的应用程序将崩溃。只要 结果不为null,使用意图是安全的 代码: 它工作正常,但在运行4.2.2的阿尔卡特设备上不起作用。我在祝酒词中得到了ELSE信息“不能使用照相机…” 如果设备有摄像头,这怎么可能 我现在该怎么办?如何处理这个用例?显然,我不得不相信一些

使用此命令,它会声明

请注意,startActivityForResult()方法受 调用resolveActivity()的条件,该条件返回第一个 可以处理意图的活动组件执行此检查 很重要,因为如果使用 如果您的应用程序无法处理,那么您的应用程序将崩溃。只要 结果不为null,使用意图是安全的

代码:

它工作正常,但在运行4.2.2的阿尔卡特设备上不起作用。我在祝酒词中得到了
ELSE
信息“不能使用照相机…”

如果设备有摄像头,这怎么可能

我现在该怎么办?如何处理这个用例?显然,我不得不相信一些带有摄像头的设备会报告“无法使用摄像头”,检测到这些设备带有摄像头,然后使用它

文档或其他问题没有说明其他情况

如果设备有摄像头,这怎么可能

预装在该设备上的摄像头应用程序的作者未能支持
操作\u图像捕获
意图
操作。有

虽然可能与您的情况无关,但请记住,在Android 4.3+上使用受限配置文件时,设备的当前用户可能无法访问
操作\图像\捕获
活动,即使设备碰巧有一个

我现在该怎么办

做一些类似于:

  • 告诉用户他们没有兼容的摄像头应用程序,并引导他们下载一个你知道与你的应用程序配合良好的应用程序

  • 不要依赖于
    ACTION\u IMAGE\u CAPTURE
    ,而是在应用程序中嵌入拍照功能

  • resolveActivity()
    返回
    null

  • 等等


请检查您是否在AndroidManifest.xml中拥有使用权限

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
}

如果要使用以前的代码,请不要忘记在AndroidManifest.xml中设置此代码


为什么粗体字很重要?因为我想让没有摄像头的设备使用app(从Gallery或SD卡加载图像)???我找不到任何没有粗体代码的地方会生成例外。从Gallery或SD卡加载图像是另一个问题。捕获和拾取不一样。要打开画廊图片,我们通常使用Intent.ACTION\u PICK,用户权限也不同于红色存储权限。这不是我问的。为什么我们需要required=true?我希望没有摄像头的设备使用app.OMG,这是它的库存摄像头应用程序。难道他们真的不支持这个意图吗???OMG@sandalone:也许这款设备没有Play Store和其他谷歌专有应用,在这种情况下,它不必满足任何特定的兼容性标准。或者,在制造该设备时,
ACTION\u IMAGE\u CAPTURE
可能不是兼容性测试套件的一部分。或者,也许它在出厂时通过了测试套件,但随后阿尔卡特在固件升级中破坏了该应用程序(AFAICT没有重新测试)。它有Play Store(欧盟位置)。所以一定是有东西坏了,但从未测试过。
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
private void dispatchTakePictureIntent() {
Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    if (getApplicationContext().getPackageManager().hasSystemFeature(
            PackageManager.FEATURE_CAMERA)) {
        // this device has a camera
        startActivityForResult(takePictureIntent, REQUEST_IMAGE_CAPTURE);
    } else {
        // no camera on this device
    }
    <uses-feature android:name="android.hardware.camera"
              android:required="true" />