Android 相机相册调用封装类

Unity调用安卓、IOS 相机、相册、保存图片的插件 Unity完美调用安卓6.0、7.0以上的相机相册,并经测试IOS10-13的功能都已完美 经过诸多摸索与Android端、IOS端的相机相册插件寻找与改写 先是在github中找到了一个UnityNativeCamera的项目,经过测试可以在安卓与IOS双端完美运行,只是缺少相册功能。 后来经过修改项目安卓代码与ios代码,搞出了一个基于这个项目混合了相机与相册的插件。 ... 阅读详情

在app开发中相机相册的调用必不可少,但是涉及到很多类和方法的调用,使用起来很麻烦,因此对此进行一次封装很有必要,大大提高了开发效率,下面按照开发流程来展示一下代码

封装类 ImageUtils.java

调用相册:

/**
     * 跳转到相册
     */
    public static void openAlbum(Activity activity, int flag) {
        Intent takePictureIntent = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
        if (takePictureIntent.resolveActivity(activity.getPackageManager()) != null) {// 相机被卸载时不会崩溃
            activity.startActivityForResult(takePictureIntent, flag);
        }
    }


调用相机:

/**
     * 跳转到相机(6.0及以下)
     *
     * @param activity
     */
    public static void openbeforeCamera(Activity activity, Uri uri, int flag) {
        Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
        takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, uri);
        activity.startActivityForResult(takePictureIntent, flag);
    }

/**
     * 7.0相机打开方式
     * @param activity
     * @param flag
     * @return
     */
    public static void openCamera70(Activity activity,Uri uri, int flag) {
        // 激活相机
        Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
        intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
        intent.putExtra(MediaStore.EXTRA_OUTPUT, uri);
        // 开启一个带有返回值的Activity,请求码为PHOTO_REQUEST_CAREMA
        activity.startActivityForResult(intent, flag);
    }

保存图片的uri路径:

/**
     * 7.0保存方式
     * @param activity
     * @param file
     * @return
     */
    public static Uri getSaveUri70(Activity activity,File file){
        //兼容android7.0 使用共享文件的形式
        ContentValues contentValues = new ContentValues(1);
        contentValues.put(MediaStore.Images.Media.DATA, file.getAbsolutePath());
        Uri uri = activity.getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, contentValues);
        return uri;
    }

    /**
     * 7.0以前保存方式
     * @param file
     * @return
     */
    public static Uri getSaveUri(File file) {
        Uri uri = Uri.fromFile(file);
        return uri;
    }
封装类中还有对图片进行压缩和裁剪,以及权限申请,检查,此处就不粘贴出来了

调用方法:

打开相册:

mFour.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                ImageUtils.openAlbum(MainActivity.this,15);
            }
        });

打开相机:

mThree.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                file = ImageUtils.createImageFile();
               uri = ImageUtils.getSaveUriAll(MainActivity.this,file);
               Log.d("tag","uri---"+uri);
                ImageUtils.openCamera(MainActivity.this,uri,12);
            }
        });

回调:

@Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        Log.d("tag","requestCode----"+requestCode);
        //如果返回码是照相机返回码,就进行以下处理
        if (requestCode == 12) {
            Log.d("tag","uri-----2222-----"+uri);
            ImageUtils.cropPhoto(this,uri,400,600,13,false);   //裁剪

        }else if (requestCode == 13){
            Log.d("tag","data----"+data);
            Log.d("tag","file------"+file.getAbsolutePath()+"-----uri-----"+uri);
            Glide.with(MainActivity.this).load(uri).into(mImage);
//            mImage.setImageURI(uri);
        }else if (requestCode == 15){
            Log.d("tag","data---------"+data);
            if (data != null){
                Uri contentUri = data.getData();
                ImageUtils.cropPhoto(this,contentUri,400,600,17,true);
            }

        }else if (requestCode == 25){
            Log.d("tag","data----"+data);
            mImage.setImageURI(uri);
        }else if (requestCode == 17){
            Log.d("tag","data----17-----"+data);
            if (data == null) {
                return;
            }
            Bundle bundle = data.getExtras();

            if (bundle != null){
                Bitmap bitmap = bundle.getParcelable("data");
                mImage.setImageBitmap(bitmap);
            }
        }

    }

查看完整的代码, github地址,也有其他的一些封装类,能用到的可以参考一下



Unity调用安卓相机、相册,并返回Unity路径。兼容安卓6.0以上 原插件在这篇博文。 作者实现了裁剪照片功能并返回Texture,经过一番查看arr源码,我新建了AndroidStudio项目把裁剪功能去掉,只保留了返回Unity路径。 路径返回Unity并加载Texture private static Action<string> pathAction; public void OpenPhoto(Action<stri... 阅读详情

相关推荐

h5调用安卓原生相机、相册、电话、录像,且兼容安卓系统8.0

前言        安卓原生组件webview加载h5的URL,若要h5调用安卓原生相机和相册有效需要做以下操作。        测试机:魅蓝note2  系统5.1.1                      华为荣耀畅玩7x  系统8.0.0 一、h5页面相关       方便与安卓原生代码相对应且拿到相对应的file值,避免之后不必要的不匹配麻烦。 1、标签设置 [相机、相册]...

c_TOY的博客 9357

android 封装照相机,android系统相机相册调用封装

public abstract class PickPhotoActivity extends BaseActivity {private static final String KEY_PHOTO_PATH = "photo_path";private static final int TAKE_PHOTO_LARGR = 1000;private static final int PICK_P...

weixin_34457338的博客 263

H5调用本地相册/相机上传图片

在开发中有时候会用到H5调用本地图片或者相机,像第三方的实名认证,在线客服等等都需要上传图片。H5中只需要通过<input>调用即可,ios是可以的实现的,不需要自己处理,除非客户端压缩图片,但是Android中需要自己处理,比较坑,本文记录H5调用本地图片或者相机的实现过程以及遇到的问题。 先看效果图 H5 H5主要是通过input标签来获取图片 <inpu...

weixin_45365889的博客 6778

Android 调用系统中的相机应用

通过Intent直接调用系统相机   直接调用系统的相机应用,只需要在Intent对象中传入相应的参数即可,总体来说需要以下三步:   1. Compose a Camera Intent   MediaStore.ACTION_IMAGE_CAPTURE 拍照;   MediaStore.ACTION_VIDEO_CAPTURE录像。   2. Start the Camera

leokelly001的专栏 1342

Android&H5-js通过jsbridge调用安卓相机/相册/通讯录

引文 是有这样一个需求 在vue里通过js可以直接调用安卓原生的照相机、相册和通讯录,并返回相应数据。当然前提是用webview来进行加载。 Android端处理 在build.gradle引入(moudule:app) dependencies { compile 'com.github.lzyzsd:jsbridge:1.0.4' } 在build.gradle引入(moudu...

jinbiao8246的博客 3827

Android调用相机与相册的方法

Android调用相机与相册的方法

是阿超 8036

android图片视频图片封装,Android图片、视频资源选择库(支持图片/视频/仿微信拍照、拍视频)...

简介Android媒体资源选择库(支持图片/视频/仿微信拍照、拍视频),非常简单使用,支持图库多选、单选、仿微信拍照拍视频、系统照相机拍照拍视频(v1.1.2)。如需使用美颜滤镜、简单图片编辑,ffmpeg视频编辑等,可使用v2.0.1。PS:只需要普通拍照选图,用v1.1.2即可。v2.0.1会使项目增加10M左右。预览选择文件夹多选预览单选拍摄视频剪辑视频裁剪图片编辑依赖根bulid.grad...

weixin_31652625的博客 462

Android应用中相机与相册的调用技巧

小米设备的相机调用兼容性优化是一个持续的过程,需要开发者跟踪最新的MIUI更新以及小米官方的相机API文档。通过上述步骤,开发者能够提高应用在小米设备上的稳定性和用户体验。随着小米设备的不断更新和硬件配置的提升,兼容性优化将会是Android开发者持续关注的重点之一。Intent是一个消息传递对象,你可以使用它来请求不同的动作从其他应用组件中。Intent分为显式和隐式两种。

weixin_42596011的博客 1108

android 相机封装,android系统相机相册调用封装

public abstract class PickPhotoActivity extends BaseActivity {private static final String KEY_PHOTO_PATH = "photo_path";private static final int TAKE_PHOTO_LARGR = 1000;private static final int PICK_P...

weixin_42186579的博客 250

Android-封装了相机和相册功能使用简单方便只需要简单的几行代码就可以获取图片

对于每个APP基本上都有一个头像上传的功能,对于如何获取头像照片,可以通过使用本地相册或者拍照获取,而是用原生的相机功能都会或多或少遇到一些问题,因此特地封装了相机和相册功能,使用简单,方便,只需要简单的几行代码就可以获取图片。

封装好的调用相机与相册

封装好的PhotoUtil类,可以调用相机相册功能

Android 调用相机与图库的简单封装

Android 调用相机与图库的简单封装 为了更好的复用,我将对相机或图库的调用封装成一个工具类,可于Fragment和Activity中直接调用,直接上代码,如下: CamearUtils.java package user package name; import android.app.Activity; import android.content.ContentUris; i

Sun_LeiLei的博客 1172

Android自定义相机源码(Builder模式封装)

2017/11/12 使用Builder模式封装的自定义相机,支持自定义拍照和录制视频 解决了已知的Bug,包括各种状态切换崩溃和相机预览图像变形等。。。 使用Builder模式 支持功能扩展

Android在WebView中使用H5来调用本地相机相册的方法

最近在做一个项目需求是在Android原生的Activity中嵌套一个WebView来做混合开发,之前也做过这样的开发方式,一般都是 纯H5的逻辑使用,但是这次使用的是H5来调用本地的相机相册,下面坑来了: 1:首先Android原生和H5的交互的集成问题。 2:H5中调用本地的相机相册和视频拍摄是调用不起来的,需要原生自己调用。 3:WebView在使用过程中会出现一系列问题。 首先解...

AndyYuan317的博客 6487

Android相机调用和自定义相机Demo源码

我的博客里面有博文详细讲解,并且关于android中图片加载的讲解也写得很详细,欢迎大家可以来看!多提意见 我的博客里面有博文详细讲解,并且关于android中图片加载的讲解也写得很详细,欢迎大家可以来看!多提意见

Android-PhotoFactory封装了调用相机拍照从相册选取照片压缩选取的照片等功能

PhotoFactory封装了调用相机拍照,从相册选取照片,压缩选取的照片等功能

Android 调用系统打开相机,打开相册获取图片路径

我们在开发中经常遇到一些功能需要调取系统相机拍照获取图片,或者有的时候直接打开图库获取图片,那我们怎么获取呢,今天分享下, 第一步,打开相机 public static final int CAMERA = 1025;// 拍照的请求码 public static final int ALBUM = 1026;// 选择图片的请求码 /* * 设置从相机获取图片,返回图片路径 */ public static String getImgFromCamra(Context context) {

森森先生的博客 2316

别再只会用官网例子了!Vxe-Table过滤功能深度自定义:从下拉框到服务端筛选的完整配置流程

本文深入解析Vxe-Table表格组件的过滤功能,从基础UI定制到服务端筛选的完整实现流程。通过实战案例演示如何超越官方示例,实现下拉框、日期范围等复杂过滤交互,并详细讲解混合过滤策略与性能优化技巧,帮助开发者应对大数据量场景下的表格筛选需求。

weixin_42526353的博客 205

Unity调用安卓原生相机和相册

Unity调用安卓原生相机和相册代码,Unity和Android的代码

zjiadaxiaojie的博客 1122

二维光子晶体禁带的遗传优化算法实现

二维光子晶体禁带的遗传优化算法MATLAB源代码 光子晶体中因周期性结构而存在的频率禁带称为光子禁带,光子禁带的存在是光子晶体具有广泛应用前景的重要原因。 禁带越大,可控光的频带也越宽,因此如何设计合适的晶体结构以获得大的光子禁带一直是研究和应用的重点与热点。 给大家讲解在平面波展开法的基础上,使用遗传算法寻找具有最大光子禁带的二维光子晶体结构。 %-------------------------------------------------------------------------- % Ph

m0_53407570的博客 583

SAP DRC 是什么?一文读懂 SAP Document and Reporting Compliance 的定位、架构与落地案例

把视线拉长,会发现SAP DRC的价值并不仅是用来交差的工具。它更像是企业在全球化经营中建设的一套公共底座:既能以最低的重复成本去应对各国不断演进的监管要求,也能为财务数字化与供应链协同提供可信数据回路。依托本地与云的分层职责、与的生态联动、以及按国家不断更新的任务目录,企业可以将合规变成一种标准化、工程化、可持续运营的能力。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1653
上一篇: Android studio 3.0上进行多渠道打包遇到的问题
下一篇: 在Ubuntu 中使用Source Code Pro字体
small_technical
博客等级 码龄11年 9粉丝 52原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值