具有摄像头的设备上的intent.resolveActivity()为NULL(4.2.2)

时间:2016-06-03 17:50:50

标签: android android-camera android-camera-intent

使用此piece of code is suggested并声明

  

请注意,startActivityForResult()方法受a保护   调用resolveActivity()的条件,它返回第一个   可以处理意图的活动组件。 执行此检查   很重要,因为如果你使用一个调用startActivityForResult()   没有应用程序可以处理的意图,你的应用程序将崩溃。所以只要   结果不为空,使用意图是安全的。

代码:

private void dispatchTakePictureIntent() {
    Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    if (takePictureIntent.resolveActivity(getPackageManager()) != null) {
        startActivityForResult(takePictureIntent, REQUEST_IMAGE_CAPTURE);
    }
}

它工作正常,但不适用于运行4.2.2的Alcatel设备。我收到了ELSE消息和我的祝酒词#34;无法使用相机......"

如果设备配有相机,这怎么可能?

我现在该怎么办?如何处理这个用例 - 显然我必须依赖一些带摄像头的设备报告"不能使用摄像头",检测到那些设备有摄像头然后使用它?!

文档或SO问题对ELSE案例一无所知。

2 个答案:

答案 0 :(得分:5)

  

如果设备配有相机,这怎么可能?

预装在该设备上的相机应用的作者未能支持ACTION_IMAGE_CAPTURE Intent操作。有lots of bugs with camera apps

尽管可能与您的情况无关,但请注意,在Android 4.3+上使用受限制的个人资料时,设备的当前用户可能无法访问ACTION_IMAGE_CAPTURE活动,即使设备恰好有之一。

  

我现在该怎么办?

做类似的事情:

  • 告诉用户他们没有兼容的相机应用程序,并引导他们下载一个您认为适用于您的应用程序的应用程序

  • 不要依赖ACTION_IMAGE_CAPTURE而是在您的应用中嵌入拍照功能

  • ACTION_IMAGE_CAPTURE返回resolveActivity()

  • 的设备上停用需要null的应用功能

答案 1 :(得分:1)

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

<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
    }

}

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

    <uses-feature android:name="android.hardware.camera"
              android:required="true" />