Android 10 调用系统图库和相机 裁剪 并且返回图片

本文记录了在Android 10上实现调用系统图库和相机并进行图片裁剪的过程中遇到的问题及解决方案,包括exposed beyond app、URI异常等错误。通过动态权限申请和配置file_paths,已在Android 10、8.1和5.1设备上测试成功。
摘要由CSDN通过智能技术生成

Android 10上动用相机和图库 并且返回裁剪图片遇到的问题 记录一下:各种报错,

1.exposed beyond app through Intent.getData()

2.java.lang.IllegalArgumentException: URI is not absolute

3.android.os.FileUriExposedException: file:///storage/emulated/0

4.exposed beyond app through ClipData.Item.getUri()

网上找了一大圈,报错原因 大概如下 ,动态权限没有申请, Android N(对应sdk24)(版本7.0)及以上对访问文件权限收回,还有其他之类的错误原因,直接上代码 ,在Android 10 ,Android 8.1,Android5.1真机上已验证ok

AndroidManifest.xml新增 code

<provider
            android:name="android.support.v4.content.FileProvider"
            android:authorities="test.xxx.com.myapplication.fileprovider"
            android:exported="false"
            android:grantUriPermissions="true">
            <meta-data
                android:name="android.support.FILE_PROVIDER_PATHS"
                android:resource="@xml/file_paths" />
        </provider>

file_paths文件 path=".",我的理解是Environment.getExternalStorageDirectory()所在的目录,name可以任意取

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

    <external-path
        name="images"
        path="."/>
</paths>

 

类代码

package test.xxx.com.myapplication;

import android.Manifest;
import android.app.Activity;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.database.Cursor;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.net.Uri;
import android.os.Build;
import android.os.Environment;
import android.os.Handler;
import android.os.Message;
import android.provider.MediaStore;
import android.provider.Settings;
import android.support.annotation.NonNull;
import android.support.v4.app.ActivityCompat;
import android.support.v4.content.ContextCompat;
import android.support.v4.content.FileProvider;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.Toast;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;
import java.util.ArrayList;
import java.util.List;


public class AddM1Activity extends AppCompatActivity {

    private EditText name1;
    private EditText number1;
    private ImageView icon;
    private Button bt_save, bt_cancel;
    private AlertDialog.Builder builder;
    private AlertDialog dialog;
    public static final int NONE = 0;
    public static final int CAMERA = 11;// 拍照
    public static final int PHOTO =22;
    public static final int CAMERAZOOM = 33; // 相机拍照缩放
    public static final int PHOTOZOOM = 44;//照片缩放
    public static final int PHOTORESOULT = 55;// 结果
    public 
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值