java - 尝试在 Android Java 中将图片保存到外部存储时出现“未找到处理 Intent 的活动”错误
问题描述
我正在尝试将图片从 MediaStore.ACTION_IMAGE_CAPTURE 意图保存到外部存储。我不断收到此错误:
android.content.ActivityNotFoundException: No Activity found to handle Intent { act=android.media.action.IMAGE_CAPTURE dat=content://ca.kevincook.trackmytrip.fileprovider/DCIM/default_image.jpg flg=0x3 clip={text/uri-list U:content://ca.kevincook.trackmytrip.fileprovider/DCIM/default_image.jpg} (has extras) }
这是我的代码:
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
File imagePath = new File(getContext().getExternalFilesDir(Environment.DIRECTORY_DCIM), "");
File newFile = new File(imagePath, "default_image.jpg");
Uri contentUri = FileProvider.getUriForFile(getContext(), "ca.kevincook.trackmytrip.fileprovider", newFile);
intent.putExtra(MediaStore.EXTRA_OUTPUT, contentUri);
intent.setData(contentUri);
getContext().grantUriPermission("ca.kevincook.trackmytrip", contentUri, Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
getContext().grantUriPermission("ca.kevincook.trackmytrip", contentUri, Intent.FLAG_GRANT_READ_URI_PERMISSION);
intent.setFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
intent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
startActivityForResult(intent, 0);
onActivityResult 方法:
@Override
public void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == 0)
{
if (resultCode == Activity.RESULT_OK)
{
Uri uri = data.getData();
GalleryAdapter.addImage(BitmapFactory.decodeFile(uri.toString()));
}
}
SaveImagePopup("Enter Picture Name");
}
清单文件中的活动声明:
<activity android:name=".MapsActivity" android:label="@string/title_activity_maps">
<intent-filter>
<action android:name="android.intent.action.IMAGE_CAPTURE" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
清单文件中的权限:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-feature android:name = "android.hardware.camera"
android:required="true"/>
provider_paths.xml
<?xml version="1.0" encoding="utf-8"?>
<paths xmlns:android="http://schemas.android.com/apk/res/android">
<external-path name="external_public_path" path="." />
</paths>
我完全从 android 开发者网站复制了代码: https ://developer.android.com/reference/androidx/core/content/FileProvider
我使用 getContext() 是因为我从片段中运行它。我也试过 getActivity() 代替它,但这没有用。
解决方案
您是否添加了清单中提供的文件?如果不这样使用
<provider
android:name=".fileprovider"
android:authorities="com.xxxx.xxxx.xxxx" //Your package name
android:enabled="true"
android:exported="false" />
并且可以处理活动结果
onActivityResult 中的代码会是这样的,
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == REQUEST_CAMERA && resultCode == RESULT_OK) {
File out = new File(getFilesDir(), "newImage.jpg");
if (!out.exists()) {
Toast.makeText(getBaseContext(), "Error while capturing image", Toast.LENGTH_LONG).show();
return;
}
Bitmap mBitmap = BitmapFactory.decodeFile(compressedImage.getAbsolutePath());
ivShowImage.setImageBitmap(mBitmap);
}
}
推荐阅读
- php - PHP / SQL 当我将结果拆分为页面时,只显示第一页结果
- python - 在python中对数据进行排序和计数
- python - 在 python 中使用正则表达式替换时忽略特殊字符
- javascript - 检测反应组件中的断开链接
- php - mysql和php中同一行中所有行的总和如何
- pandas - 访问对象时,“浮动”对象不是可下标的错误
- c# - 当实例化一个 Prefab 的多个 GameObjects 时,只有最后一个创建的按钮起作用
- c# - 我有一个统一项目,我在其中使用颜色,但我需要一些帮助
- javascript - 强制刷新和清除缓存 - ReactJS
- python - pycharm 编码错误信息。numpy.ndarray