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

Android开发获取相册图片的方式网上有很多种,这里说一个Android4.4后的方法,因为版本越高,一些老的api就会被弃用,新的api和老的api不兼容,导致出现很多问题。

比如:managedQuery()现在已经被getContentResolver().query()替代了,不过它们的参数都是一样的

再比如Android4.4后Intent(Intent.ACTION_GET_CONTENT);和Intent(Intent.ACTION_OPEN_DOCUMENT);两个方法所得到的图片的uri是不一样的,用老的方法导致在Android4.4系统获取不到图片。

 private ImageView imgShow = null;
 private TextView imgPath = null;
 private final int IMAGE_CODE = 0;
 Uri bitmapUri = null;
 private final String IMAGE_TYPE = "image/*";

imgShow是一个用来显示图片的imageView控件,imgPath是用来显示获取到图片的路径的TextView控件,都要在onCreate()函数里连接到对应的控件Id,IMAGE_CODE是自定义的一个参数,可以为其它数值。

private void selectImage() {
  // TODO Auto-generated method stub
  boolean isKitKatO = Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT;
  Intent getAlbum;
  if (isKitKatO) {
   getAlbum = new Intent(Intent.ACTION_OPEN_DOCUMENT);
  } else {
   getAlbum = new Intent(Intent.ACTION_GET_CONTENT);
  }
  getAlbum.setType(IMAGE_TYPE);

  startActivityForResult(getAlbum, IMAGE_CODE);

 }

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

  if (resultCode != RESULT_OK) {

   Log.e("TAG->onresult", "ActivityResult resultCode error");

   return;

  }
  Bitmap bm = null;
  ContentResolver resolver = getContentResolver();
  if (requestCode == IMAGE_CODE) {
   try {

    Uri originalUri = data.getData();  //获得图片的uri
    bitmapUri = originalUri;
    isSelectPic = true;
    bm = MediaStore.Images.Media.getBitmap(resolver, originalUri);
    //显得到bitmap图片
    imgShow.setImageBitmap(bm);
    String[] proj = {MediaStore.Images.Media.DATA};

    Cursor cursor = getContentResolver().query(originalUri, proj, null, null, null);
    if(cursor.moveToFirst()) {
     int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
     String path = cursor.getString(column_index);
     imgPath.setText(path);
    }
    cursor.close();
   } catch (IOException e) {
    Log.e("TAG-->Error", e.toString());
   }

  }

 }

这里用

getContentResolver().query()替代老的managedQuery(),还在一开始判断编译的sdk版本是否为Android4.4以后的版本
boolean isKitKatO = Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT;
是的话就用新的方法,否则用老的方法,在button控件里调用selectImage()函数就能从图片库获取图片。
要想通过uil得到相应的bitmap图片,可以通过以下方法:

private Bitmap decodeUriAsBitmap(Uri uri) {
  Bitmap bitmap = null;
  try {
   bitmap = BitmapFactory.decodeStream(getContentResolver().openInputStream(uri));
  } catch (FileNotFoundException e) {
   e.printStackTrace();
   return null;
  }
  return bitmap;
 }

传入获取到的图片的uri就能得到相应的bitmap图片。

以上就是本文的全部内容,希望对大家学习Android软件编程有所帮助。

(0)

相关推荐

  • Android拍照和获取相册图片

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

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

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

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

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

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

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

  • 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实现长按图片保存至相册功能

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

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

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

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

    最近项目在做一个功能:就是需要从用户选择头像跳转到相册选择图片,这应该是一个很简单的需求,但是在网上搜了一下有好多都讲的很乱,其实用几十行代码就可以实现的为什么要说的那么复杂呢,下面就简单说一下喽. 下面说两种方法分别是直接选择相册返回,另外一种为选择相册之后进行裁剪.先上效果图 (1)直接选择相册后返回 第一步就是主要跳转的相册 //在这里跳转到手机系统相册里面 Intent intent = new Intent( Intent.ACTION_PICK, android.provider.M

  • 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

随机推荐