gpt4 book ai didi

java - 错误没有找到处理 Intent act=android.media.action.IMAGE_CAPTURE 的 Activity

转载 作者:行者123 更新时间:2023-11-29 06:50:40 26 4
gpt4 key购买 nike

我继承了在 < API 23 中工作的代码。我必须升级它才能使用最新的 API,并且由于暴露的文件安全问题,我现在必须使用 FileProvider。没有大佬但是,现在相机不工作了(不一定是FileProvider的问题,只是碰巧在需要使用FileProvider的同时停止了工作,因为升级了API)

代码在 MediaStore.ACTION_IMAGE_CAPTURE Intent 的创建 Intent 调用中终止并出现错误:

android.content.ActivityNotFoundException: No Activity found to handleIntent { act=android.media.action.IMAGE_CAPTUREdat=content://com.company.appname/external_files/temp.jpg flg=0x1 }

我为此进行了大量搜索,但每个人(尤其是 StackOverflow 到目前为止)似乎都认为添加代码以检查是否存在摄像头可以解决此问题,但事实并非如此。如果未检测到相机,这只是一个不运行代码的检查。我用来测试的所有设备都有摄像头。我已经在 Android 模拟器上进行了调试(并通过使用默认相机应用程序拍摄自己的照片来验证模拟相机已连接到我的笔记本电脑相机)以及我的手机,它有前置和后置摄像头,两者都可以工作。所以,请不要回避问题的答案。我知道我有相机,不需要检查它们。我需要帮助来确定为什么我的代码没有找到 MediaStore.ACTION_IMAGE_CAPTURE 的 Intent 。

AndroidManifest.xml

<uses-permission android:name="android.permission.CAMERA" />
<uses-feature android:name="android.hardware.camera" />

<provider
android:name=".Providers.GenericFileProvider"
android:authorities="com.company.myapp"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/provider_paths"/>
</provider>

provider_paths.xml

<?xml version="1.0" encoding="utf-8"?>
<paths xmlns:android="http://schemas.android.com/apk/res/android">
<external-path name="external_files" path="."/>
</paths>

MainActivity.java

File f = new File(Environment.getExternalStorageDirectory(), "temp.jpg");
Uri uri = FileProvider.getUriForFile(MainActivity.this, AUTHORITY, f);
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE, uri);
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
startActivityForResult(intent, REQUEST_CAMERA);

代码在启动 Activity 时在最后一行抛出异常。因为这是继承的代码,所以我很想放弃他们拥有的用于相机捕获的代码并重新开始,但是代码在升级为 > API 23 之前曾经工作过。

仅供引用,升级前的上一次调用看起来像

Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(f));

但这不再有效(由于文件 URI 的暴露而被 API 阻止)

有没有人知道如何让它工作?

样式注释

为了简洁起见,我编辑了代码,生产代码中有异常处理。

最佳答案

Just an fyi, the previous call before the upgrade looked like

该代码使用 EXTRA_OUTPUT,这是使用 ACTION_IMAGE_CAPTURE 传递 Uri 的正确方法。它的问题是 Uri.fromFile() 部分,一旦您的 targetSdkVersion 上升到 24 或更高,它将无法在 Android 7.0+ 上运行,如您所指出的。

正确的代码是两者的结合:

File f = new File(Environment.getExternalStorageDirectory(), "temp.jpg");
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
intent.putExtra(MediaStore.EXTRA_OUTPUT, FileProvider.getUriForFile(MainActivity.this, AUTHORITY, f));
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
startActivityForResult(intent, REQUEST_CAMERA);

参见 this sample app有关将 ACTION_IMAGE_CAPTUREFileProvider 一起使用的完整示例。

关于java - 错误没有找到处理 Intent act=android.media.action.IMAGE_CAPTURE 的 Activity ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49435522/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com