1.从相册获取照片

   private void openAlumb() {

//mRxPermissions:三方权限库
mRxPermissions
.request(Manifest.permission.WRITE_EXTERNAL_STORAGE)
.subscribe(granted -> {
if (granted) { // Always true pre-M
Intent intentToPickPic = new Intent(Intent.ACTION_GET_CONTENT, null);
// 如果限制上传到服务器的图片类型时可以直接写如:"image/jpeg 、 image/png等的类型" 所有类型则写 "image/*"
intentToPickPic.setDataAndType(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, "image/*"); /*是否有能处理的外部activity*/
if (intentToPickPic.resolveActivity(getPackageManager()) != null) { startActivityForResult(intentToPickPic, REQUEST_ALUBM);
}
} else { }
}); }

2.拍照

private void takePhoto() {

        mRxPermissions.requestEach(Manifest.permission.WRITE_EXTERNAL_STORAGE).subscribe(permisssion -> {
if (permisssion.granted) {
if (getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA_ANY)) {//手机是否有探头
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
/*是否有能处理的外部activity*/
if (intent.resolveActivity(getPackageManager()) != null) { try {
File photoFile = creatImageFile(); Uri photoUri = FileProvider.getUriForFile(UserInfoActivity.this,
"com.ore.jalon.trace.fileprovider", photoFile); intent.putExtra(MediaStore.EXTRA_OUTPUT, photoUri); } catch (IOException e) {
e.printStackTrace();
} startActivityForResult(intent, REQUEST_TAKE_PHOTO);
} }
} else if (permisssion.shouldShowRequestPermissionRationale) {//拒绝了并且勾选了不再提示 } else { }
}); }
 
 
 private File creatImageFile() throws IOException {
/*判断是否有外存*/
if (Environment.getExternalStorageState().equals(MEDIA_UNMOUNTED)) { return null;
} String timeStamp = new SimpleDateFormat("yyyy_MMddmmss").format(new Date());
String imgFileName = "JPEG_" + timeStamp + "_"; /*保存到相册 */
File fileDirct = Environment.getExternalStoragePublicDirectory(DIRECTORY_DCIM); File imgFile = File.createTempFile(imgFileName, ".jpg", fileDirct); mCurrentPhotoPath = imgFile.getAbsolutePath();
return imgFile;
}

2.fileprovider: Android7.0开始 file://Uri 不给用,那么换个 Uri 为 content:// 来替代。

FileProvider使用

现在xml文件中申明

     <provider
android:name="android.support.v4.content.FileProvider"
//authorities:自定义,其他的固定
android:authorities="com.package.fileprovider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
//指定路径文件
android:resource="@xml/file_paths"></meta-data>
</provider>

新建XML文件夹新建path.xml

<paths xmlns:android="http://schemas.android.com/apk/res/android">
<!--system 相册 path:如果使用私有存储的话自定义一个文件路径比如/pigphoto-->
<external-path name="my_images" path="DCIM" />
</paths>

最后在处理获取到的照片uri

  protected void onActivityResult(int requestCode, int resultCode, Intent data) {

        if (requestCode == REQUEST_TAKE_PHOTO && resultCode == RESULT_OK) {

//通过三方的缩放裁切一下图片
startPhotoZoom(Uri.fromFile(new File(mCurrentPhotoPath))); }
if (requestCode == REQUEST_ALUBM && resultCode == RESULT_OK) { Uri uri = data.getData();
startPhotoZoom(uri); }
if (requestCode == UCrop.REQUEST_CROP && resultCode == RESULT_OK) {
//获取裁切后的图片
final Uri resultUri = UCrop.getOutput(data); }
}
public void startPhotoZoom(Uri uri) {
LogUtil.d(this.toString(), "begin cut");
try {
File file = creatImageFile();
UCrop.Options options = new UCrop.Options();
options.setHideBottomControls(true);
UCrop.of(uri, Uri.fromFile(file))
.withAspectRatio(1, 1)
.withMaxResultSize(200, 200).withOptions(options)
.start(this);
} catch (IOException e) {
e.printStackTrace();
} }

Android拍照和从相册获取照片的更多相关文章

  1. Android 拍照或者从相册获取图片的实现

    我们常常会用到上传头像,或者发帖子的时候选择本地图片上传的功能.这个很常见 今天因为app的需求我研究了下.现在分享下. 其实不论是通过拍照还是从相册选取都会用到Intent 这是系统提供给我们用来调 ...

  2. android --拍照,从相册获取图片,兼容高版本,兼容小米手机

    前几天做项目中选择图片的过程中遇到高版本和小米手机出现无法选择和崩溃的问题,现在记录下来,后面出现同类问题,也好查找 1,定义常量: private static final int TAKE_PIC ...

  3. Android 拍照、从相册获取及裁剪的相关实现

    首先这些功能都是通过Intent去启动系统的服务去实现的,所以自然就有相应的Action.相关Actiong如下: 拍照——MediaStore.ACTION_IMAGE_CAPTURE (" ...

  4. android 拍照和从相册选择组件

    android 拍照及从相册选择组件 单独封装到一个 activity 中便于更好的复用 拍照或从相册选择成功后使用 EventBus 发出广播回传图片路径,和调用者充分解耦合 根据传入参数支持裁剪和 ...

  5. 简单的 Android 拍照并显示以及获取路径后上传

    简单的 Android 拍照并显示以及获取路径后上传 Activity 中的代码,我只贴出重要的事件部分代码 public void doPhoto(View view) { destoryBimap ...

  6. android 照相或从相册获取图片并裁剪

    照相或从相册获取图片并裁剪 在android应用中很多时候都要获取图片(例如获取用户的头像)就需要从用户手机上获取图片.可以直接照,也可以从用户SD卡上获取图片,但获取到的图片未必能达到要求.所以要对 ...

  7. RN 使用第三方组件之react-native-image-picker(拍照/从相册获取图片)

    首先给个github地址:https://github.com/react-community/react-native-image-picker  英文不行的看下面这个笔记 该插件可以同时给iOS和 ...

  8. Android 拍照或从相册取图片并裁剪

    在Android中,Intent触发Camera程序,拍好照片后,将会返回数据,但是考虑到内存问题,Camera不会将全尺寸的图像返回给调用的Activity,一般情况下,有可能返回的是缩略图,比如1 ...

  9. 在微信移动端input file拍照或从相册选择照片后会自动刷新页面退回到一开始网站进入的页面

    <input type="file" accept="image/*"/> 调用打开摄像头后,聚焦后拍照,点击确认,这时页面会出现刷新动作,然后回退 ...

随机推荐

  1. 算法习题---5.3字典(Uva10815)

    一:题目 给出一段英文,里面包含一些单词,空格和标点,单词不区分大小写,默认都为小写.按照字典序输出这些单词(这些单词不能有重复,字母全部变成小写) (一)样例输入 Adventures in Dis ...

  2. Linux系统的关机、重启、睡眠

    一.关机.重启前的准备1.查看网络联机状态.后台可执行程序 查看一下两样东西,可以让你稍微了解主机目前的使用状态 查看网络联机状态:netstat  -a查看后台执行的程序:ps  -aux2.数据同 ...

  3. word正文中怎么引用章节编号、怎么引用图片表格编号、交叉引用

    摘自:https://blog.csdn.net/m0_37549050/article/details/88823135 在写文档的时候,可能会出现需要在文档中引用其它段落的编号.比如文档分了章节, ...

  4. [译]如何将dataframe的两列结合起来?

    我用pandas生成了一个20 x 4000的dataframe.其中两列名为Year和quarter.我想创建一个名为period的变量,将Year = 2000和quarter = q2变为200 ...

  5. Linux查找含有特定字符串的文件

    Linux查找含有特定字符串的文件命令为grep.以下为详细的使用方法 grep [OPTIONS] PATTERN [FILE...] #实例:递归查找当前文件夹下所有含有test的文件,并显示行号 ...

  6. 小程序报错 thirdScriptError

    thirdScriptError sdk uncaught third Error Unexpected token export SyntaxError: Unexpected token expo ...

  7. xps转换为pdf

    https://www.cnblogs.com/zeoy/archive/2013/01/09/2852941.html https://blog.csdn.net/jafucong/article/ ...

  8. [ kvm ] 学习笔记 5:QEMU-KVM 命令详解

    1. QEMU.KVM .QEMU-KVM QEMU 提供了一系列的硬件模拟设备(cpu.网卡.磁盘等),客户机指令都需要QEMU翻译,因此性能较差.KVM 是Linux 内核提供的虚拟化模块,负责C ...

  9. 微信小程序技巧记录

    1.直接在app.json中添加pages,会自动按照路径生成page目录文件: 2.动态修改样式: /** * 页面的初始数据 */ data: { authorInfo: [], article: ...

  10. windows2008R2下iis7.5中的url重写(urlrewrite)

    以前在windows2003里,使用的是iis6.0,那时常使用的URL重写组件是iisrewrite,当服务器升级到windows2008R2时,IIS成了64位的7.5,结果iisreite组件是 ...