【问题标题】:No Activity found to handle MediaStore.ACTION_IMAGE_CAPTURE Intent未找到处理 MediaStore.ACTION_IMAGE_CAPTURE 意图的活动
【发布时间】:2013-09-19 18:14:31
【问题描述】:

我正在使用这段非常简单的代码在 Android 设备上捕获图像。

File tmpFile = ...;
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(tmpFile));
startActivityForResult(intent, CAPTURE_IMAGE);

除了在没有摄像头的 Kindle 设备上运行此功能外,这对成千上万的用户都适用。今天我收到了一个带有摄像头的设备的崩溃报告:

ANDROID_VERSION=4.2.1
BRAND=Hisense
PHONE_MODEL=M470BSA
STACK_TRACE=android.content.ActivityNotFoundException: No Activity found to handle Intent { act=android.media.action.IMAGE_CAPTURE (has extras) }
at android.app.Instrumentation.checkStartActivityResult(Instrumentation.java:1622)
at android.app.Instrumentation.execStartActivity(Instrumentation.java:1417)
at android.app.Activity.startActivityForResult(Activity.java:3370)
at android.app.Activity.startActivityForResult(Activity.java:3331)
...

我在代码周围进行了一些异常处理以捕获异常并显示错误,但我不知道为什么这段代码在此设备上失败。用户确认相机工作正常。

【问题讨论】:

    标签: android android-intent android-camera


    【解决方案1】:

    首先,不要求设备具有支持ACTION_IMAGE_CAPTURE 的 Activity,即使设备具有实际摄像头。

    其次,尤其是在 Android 4.3+ 平板电脑上,使用该设备的人可能无法访问 ACTION_IMAGE_CAPTURE 活动,即使已安装,因为该人可能在受限配置文件中运行。

    【讨论】:

    • 在这种情况下,设备是 4.2.1,因此没有受限配置文件。是的,可能是没有 Activity 支持这一点,但在我看来仍然不太可能,因为有一个工作系统上的相机应用程序。在开始 Intent 之前有什么办法可以找到这个吗?例如,为了禁用我的应用中的捕获选项?
    • @farindk:“是的,可能是没有 Activity 支持这一点,但在我看来仍然不太可能,因为系统上有一个工作的相机应用程序”——海信工程师可以编写了他们自己的相机应用程序并忽略了添加对此的支持。 “有什么方法可以在启动 Intent 之前找出这个吗?” -- 使用PackageManagerqueryIntentActivities()。如果List 返回为空,则没有匹配项,如果您尝试在同一Intent 上调用startActivity()/startActivityForResult(),您将获得ActivityNotFoundException
    • @CommonsWare 有没有办法解决这个问题?
    猜你喜欢
    • 2011-05-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多