Android开发从相册中选取照片的示例代码

最近项目在做一个功能:就是需要从用户选择头像跳转到相册选择图片,这应该是一个很简单的需求,但是在网上搜了一下有好多都讲的很乱,其实用几十行代码就可以实现的为什么要说的那么复杂呢,下面就简单说一下喽。

下面说两种方法分别是直接选择相册返回,另外一种为选择相册之后进行裁剪。先上效果图

(1)直接选择相册后返回

第一步就是主要跳转的相册

 //在这里跳转到手机系统相册里面
    Intent intent = new Intent(
        Intent.ACTION_PICK,
        android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
    startActivityForResult(intent, IMAGE_REQUEST_CODE);

第二步就是返回的时候获取相册的路径

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

    super.onActivityResult(requestCode, resultCode, data);
    //在相册里面选择好相片之后调回到现在的这个activity中
    switch (requestCode) {
      case IMAGE_REQUEST_CODE://这里的requestCode是我自己设置的,就是确定返回到那个Activity的标志
        if (resultCode == RESULT_OK) {//resultcode是setResult里面设置的code值
          try {
            Uri selectedImage = data.getData(); //获取系统返回的照片的Uri
            String[] filePathColumn = {MediaStore.Images.Media.DATA};
            Cursor cursor = getContentResolver().query(selectedImage,
                filePathColumn, null, null, null);//从系统表中查询指定Uri对应的照片
            cursor.moveToFirst();
            int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
            path = cursor.getString(columnIndex); //获取照片路径
            cursor.close();
            Bitmap bitmap = BitmapFactory.decodeFile(path);
            iv_photo.setImageBitmap(bitmap);
          } catch (Exception e) {
            // TODO Auto-generatedcatch block
            e.printStackTrace();
          }
        }
        break;
    }
  }

(2) 选择图片后裁剪先上图

首先也是要调起相册

// 使用意图直接调用手机相册
    Intent intent = new Intent(
        Intent.ACTION_PICK,
        android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
    // 打开手机相册,设置请求码
    startActivityForResult(intent, IMAGE_REQUEST_CODE);

然后这里增加了一步就是用户选择了相册之后然后再增加裁剪功能

 @Override
  protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (resultCode != RESULT_OK) {
      return;
    } else {
      switch (requestCode) {
        case IMAGE_REQUEST_CODE:
          resizeImage(data.getData());
          break;

        case RESIZE_REQUEST_CODE:
          if (data != null) {
            showResizeImage(data);
          }
          break;
      }
    }
    super.onActivityResult(requestCode, resultCode, data);
  }
  //这里增加裁剪
  public void resizeImage(Uri uri) {
    Intent intent = new Intent("com.android.camera.action.CROP");
    intent.setDataAndType(uri, "image/*");
    intent.putExtra("crop", "true");
    intent.putExtra("aspectX", 1);
    intent.putExtra("aspectY", 1);
    //裁剪的大小
    intent.putExtra("outputX", 150);
    intent.putExtra("outputY", 150);
    intent.putExtra("return-data", true);
    //设置返回码
    startActivityForResult(intent, RESIZE_REQUEST_CODE);
  }
  private void showResizeImage(Intent data) {
    Bundle extras = data.getExtras();
    if (extras != null) {
      Bitmap photo = extras.getParcelable("data");
      //裁剪之后设置保存图片的路径
      String path = getFilesDir().getPath() + File.separator + IMAGE_FILE_NAME;
      //压缩图片
      ImageUtils.saveImage(photo, path);
      new BitmapDrawable();
      Drawable drawable = new BitmapDrawable(photo);
      iv_photo.setImageDrawable(drawable);
    }
  }

ok,源代码下载。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

时间: 2017-09-12

android照相、相册获取图片剪裁报错的解决方法

这是调用相机 public static File getImageFromCamer(Context context, File cameraFile, int REQUE_CODE_CAMERA, Intent intent) { intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); File fileDir = HelpUtil.getFile(context, "/Tour/user_photos"); cameraFile

Android从相册选择图片剪切和上传

本文实例为大家分享了Android剪切和上传图片的具体代码,供大家参考,具体内容如下 1.从Android系统相册选择一张图片getImageFromAlbum(): /** * 从图库获得照片 */ protected void getImageFromAlbum() { isImgs = true; // MainApplication.changeSettingStateus = true; Intent intent = new Intent(Intent.ACTION_PICK); i

android中打开相机、打开相册进行图片的获取示例

这里介绍在Android中实现相机调取.拍照片.获取照片.存储新路径等已经打开相册.选择照片等功能 首先看一下界面,很简单 配置读取内存卡和调用照相头的功能 <!-- 使用网络权限 --> <uses-permission android:name="android.permission.INTERNET"/> <!-- 写sd卡的权限 --> <uses-permission android:name="android.permis

Android实现长按图片保存至相册功能

前言:前面写了一篇reactnative的学习笔记,说reactnative的Android框架中有很多福利,确实是的,也说到了我们app中的一个把图片保存到相册的功能,好吧,还是准备写一篇博客,就当笔记了- 先上几张app的图片: 一进app就是一个进度条加载图片(我待会也会说一下进度条view跟怎么监听图片加载过程): 图片加载完毕后: 长按图片进入相册可以看到我们保存的图片: 监听图片加载的loaddingview源码(不是很难,我就直接贴代码了): package com.leo.cam

Android拍照和获取相册图片

之前遇到各种拍照啊,获取相册图片之类,都是直接去度娘,要么之前的代码复制下,没好好总结过. 再也不要问度娘了,再也不用一堆博客里找啊找了... ----------------------------------------------我是正文的分割线----------------------------------------------------------- 一个一个来,先说调用手机相机拍照(最简单版): cameraButton.setOnClickListener(new View

Android 打开相册选择单张图片实现代码

Android 打开相册选择单张图片实现代码                 以下就是如何在应用中打开图库并选择一张图片进行应用,代码很简单,注释很详细. 实现代码: btn8.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { /*在Activity Action里面有一个"ACTION_GET_CONTENT"字符串常量, // 该常量让用户选择特定类型

Android实现保存图片到本地并在相册中显示

Android中拍照保存图片到本地是常见的一种需求,之前碰到了一个问题,就是在4.4中,刷新相册会出现ANR,经过一番百度解决了这个问题. 首先是保存图片到本地 private static final String SAVE_PIC_PATH = Environment.getExternalStorageState().equalsIgnoreCase(Environment.MEDIA_MOUNTED) ? Environment.getExternalStorageDirectory()

android获取相册图片和路径的实现方法

Android开发获取相册图片的方式网上有很多种,这里说一个Android4.4后的方法,因为版本越高,一些老的api就会被弃用,新的api和老的api不兼容,导致出现很多问题. 比如:managedQuery()现在已经被getContentResolver().query()替代了,不过它们的参数都是一样的 再比如Android4.4后Intent(Intent.ACTION_GET_CONTENT);和Intent(Intent.ACTION_OPEN_DOCUMENT);两个方法所得到的

Android 获取内外SD卡路径几种方法总结

Android 获取SD卡路径: 外置sd卡路径,也许很多同学在平时的工作中并不会用到,因为现在很多机型都不支持外置sd卡(这也是Google目标),所以并不用考虑外置sd卡的路径问题.除了开发文件管理类的应用之外,其他应用使用 Enviroment 这个类中的一些静态方法就能满足需要.但也有一些特殊需求需要用到外置sd卡路径,那怎么才能准确获得外置sd卡的路径呢? 方法一 //内置sd卡路径 String sdcardPath = System.getenv("EXTERNAL_STORAGE

沙盒路径获取以及图片保存到相簿的方法

iphone沙盒(sandbox)中的几个目录获取方式: // 获取沙盒主目录路径 NSString *homeDir = NSHomeDirectory(); // 获取Documents目录路径 NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSString *docDir = [paths objectAtIndex:0]; // 获取Cac

Android获取本机各种类型文件的方法

介绍 本篇介绍Android获取本机各种类型文件的方法,已经封装成工具类,末尾有源码下载地址. 提示 获取音乐.视频.图片.文档等文件是需要有读取SD卡的权限的,如果是6.0以下的系统,则直接在清单文件中声明SD卡读取权限即可:如果是6.0或以上,则需要动态申请权限. FileManager的使用 FileManager是封装好的用于获取本机各类文件的工具类,使用方式如:FileManager.getInstance(Context context).getMusics(),使用的是单例模式创建

python获取远程图片大小和尺寸的方法

本文实例讲述了python获取远程图片大小和尺寸的方法.分享给大家供大家参考.具体分析如下: 这段代码通过urllib2打开远程图片,通过cStringIO读取文件内容,不用保存到磁盘即可读取图片文件的信息 #!/usr/bin/env python #encoding=utf-8 import cStringIO, urllib2, Image url = 'http://www.jb51.net/images/logo.gif' file = urllib2.urlopen(url) tmp

Android编程单击图片实现切换效果的方法

本文实例讲述了Android编程单击图片实现切换效果的方法.分享给大家供大家参考,具体如下: 新建一个Android项目,命名为FrameLayout 此实例主要操作src文件夹下的MainActivity.Java类文件和res/layout下的activity_main.xml布局文件 1.布局主页面代码activity_main.xml↓ <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android&qu

Android获取手机系统版本等信息的方法

本文实例讲述了Android获取手机系统版本等信息的方法.分享给大家供大家参考.具体如下: String phoneInfo = "Product: " + android.os.Build.PRODUCT; phoneInfo += ", CPU_ABI: " + android.os.Build.CPU_ABI; phoneInfo += ", TAGS: " + android.os.Build.TAGS; phoneInfo += &qu

android获取监听SD Card状态的方法

本文实例讲述了android获取监听SD Card状态的方法.分享给大家供大家参考.具体分析如下: 1. 注册StorageEventListener来监听SD卡状态即onStorageStateChanged()方法,当sd卡状态改变时,调用该方法. 复制代码 代码如下: public void onStorageStateChanged(String path,String oldState,String newState){ if (newState.equals(Environment.

Android获取手机本机号码的实现方法

Android获取手机本机号码的实现方法 反射TelephoneManager 获取本机号码,注意一下提供的接口有的SIM卡没写是获取不到的,该接口只适配Android5.0以上版本 public String getMsisdn(int slotId) { return getLine1NumberForSubscriber(getSubIdForSlotId(slotId)); } 权限 <uses-permission android:name="android.permission