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. 如何:创建返回 UI 的外接程序

    https://msdn.microsoft.com/zh-cn/library/bb909849(v=vs.100).aspx

  2. Error:java: Compilation failed: internal java compiler

    errorInformation:java: javacTask: 源发行版 1.8 需要目标发行版 1.8 解决此类问题 检查自己的JDK是否一致 1  setting--------built  ...

  3. LeetCode_326. Power of Three

    326. Power of Three Easy Given an integer, write a function to determine if it is a power of three. ...

  4. Eureka 与 zookeeper 的区别、

    前言在微服务的开发过程中,如果使用的是 Dubbo 那就必须使用到 Zookeeper ,在使用 Spring Cloud Eureka 时,自然其功能更强大得多.博主也不得不感叹,Spring Cl ...

  5. 关于启动kylin报Failed to find metadata store by url: kylin_metadata@hbase的问题解决

    一.出问题的原因 昨天因为项目需要,要将cloudera集群改成高可用,没想到失败了,当时因为冲动手动删了几个hdfs实例的原因,导致退不到原来的状态,折腾了一天,最后终于退回了非HA的集群,但是hd ...

  6. Python数据挖掘之随机森林

    主要是使用随机森林将four列缺失的数据补齐. # fit到RandomForestRegressor之中,n_estimators代表随机森林中的决策树数量 #n_jobs这个参数告诉引擎有多少处理 ...

  7. LeetCode 459. 重复的子字符串(Repeated Substring Pattern)

    459. 重复的子字符串 459. Repeated Substring Pattern 题目描述 给定一个非空的字符串,判断它是否可以由它的一个子串重复多次构成.给定的字符串只含有小写英文字母,并且 ...

  8. LeetCode 206. 反转链表(Reverse Linked List) 16

    206. 反转链表 206. Reverse Linked List 题目描述 反转一个单链表. 每日一算法2019/5/19Day 16LeetCode206. Reverse Linked Lis ...

  9. [转帖]Hadoop、Hive、Spark 之间关系

    Hadoop.Hive.Spark 之间关系 https://www.cnblogs.com/jins-note/p/9513426.html 很的很诙谐有趣. 作者:Xiaoyu Ma ,大数据工程 ...

  10. [EF] - "已有打开的与此 Command 相关联的 DataReader,必须首先将它关闭" 之解决

    错误 解决 在 ConnectionString 中添加 MultipleActiveResultSets=true(适用于SQL 2005以后的版本).MultipleActiveResultSet ...