[Android] 获取照片(相机,相册)

简述

作为一个android小码农,每次开发一个APP,都需要根据需求在网上找一些轮子,免得自己重复制作,毕竟android发展也算成熟了,网上的轮子一大推,哈哈哈...

不过虽然网上轮子多,但是如果每个APP都需要重新再网上找,就显得麻烦了。

比如说android的获取照片功能,以前每次都需要去网上重新找并且下载最新jar。

所以,自己就弄了个开源库,以后用到就可以直接使用了,哈哈哈~~~

当然,此开源库,主要还是参考了网上其他大神写的库来,自己封装的。

此篇文章主要是写使用教程,如果需要了解源码的可以

点击这里,到我的github项目中查看

下载JAR

takephoto.jar

功能

  • 相机获取图片
  • 相册获取图片
  • 剪切
  • 压缩

注意

本库没有适配android 6.0 以上动态权限,所以如果需要使用此库前必须确保自己项目已经获取到以下三个权限

<uses-permission android:name="android.permission.CAMERA"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

至于6.0动态权限的获取可以参考其他开源库,自己可以在github上查找,我就不列表出了,当然有时间,我还是会自己再封装android 6.0以上动态权限库的,敬请期待吧

用法

    1. 打开相机()
public void onCamera(View view) {
    mTakeParam = new TakeParam(this);
    startActivityForResult(TakeHelper.buildCameraIntent(mTakeParam), mTakeParam.REQUEST_CODE_CAMERA);
}
    1. 打开相机
public void onAlbum(View view) {
    mTakeParam = new TakeParam(this);
    startActivityForResult(TakeHelper.buildAlbumIntent(), mTakeParam.REQUEST_CODE_ALBUM);
}
    1. 剪切设置(默认为 true)
 mTakeParam.isCrop = true;
    1. 压缩设置(默认为 true)
 mTakeParam.isCompress = true;
    1. 处理回调
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    TakeHelper.handleResult(this, mTakeParam, requestCode, resultCode, data);
}
    1. 实现ITakePhotoListener接口
public class MainActivity extends AppCompatActivity implements ITakePhotoListener {

    private TakeParam mTakeParam;

    .
    ..
    ...

    @Override
    public void onComplete(Uri uri) {
        //获取到图片Uri,显示在ImageView
        mImageView.setImageURI(uri);
    }

    @Override
    public void onCancel() {
        //取消选择
    }

    @Override
    public void onFailed() {
        //失败回调
        Toast.makeText(this, "获取图片失败", Toast.LENGTH_SHORT).show();
    }

    @Override
    public void startCropIntent(Intent intent) {
        //启动剪切功能
        startActivityForResult(intent, mParam.REQUEST_CODE_CROP);
    }
    1. 最后,最好选择在使用完毕时,选择清理的缓存的照片,如下:
    @Override
    public void onComplete(Uri uri) {
        mImageView.setImageURI(uri);
        //TakeHelper.clearFile(this);
    }

    //或者

    @Override
    protected void onDestroy() {
        TakeHelper.clearFile(this);
        super.onDestroy();
    }

适配android 7.0

    1. 方法1 -- 在Application类种添加以下代码
public class App extends Application  {

    @Override
    public void onCreate() {
        super.onCreate();
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
            StrictMode.VmPolicy.Builder builder = new StrictMode.VmPolicy.Builder();
            StrictMode.setVmPolicy(builder.build());
        }
    }
}
    1. 方法二 (相对麻烦)
    • 2.1 在AndroidManifest注册provider
    <provider
        android:name="android.support.v4.content.FileProvider"
        android:authorities="${applicationId}.fileprovider"
        android:exported="false"
        android:grantUriPermissions="true">
        <meta-data
            android:name="android.support.FILE_PROVIDER_PATHS"
            android:resource="@xml/provider_paths" />
    </provider>
    • 2.2 在项目资源文件下创建xml 目录,并且在xml目录下创建一个文件,文件名需要和上一步resource属性的文件名相对应,如:provider_paths,如下图:
20170812223649.png

在上图的五个标签(files-pathcache-pathexternal-pathexternal-files-pathexternal-cache-path)可以根据自己缓存文件路径选择开启哪几个

其他

库里面还有一些其他属性可以自定,详细情况可以查看
TakeParam

感谢:

本库的设计模式主要是参考了已经停止维护的PhotoCropper

最后如果喜欢我的这篇文章的话,可以点击收藏或者关注我,哈哈哈...

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,189评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,577评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,857评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,703评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,705评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,620评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,995评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,656评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,898评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,639评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,720评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,395评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,982评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,953评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,195评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,907评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,472评论 2 342

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,419评论 25 707
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,594评论 18 139
  • 一:这个组件我自己研究了好久,虽然感觉代码逻辑有点乱和复杂,但好在也是完成了,所以打算趁着还有记忆的时候记录下来,...
    垒虚阅读 773评论 0 0
  • 昏日残霞树已苍,半塘静水倚新妆。 满园春色胭脂醉,不胜杯中琥珀光。 烟莫举,酒稍狂。 珮摇明月洗凉浆。 情知梦里寻...
    屏风隔断阅读 250评论 0 1
  • 宠若不惊 看庭前花开花谢 去无留意 望天上云卷云舒 闲睱时光 若是能在葡萄架下 喝上一杯陈年葡萄酒 再美美的睡一觉...
    丶足迹阅读 313评论 0 0