繁体   English   中英

尝试将图片保存到 Android Java 中的外部存储时出现“No Activity found to handle Intent”错误

[英]“No Activity found to handle Intent” error when trying to save picture to external storage in Android Java

我正在尝试将图片从 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);
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM