Android相机,图库获取图片

2023-05-16

大家的APP中经常会有从手机相机、图库获取图片,这里封装了方法可以方便大家,解决了Android7.0资源uri的获取方式,兼容SDK19以上的机子,有权限请求整合,欢迎大家下架使用,评论指导也可以。
程序运行结果:

这里写图片描述
程序应用类代码:

package jason.com.carmerphoto;

import android.content.Intent;
import android.content.pm.PackageManager;
import android.os.Build;
import android.support.annotation.NonNull;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.SimpleAdapter;
import android.widget.TextView;
import android.widget.Toast;

import static jason.com.carmerphoto.GetPicUtil.REQUEST_PERMISSION_CAMERA;
import static jason.com.carmerphoto.GetPicUtil.REQUEST_PERMISSION_WRITE;

public class MainActivity extends AppCompatActivity implements View.OnClickListener {

    //控件
    private ImageView img_album;
    private Button btn_dialog;
    private TextView tv_desd;

    String imagePath = null;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        initView();
    }

    private void initView() {
        this.img_album = (ImageView) findViewById(R.id.img_album);
        this.btn_dialog = (Button) findViewById(R.id.btn_pic);
        this.tv_desd = (TextView) findViewById(R.id.tv_desc);
        this.btn_dialog.setOnClickListener(this);
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        //获取选择照片后的内容,以兼容Android=<19,>19
        this.imagePath = GetPicUtil.handlePicResult(this, data, requestCode, resultCode, img_album);
        Log.v("TAG", "get_picpath=" + imagePath);
    }


    /**
     * 不处理权限的回调也可以,就是第一次获取权限,要再次点击控件触发
     *
     * @param requestCode
     * @param permissions
     * @param grantResults
     */
    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        switch (requestCode) {
            case REQUEST_PERMISSION_CAMERA:
                //判断是否有权限
                if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                    GetPicUtil.take_photo(this);//打开相机
                } else {
                    Toast.makeText(this, "你需要权限许可!", Toast.LENGTH_LONG).show();
                }
                break;
            case REQUEST_PERMISSION_WRITE:
                //判断是否有权限
                if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                    GetPicUtil.openAlbum(this);//打开相册
                } else {
                    Toast.makeText(this, "你需要权限许可!", Toast.LENGTH_LONG).show();
                }
                break;
            default:
                break;
        }
    }

    @Override
    public void onClick(View v) {
        tv_desd.setText("sdk_" + Build.VERSION.SDK_INT);
        //1.弹出对话框选择 相机还是图库
        GetPicUtil.showPicDialog(this);
        //2.直接相机
//        GetPicUtil.xiangjiClick(this);
        //3.直接进入图库
//        GetPicUtil.select_photo(this);
    }
}

//大家的Androidstudio版本可能都不同,这里下载解压后不要着急打开项目,打开项目文件夹修改几个文件可以使用你本地的gradle版本,打开你原来运行过的项目替换以下代码:
1.打开项目的build.gradle文件 ,修改替换成你原有的项目代码语句,保存文件。
//classpath ‘com.android.tools.build:gradle:2.2.2’
2.打开项目gradle/warpper/gradle-wrapper.properties文件,替换保存:
//distributionUrl=https://services.gradle.org/distributions/gradle-2.14.1-all.zip
3.打开项目app/build.gradle,修改以下工具版本,打开你原来运行过的项目替换以下代码:
//compileSdkVersion 25
//buildToolsVersion “25.0.3”
//compile ‘com.android.support:appcompat-v7:25.3.1’
//compile ‘com.android.support:design:25.3.1’

本文代码Demo下载

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android相机,图库获取图片 的相关文章

  • [ZigBee] ZigBee开发资料汇总 [2013-10-21更新]

    为方便广大ZigBee初学者 xff0c 现将本人学习几个月来收集 整理的开发资料分享如下 ZigBee联盟官方资料 ZigBee Specification 2007 ZigBee Cluster Library Specificatio
  • 查看USB设备VID和PID [2013-11-30更新]

    Windows Windows下可直接在设备管理器中的设备属性窗口中查看 例如 xff1a Linux Linux系统下可通过lsusb命令查看 例如 xff1a lsusb Bus 001 Device 001 ID 1d6b 0002
  • /proc/sysrq-trigger的使用

    在linux5 6 0里面都可以看到 proc sysrq trigger文件 xff0c 我们可以利用 proc sysrq trigger做些事情 xff0c 比如重启 如下面操作所示 xff1a 立即重新启动计算机 echo 34 b
  • goahead 移植与配置 [2013-12-18更新]

    基本步骤 1 在官网下载最新的源码包 官网 xff1a http embedthis com downloads index html 2 解压并编译 tar zxvf goahead 3 1 3 0 src tgz C usr src c
  • boa 移植与配置 [2013-12-30更新]

    编译环境 xff1a Ubuntu 10 04 arm linux gcc版本 xff1a 4 5 3 移植步骤 1 安装所需的软件包 apt get y install byacc flex 2 下载并解压最新源码包 官网 xff1a h
  • Linux下动态库(*.so)的生成和使用 [2014-01-02更新]

    本文结合自己编写的cJSON Makefile进行简单说明 Makefile文件内容如下 xff1a all libcjson so test libcjson so cJSON o cc shared o libcjson so cJSO
  • Ubuntu下搭建eclipse C/C++开发环境 [2014-01-16更新]

    1 安装eclipse sudo apt get install y eclipse eclipse pde eclipse jdt 2 安装C C 43 43 插件 xff08 CDT xff09 运行eclipse xff0c 选择 H
  • StackDocklet 完美攻略

    爱美之心 xff0c 人皆有之 相信很多朋友和我一样 xff0c 都很喜欢个性化一下自己的计算机 下面两张图是笔者的笔记本电脑的桌面截图 图1 xff1a 以Fan方式显示 图2 xff1a 以Grid方式显示 在上面两张图片中 xff0c
  • [Android] ADT关联源码与API文档 [2013-06-26更新]

    注意 xff1a 进行下述操作前请确保JDK已正确安装并设置环境变量 1 下载最新版ADT 例如 xff1a adt bundle windows x86 64 20130522 zip 官网下载 xff1a http developer
  • 基于管道的进程间数据传输

    实验原理图 xff1a 具体代码如下 xff1a span class token macro property span class token directive keyword include span span class toke
  • Linux-rpm安装MySQL

    目录 一 概述 二 下载 三 安装 四 卸载 五 常用设置 1 修改 root 用户密码 xff08 密码效验规则 xff09 2 创建用户与权限分配 六 可能遇到的问题 一 概述 MySQL是一种关系型数据库 xff08 存放数据库的仓库
  • hugging face 模型库的使用及加载 Bert 预训练模型

    一 hugging face 模型库 Hugging face 是一个专注于 NLP 的公司 xff0c 拥有一个开源的预训练模型库 Transformers xff0c 里面囊括了非常多的模型例如 BERT GPT GPT2 ToBERT
  • 【手把手教程】若依微服务版服务器部署

    若依微服务版服务器部署 xff08 手把手教程 xff09 x1f4d4 笔记介绍 大家好 xff0c 这里是千寻简笔记 xff0c 我是作者星辰 xff0c 笔记内容整理并发布 xff0c 内容有误请指出 xff0c 笔记源码已开源 xf
  • 两分钟彻底让你明白Android中onInterceptTouchEvent与onTouchEvent(图文)!

    Hi 大家好 xff0c 今天给大家分享一下Android中onInterceptTouchEvent与onTouchEvent 记得楼主以前刚开始找工作的时候 xff0c 被人问了关于Android中事件传递 xff0c 当时还是菜鸟一枚
  • GCC中的pie和fpie选项

    http www lingcc com 2010 01 08 10609 GCC中的pie和fpie选项 Position Independent Executable是Binutils glibc和gcc的一个功能 xff0c 能用来创建
  • Debian中文美化

    对于使用X Window的用户而言 xff0c 拥有一个漂亮的界面是非常重要的 xff0c 只有这样 xff0c 工作的时候才能心情娱悦 xff0c 否则 xff0c 看着大小不一或者是朦朦胧胧的字体 xff0c 恐怕没人会有心情做自己的工
  • ESLint 命令行

    要在Node js 上运行 ESLint xff0c 必须先安装 npm 安装好npm后 xff0c 可以运行下列命令 xff1a npm i g eslint 这表示从npm仓库安装了ESLint CLI 然后继续使用下列命令运行ESLi
  • Ubuntu18.04安装Hexo

    最近突然想搞一个自己的博客 xff0c 于是乎准备在Ubuntu上安装一下Hexo框架 xff0c 然而很不幸的是遇到了重重险阻 xff0c 踩了不少坑 xff0c 最后能艰难爬上来实属不易 xff0c 下面就给大家奉上我的 脚印 xff0
  • 使用PackageManager来获取应用信息

    PackageManager可以获取到一个APP的各项信息 xff0c 如包名 版本号 图标等信息 获取PackageManager对象的方法很简单 xff1a PackageManager packageManager 61 contex
  • activemq 动态消息队列

    前提 xff1a springboot整合activemq时利用注解及相关 配置类是可以直接 使用 activemq消息队列去处理业务逻辑的 xff0c 但是我在生产环境碰到了一个 情况是 真实数据 有几千万 直接用上面说的情况 xff0c

随机推荐

  • Springboot + Spring Security 实现前后端分离登录认证及权限控制

    Springboot 43 Spring Security 实现前后端分离登录认证及权限控制 前言本文主要的功能文章目录文章正文一 准备工作1 统一错误码枚举2 统一json返回体3 返回体构造工具4 pom5 配置文件 二 数据库表设计建
  • JVM内存分配规则

    JVM内存分配规则 堆内存分配 xff1a JDK8 默认的 xff0c 新生代 xff08 Young xff09 与老年代的比例值为 1 2 xff08 该值可以通过参数 XX NewRatio来指定 xff09 新生代分为 Eden和
  • RT-Thread 开发者能力认证考试样题(RCEA)

    V1 0 RT Thread 开发者能力认证考试样题 RCEA xff09 注 xff1a 样题仅为部分题目 第一小卷 单选题 40 题 40 分钟 40 0 分 1 对两个字符 a 和 b 进行初始化 xff1a char a 61 34
  • Collections.max(list) 和 Math.max() 效率比较实验

    前情提要 xff1a 在力扣 559 N叉树的最大深度 中 xff0c 官方题解出现了 Collections max 的用法 xff0c 本人使用的是 Math max 这一古老而强大的函数 为什么官方答案选用的是 list 呢 xff1
  • (原创)Lottie动画使用介绍

    前言 我们都知道 xff0c 安卓里面有三种基本的播放动画方式 xff1a 帧动画 xff0c 属性动画 xff0c 补间动画 今天介绍一种新的实现方式 xff1a Lottie动画 Lottie是爱彼迎开源的一个动画框架 可以支持iOS
  • 【JavaAgent】字节码编程 - 使用Byte-buddy工具实现插件化开发

    简介 假设我们有需求 xff1a 所有的控制器 xff08 Controller xff09 添加耗时 xff0c 对所有的服务 xff08 Service xff09 添加调用信息 xff0c 使用一个agent代理 xff0c 也就是所
  • onNewIntent详解

    记得刚开始学的时候 xff0c 感觉intent还挺简单 xff0c 结果现在总是被intent困扰 xff0c 发现自己太天真了 xff0c 为了弄清楚 xff0c 总结一下 xff0c 一 onNewIntent 老规矩 xff0c 先
  • import _ssl ImportError: DLL load failed

    问题描述 简单讲一下我的问题 xff1a 使用pycharm打开Django项目 xff08 虚拟环境编译器 xff09 xff0c 当测试发送邮件功能时 xff0c 出现报错 xff0c import ssl if we can t im
  • 【荐书】李彦宏《智能革命》:技术是时代的信仰

    我来了 xff0c 天上的云乘着风飞翔 xff0c 心中的梦占据一个反向 xff0c 方舟扬帆起航 xff0c 一路带着我们纵情歌唱 xff0c 方舟扬帆起航 xff0c 脉络就在大海之上 xff0c 进步的时光 xff0c 迎着你看涛浪潮
  • vue 打包去除console.log()

    忘记在哪里看到的 记录下 在vue config js中 xff0c 配置 chainWebpack span class token punctuation span config span class token punctuation
  • minio+thumbor

    minio 安装 span class token function wget span https dl min io server minio release linux amd64 minio span class token fun
  • axios自定义请求头跨域,thinkphp设置

    axios添加自定义请求头 在axios拦截器中 headers XXX 61 XX 配置后 thinkphp 返回跨域 需要对thinkphp中间件进行重新设置 主要配置在tp 复制 vendor topthink framework s
  • git webhook linux 切换www用户

    vim etc passwd 把 www x 1000 1000 home www sbin nologin 改成 www x 1000 1000 home www bin bash ESC键结束 wq 保存文件并退出编辑 切换www用户
  • mint下nginx和uwsgi部署django

    参考 xff1a http www cnblogs com fnng p 5268633 html 安装Nginx apt get install nginx 启动Nginx xff1a etc init d nginx start 启动
  • (原创)Android安装APK报错Installation failed due to: ‘INSTALL_FAILED_TEST_ONLY‘

    这个问题遇到是在vivo手机与oppo手机 xff0c 换成在华为 小米等手机中未发现该问题 其实是因为Android Studio 自3 0 开始自带一个隐藏的功能 xff0c 那就是编译打包 debug 包时 xff0c 会自动在 ap
  • strapi-api使用说明

    strapi controllers 返回项目中可用的控制器的对象 位于该 api controllers文件夹中的每个JavaScript文件都将被解析为该strapi controllers对象 由于这个对象 xff0c 您可以访问项目
  • sublime tex4配置vue开发环境

    前提 已安装package control 参考网站 https lsp sublimetext io https www prettier cn 安装包快捷键 ctrl 43 alt 43 p 输入install package 安装以下
  • win下mkcert+phpenv本地ssl环境配置

    环境win mkcert 安装过程略 使用Chocolatey安装比较方便 1 choco install mkcert 2 mkcert install 弹出窗口点安装 3 mkcert shop test 注意点 shop test 本
  • Android http post/get

    虽然在Android开发中有很多网络框架 xff0c 可是都比较臃肿 xff0c 要考虑很多请求姿势 xff0c 所以自己写了一个 感谢大家发表评论 xff01 1 网络请求一般分为post和get两种方式 xff0c 在工作中我比较常用的
  • Android相机,图库获取图片

    大家的APP中经常会有从手机相机 图库获取图片 xff0c 这里封装了方法可以方便大家 xff0c 解决了Android7 0资源uri的获取方式 xff0c 兼容SDK19以上的机子 xff0c 有权限请求整合 xff0c 欢迎大家下架使