因为android经常使用到添加图片功能,每次自己写都太麻烦,再加上动态权限的获取,非常容易弄混出错,所以整理一下,以后都这么用,慢慢熟悉。
1、图片选择框架用知乎的 Matisse
GitHub - zhihu/Matisse: A well-designed local image and video selector for Android
2、动态权限申请用 XmPermissions
GitHub - lhm0603/XmPermissionsProject: Android动态权限申请框架
Android动态权限申请框架_h461415832的博客-CSDN博客_android 权限申请框架
注意事项 : Matisse 需要自己额外再配置provider ,还要自己引入glide依赖,在调用拍照功能的时候 ,用如下方法
MediaStoreCompat mediaStoreCompat = new MediaStoreCompat(MainActivity.this); mediaStoreCompat.setCaptureStrategy(new CaptureStrategy(true, "PhotoPicker"));//自己设置的provider属性 mediaStoreCompat.dispatchCaptureIntent(MainActivity.this, 2016); Uri currentPhotoUri = mediaStoreCompat.getCurrentPhotoUri(); String currentPhotoPath = mediaStoreCompat.getCurrentPhotoPath(); Log.d("lol", "onClick: currentPhotoUri " + currentPhotoUri); Log.d("lol", "onClick: currentPhotoPath " + currentPhotoPath); //uri 和 path 都能用 Glide.with(MainActivity.this).load(currentPhotoPath).into(imageView);
不要从 onActivityResult 方法里拿data ,因为data里是空的,这是因为拍照时,提前创建了jpg文件,只是把照片内容保存在已经创建好的文件里,而不是把图片文件作为data返回。(如果按照一般模式,把图片作为data返回,图片会被压缩,变得很模糊)