android 11如何剪裁上传图片_android activity_crop_image 沙箱 目录_qq_41620230的博客-程序员宅基地

技术标签: android  

1、剪裁代码

 /**
     * 图片裁剪,裁剪后存放在沙盒目录下(沙盒目录/picture/子文件夹)
     *
     * @param activity activity
     * @param uri      图片uri
     * @return 裁剪后的图片uri
     */
    public static void openCrop(Activity activity, Uri uri) {
        if (!Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
            //未挂在存储设备或者没有读写权限
            return;
        }
        imgName = System.currentTimeMillis() + ".jpg";
        Intent intent = new Intent("com.android.camera.action.CROP");
        intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
        intent.setDataAndType(uri, "image/*");
        // 设置裁剪
        intent.putExtra("crop", "true");
        // aspectX aspectY 是宽高的比例
        intent.putExtra("aspectX", 1);
        intent.putExtra("aspectY", 1);

//        intent.putExtra(MediaStore.EXTRA_OUTPUT, resultUri);
        // 图片格式
        intent.putExtra("outputFormat", "png");
        intent.putExtra("noFaceDetection", true);// 取消人脸识别
        intent.putExtra("return-data", true);// true:不返回uri,false:返回uri
        if (Build.VERSION.SDK_INT >= 30) {
            //android 11以上,将文件创建在公有目录
            String path = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES).getPath();
            //storage/emulated/0/Pictures
            File mOnputFile = new File(path, imgName);
            intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.parse("file://" + mOnputFile.getAbsolutePath()));
        }
        activity.startActivityForResult(intent, REQUEST_CODE_CAPTURE_CROP);
    }

2、上传代码

     

  /**
     * @param bmpPath
     */
    public static void uploadImg(Activity activity, String bmpPath, String name) {
        Log.d(TAG, "uploadImg utils: " + bmpPath + "," + name);
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
            file = new File(Environment.getExternalStoragePublicDirectory(DIRECTORY_PICTURES) + File.separator + name);
            Log.d(TAG, "uploadImg file: " + file.getAbsolutePath());
            FileUtils.uploadHeadImage(activity, file, Constant.HEAD_URL);
        } 
    }

3、最为重要的一点  权限的获取

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
            // 适配android11读写权限
            if (Environment.isExternalStorageManager()) {
               //已获取android读写权限
            } else {
                Intent intent = new Intent(Settings.ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION);
                intent.setData(Uri.parse("package:" + getPackageName()));
                startActivityForResult(intent, REQUEST_PERMISSION_CODE);
            }
            return;
        }

具体上传逻辑根据自己需要编写。

其中file = new File(Environment.getExternalStoragePublicDirectory(DIRECTORY_PICTURES) + File.separator + name);很重要

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_41620230/article/details/120531663

智能推荐

Python PyTorch1:张量基本操作_python torch 张量操作 ::_ZhaoXiangmoStu的博客-程序员宅基地

PyTorch是一个开源的深度学习框架,可加快从研究原型设计到生产部署的过程。import torch1. Python数据类型与PyTorch数据类型对照PyTorch没有string类型。可以使用one-hot等方式存储string类型。2. 创建张量2.1 从NumPy导入torch.from_numpy(a)import numpy as npimport torcha = np.array([2, 3.3])ta = torch.from_numpy

poj 1270 拓扑_瑞灯的路牌的博客-程序员宅基地

拓扑#include #include #include #include #include using namespace std;#define MAXA 25005#define MAXN 50005#define LL long long#define MOD 10000000000int head[200];int to[200];int next[200]

qt的udp的初步使用(转)_weixin_30576859的博客-程序员宅基地

该程序实现的功能是:局域网内,每个用户登录到聊天软件,则软件界面的右端可以显示在线用户列表,分别显示的是用户名,主机名,ip地址。软件左边那大块是聊天内容显示界面,这里局域网相当于qq中的qq群,即群聊。每个人可以在聊天输入界面中输入文字并发送。其聊天界面如下:   该程序实现的是每个用户登录既是客户端又是服务器端,这就需要看你站在哪个角度看问题了。简单的说,当用户发送信息给别...

前端跨域方法之CORS_WEB_YH的博客-程序员宅基地

1、cross-domainCORS:是需要浏览器和服务器同时支持,IE浏览器不能低于IE10。整个跨域过程不需要用户的参与,从表面上看,CORS与ajax没有区别,代码相同,但是一旦浏览器发现跨域,它会自动在HTTP头部中添加附加信息(例如domain),关键在于服务器是否实现了CORS接口。CORS请求分为简单请求和非简单请求。只要满足上面的两大条件就是简单请求,否则就是非简单请求。一、简单请...

ubuntu修改默认python之后,安装scrapy相关依赖报E: Sub-process /usr/bin/dpkg returned an error code (1)_新鲜的菜鸟本菜的博客-程序员宅基地

ubuntu修改默认python之后,安装scrapy相关依赖报E: Sub-process /usr/bin/dpkg returned an error code (1)Ubuntu将默认python改为3.5后安装libssl等依赖库时一直失败且报出某些后缀为py文件Python函数库导入时无此函数,修改至符合Python3后的函数名仍不正常安装,执行apt-get update 后执行a...

js 实现网页一个一个字打印出来的效果_div 文字按字一个一个打印_灿尔哈擦苏的博客-程序员宅基地

最近看了一个小效果,感觉还挺不错,代码实现起来也挺简单,于是就写了些。html: //用来显示逐渐出现的文字宝贝,我好想好想你,想你想的睡不好觉,想你想的吃不下饭,我爱你爱你爱你,么么么么么么么么,啵啵啵啵啵啵啵js:var index = 0;var str = document.getElementById("string").innerHTML;fun

随便推点

三种内存分配算法总结及代码实现_青龙指引你的博客-程序员宅基地

首次适应算法最坏适应算法最佳适应算法代码实现首次适应算法 找第一个满足大小的空闲分区该算法从空闲分区链首开始查找,直至找到一个能满足其大小要求的空闲分区为止。然后再按 照作业的大小,从该分区中划出一块内存分配给请求者,余下的空闲分区仍留在空闲分区链中优点: 该算法倾向于使用内存中低地址部分的空闲区,在高地址部分的空闲区很少被利用,从而保留了高...

动态添加echarts_动态创建echarts_奶糖丫的博客-程序员宅基地

首先创建需要echarts插入进去的盒子<!-- 点击的按钮 --><div class="btn">点击</div><!-- 需要添加echarts的盒子 --> <div class="cont"></div>然后引入需要的jquery.js和echarts.js最后写能达成我们想要的效果的js$(function(){ $('.btn').click(function(){ //创建

UIImagePickerController_wwwcybcom的博客-程序员宅基地

1.你無法得知在相簿中該相片的檔名2.這是我之前的作法,提供您參考:[code]- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingImage:(UIImage *)image editingInfo:(NSDictionary *)editingInfo{    //將ImagePicke

eclipse创建maven项目没有resource文件夹_baichi1616的博客-程序员宅基地

创建maven项目时没有发现resource项目解决方案:12.如果有则直接选择,没有则创建3,创建45完美解决

策略梯度算法原理_HCH996的博客-程序员宅基地

Policy Gradient策略根据在某个状态采取某种行为来决定能得到多少的奖励值。调整内部Actor的参数使得总奖励值R越大越好。但R是一个随机变量,转换为最大化期望值。策略梯度算法推导需要让Agent不断跟环境互动,搜集多条轨迹数据采样到的数据只有一次,具体的实现过程需要在后面乘以整场游戏的Reward。实际操作技巧之添加Baseline因为奖励可能总是正的。对于动作a, b,c而言,权重大的动作表明被其被采取的概率提升越大,在都提升的体情况下...

推荐文章

热门文章

相关标签